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