dynamo_async_openai/
vector_store_files.rs

1// SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2// SPDX-License-Identifier: Apache-2.0
3//
4// Based on https://github.com/64bit/async-openai/ by Himanshu Neema
5// Original Copyright (c) 2022 Himanshu Neema
6// Licensed under MIT License (see ATTRIBUTIONS-Rust.md)
7//
8// Modifications Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES.
9// Licensed under Apache 2.0
10
11use serde::Serialize;
12
13use crate::{
14    Client,
15    config::Config,
16    error::OpenAIError,
17    types::{
18        CreateVectorStoreFileRequest, DeleteVectorStoreFileResponse, ListVectorStoreFilesResponse,
19        VectorStoreFileContentResponse, VectorStoreFileObject,
20    },
21};
22
23/// Vector store files represent files inside a vector store.
24///
25/// Related guide: [File Search](https://platform.openai.com/docs/assistants/tools/file-search)
26pub struct VectorStoreFiles<'c, C: Config> {
27    client: &'c Client<C>,
28    pub vector_store_id: String,
29}
30
31impl<'c, C: Config> VectorStoreFiles<'c, C> {
32    pub fn new(client: &'c Client<C>, vector_store_id: &str) -> Self {
33        Self {
34            client,
35            vector_store_id: vector_store_id.into(),
36        }
37    }
38
39    /// Create a vector store file by attaching a [File](https://platform.openai.com/docs/api-reference/files) to a [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).
40    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
41    pub async fn create(
42        &self,
43        request: CreateVectorStoreFileRequest,
44    ) -> Result<VectorStoreFileObject, OpenAIError> {
45        self.client
46            .post(
47                &format!("/vector_stores/{}/files", &self.vector_store_id),
48                request,
49            )
50            .await
51    }
52
53    /// Retrieves a vector store file.
54    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
55    pub async fn retrieve(&self, file_id: &str) -> Result<VectorStoreFileObject, OpenAIError> {
56        self.client
57            .get(&format!(
58                "/vector_stores/{}/files/{file_id}",
59                &self.vector_store_id
60            ))
61            .await
62    }
63
64    /// Delete a vector store file. This will remove the file from the vector store but the file itself will not be deleted. To delete the file, use the [delete file](https://platform.openai.com/docs/api-reference/files/delete) endpoint.
65    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
66    pub async fn delete(
67        &self,
68        file_id: &str,
69    ) -> Result<DeleteVectorStoreFileResponse, OpenAIError> {
70        self.client
71            .delete(&format!(
72                "/vector_stores/{}/files/{file_id}",
73                &self.vector_store_id
74            ))
75            .await
76    }
77
78    /// Returns a list of vector store files.
79    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
80    pub async fn list<Q>(&self, query: &Q) -> Result<ListVectorStoreFilesResponse, OpenAIError>
81    where
82        Q: Serialize + ?Sized,
83    {
84        self.client
85            .get_with_query(
86                &format!("/vector_stores/{}/files", &self.vector_store_id),
87                &query,
88            )
89            .await
90    }
91
92    /// Retrieve the parsed contents of a vector store file.
93    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
94    pub async fn retrieve_file_content(
95        &self,
96        file_id: &str,
97    ) -> Result<VectorStoreFileContentResponse, OpenAIError> {
98        self.client
99            .get(&format!(
100                "/vector_stores/{}/files/{file_id}/content",
101                &self.vector_store_id
102            ))
103            .await
104    }
105}