tcvectordb 0.1.9

Rust SDK for Tencent Cloud VectorDB
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum FieldType {
    #[serde(rename = "uint64")]
    Uint64,
    #[serde(rename = "string")]
    String,
    #[serde(rename = "array")]
    Array,
    #[serde(rename = "json")]
    Json,
    #[serde(rename = "vector")]
    Vector,
    #[serde(rename = "float16_vector")]
    Float16Vector,
    #[serde(rename = "bfloat16_vector")]
    BFloat16Vector,
    #[serde(rename = "binary_vector")]
    BinaryVector,
    #[serde(rename = "sparseVector")]
    SparseVector,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum MetricType {
    #[serde(rename = "L2")]
    L2,
    #[serde(rename = "IP")]
    IP,
    #[serde(rename = "COSINE")]
    COSINE,
    #[serde(rename = "Hamming")]
    HAMMING,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum IndexType {
    // Vector index types
    #[serde(rename = "FLAT")]
    FLAT,
    #[serde(rename = "HNSW")]
    HNSW,
    #[serde(rename = "IVF_FLAT")]
    IVF_FLAT,
    #[serde(rename = "IVF_PQ")]
    IVF_PQ,
    #[serde(rename = "IVF_SQ4")]
    IVF_SQ4,
    #[serde(rename = "IVF_SQ8")]
    IVF_SQ8,
    #[serde(rename = "IVF_SQ16")]
    IVF_SQ16,
    #[serde(rename = "BIN_FLAT")]
    BIN_FLAT,
    #[serde(rename = "BIN_HNSW")]
    BIN_HNSW,
    
    // Scalar index types
    #[serde(rename = "primaryKey")]
    PRIMARY_KEY,
    #[serde(rename = "filter")]
    FILTER,
    #[serde(rename = "inverted")]
    SPARSE_INVERTED,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum ReadConsistency {
    #[serde(rename = "strongConsistency")]
    StrongConsistency,
    #[serde(rename = "eventualConsistency")]
    EventualConsistency,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum EmbeddingModel {
    #[serde(rename = "bge-base-zh")]
    BgeBaseZh,
    #[serde(rename = "m3e-base")]
    M3eBase,
    #[serde(rename = "text2vec-large-chinese")]
    Text2VecLargeChinese,
    #[serde(rename = "e5-large-v2")]
    E5LargeV2,
    #[serde(rename = "multilingual-e5-base")]
    MultilingualE5Base,
}

impl EmbeddingModel {
    pub fn dimensions(&self) -> usize {
        match self {
            EmbeddingModel::BgeBaseZh => 768,
            EmbeddingModel::M3eBase => 768,
            EmbeddingModel::Text2VecLargeChinese => 1024,
            EmbeddingModel::E5LargeV2 => 1024,
            EmbeddingModel::MultilingualE5Base => 768,
        }
    }
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Embedding {
    #[serde(rename = "vectorField")]
    pub vector_field: String,
    #[serde(rename = "field")]
    pub field: String,
    #[serde(rename = "model", skip_serializing_if = "Option::is_none")]
    pub model: Option<EmbeddingModel>,
    #[serde(rename = "modelName", skip_serializing_if = "Option::is_none")]
    pub model_name: Option<String>,
}

impl Embedding {
    pub fn new(vector_field: impl Into<String>, field: impl Into<String>) -> Self {
        Self {
            vector_field: vector_field.into(),
            field: field.into(),
            model: None,
            model_name: None,
        }
    }

    pub fn with_model(mut self, model: EmbeddingModel) -> Self {
        self.model = Some(model);
        self
    }

    pub fn with_model_name(mut self, model_name: impl Into<String>) -> Self {
        self.model_name = Some(model_name.into());
        self
    }
}