async_openai_wasm/
vector_stores.rs

1use serde::Serialize;
2
3use crate::{
4    Client, VectorStoreFiles,
5    config::Config,
6    error::OpenAIError,
7    types::{
8        CreateVectorStoreRequest, DeleteVectorStoreResponse, ListVectorStoresResponse,
9        UpdateVectorStoreRequest, VectorStoreObject, VectorStoreSearchRequest,
10        VectorStoreSearchResultsPage,
11    },
12    vector_store_file_batches::VectorStoreFileBatches,
13};
14
15pub struct VectorStores<'c, C: Config> {
16    client: &'c Client<C>,
17}
18
19impl<'c, C: Config> VectorStores<'c, C> {
20    pub fn new(client: &'c Client<C>) -> Self {
21        Self { client }
22    }
23
24    /// [VectorStoreFiles] API group
25    pub fn files(&self, vector_store_id: &str) -> VectorStoreFiles<C> {
26        VectorStoreFiles::new(self.client, vector_store_id)
27    }
28
29    /// [VectorStoreFileBatches] API group
30    pub fn file_batches(&self, vector_store_id: &str) -> VectorStoreFileBatches<C> {
31        VectorStoreFileBatches::new(self.client, vector_store_id)
32    }
33
34    /// Create a vector store.
35    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
36    pub async fn create(
37        &self,
38        request: CreateVectorStoreRequest,
39    ) -> Result<VectorStoreObject, OpenAIError> {
40        self.client.post("/vector_stores", request).await
41    }
42
43    /// Retrieves a vector store.
44    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
45    pub async fn retrieve(&self, vector_store_id: &str) -> Result<VectorStoreObject, OpenAIError> {
46        self.client
47            .get(&format!("/vector_stores/{vector_store_id}"))
48            .await
49    }
50
51    /// Returns a list of vector stores.
52    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
53    pub async fn list<Q>(&self, query: &Q) -> Result<ListVectorStoresResponse, OpenAIError>
54    where
55        Q: Serialize + ?Sized,
56    {
57        self.client.get_with_query("/vector_stores", &query).await
58    }
59
60    /// Delete a vector store.
61    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
62    pub async fn delete(
63        &self,
64        vector_store_id: &str,
65    ) -> Result<DeleteVectorStoreResponse, OpenAIError> {
66        self.client
67            .delete(&format!("/vector_stores/{vector_store_id}"))
68            .await
69    }
70
71    /// Modifies a vector store.
72    #[crate::byot(T0 = std::fmt::Display, T1 = serde::Serialize, R = serde::de::DeserializeOwned)]
73    pub async fn update(
74        &self,
75        vector_store_id: &str,
76        request: UpdateVectorStoreRequest,
77    ) -> Result<VectorStoreObject, OpenAIError> {
78        self.client
79            .post(&format!("/vector_stores/{vector_store_id}"), request)
80            .await
81    }
82
83    /// Searches a vector store.
84    #[crate::byot(T0 = std::fmt::Display, T1 = serde::Serialize, R = serde::de::DeserializeOwned)]
85    pub async fn search(
86        &self,
87        vector_store_id: &str,
88        request: VectorStoreSearchRequest,
89    ) -> Result<VectorStoreSearchResultsPage, OpenAIError> {
90        self.client
91            .post(&format!("/vector_stores/{vector_store_id}/search"), request)
92            .await
93    }
94}