async_openai/
vector_stores.rs1use serde::Serialize;
2
3use crate::{
4 config::Config,
5 error::OpenAIError,
6 types::{
7 CreateVectorStoreRequest, DeleteVectorStoreResponse, ListVectorStoresResponse,
8 UpdateVectorStoreRequest, VectorStoreObject,
9 },
10 vector_store_file_batches::VectorStoreFileBatches,
11 Client, VectorStoreFiles,
12};
13
14pub struct VectorStores<'c, C: Config> {
15 client: &'c Client<C>,
16}
17
18impl<'c, C: Config> VectorStores<'c, C> {
19 pub fn new(client: &'c Client<C>) -> Self {
20 Self { client }
21 }
22
23 pub fn files(&self, vector_store_id: &str) -> VectorStoreFiles<C> {
25 VectorStoreFiles::new(self.client, vector_store_id)
26 }
27
28 pub fn file_batches(&self, vector_store_id: &str) -> VectorStoreFileBatches<C> {
30 VectorStoreFileBatches::new(self.client, vector_store_id)
31 }
32
33 #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
35 pub async fn create(
36 &self,
37 request: CreateVectorStoreRequest,
38 ) -> Result<VectorStoreObject, OpenAIError> {
39 self.client.post("/vector_stores", request).await
40 }
41
42 #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
44 pub async fn retrieve(&self, vector_store_id: &str) -> Result<VectorStoreObject, OpenAIError> {
45 self.client
46 .get(&format!("/vector_stores/{vector_store_id}"))
47 .await
48 }
49
50 #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
52 pub async fn list<Q>(&self, query: &Q) -> Result<ListVectorStoresResponse, OpenAIError>
53 where
54 Q: Serialize + ?Sized,
55 {
56 self.client.get_with_query("/vector_stores", &query).await
57 }
58
59 #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
61 pub async fn delete(
62 &self,
63 vector_store_id: &str,
64 ) -> Result<DeleteVectorStoreResponse, OpenAIError> {
65 self.client
66 .delete(&format!("/vector_stores/{vector_store_id}"))
67 .await
68 }
69
70 #[crate::byot(T0 = std::fmt::Display, T1 = serde::Serialize, R = serde::de::DeserializeOwned)]
72 pub async fn update(
73 &self,
74 vector_store_id: &str,
75 request: UpdateVectorStoreRequest,
76 ) -> Result<VectorStoreObject, OpenAIError> {
77 self.client
78 .post(&format!("/vector_stores/{vector_store_id}"), request)
79 .await
80 }
81}