Skip to main content

vectorizer_sdk/client/
vectors.rs

1//! Vector-level surface: get, batch-insert texts, embed.
2//!
3//! Single-vector retrieval, batch text insertion, and on-server
4//! embedding generation. Search lives in [`super::search`];
5//! collection-level CRUD in [`super::collections`].
6
7use super::VectorizerClient;
8use crate::error::{Result, VectorizerError};
9use crate::models::*;
10
11impl VectorizerClient {
12    /// Fetch one vector by id.
13    pub async fn get_vector(&self, collection: &str, vector_id: &str) -> Result<Vector> {
14        let response = self
15            .make_request(
16                "GET",
17                &format!("/collections/{collection}/vectors/{vector_id}"),
18                None,
19            )
20            .await?;
21        let vector: Vector = serde_json::from_str(&response).map_err(|e| {
22            VectorizerError::server(format!("Failed to parse get vector response: {e}"))
23        })?;
24        Ok(vector)
25    }
26
27    /// Insert a batch of texts into a collection. The server
28    /// embeds them with the collection's configured provider.
29    pub async fn insert_texts(
30        &self,
31        collection: &str,
32        texts: Vec<BatchTextRequest>,
33    ) -> Result<BatchResponse> {
34        let payload = serde_json::json!({ "texts": texts });
35        let response = self
36            .make_request(
37                "POST",
38                &format!("/collections/{collection}/documents"),
39                Some(serde_json::to_value(payload)?),
40            )
41            .await?;
42        let batch_response: BatchResponse = serde_json::from_str(&response).map_err(|e| {
43            VectorizerError::server(format!("Failed to parse insert texts response: {e}"))
44        })?;
45        Ok(batch_response)
46    }
47
48    /// Generate an embedding for `text` using either the supplied
49    /// `model` name or the server default.
50    pub async fn embed_text(&self, text: &str, model: Option<&str>) -> Result<EmbeddingResponse> {
51        let mut payload = serde_json::Map::new();
52        payload.insert(
53            "text".to_string(),
54            serde_json::Value::String(text.to_string()),
55        );
56        if let Some(model) = model {
57            payload.insert(
58                "model".to_string(),
59                serde_json::Value::String(model.to_string()),
60            );
61        }
62        let response = self
63            .make_request("POST", "/embed", Some(serde_json::Value::Object(payload)))
64            .await?;
65        let embedding_response: EmbeddingResponse =
66            serde_json::from_str(&response).map_err(|e| {
67                VectorizerError::server(format!("Failed to parse embedding response: {e}"))
68            })?;
69        Ok(embedding_response)
70    }
71}