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 {
#[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,
#[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
}
}