1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
4pub enum FieldType {
5 #[serde(rename = "uint64")]
6 Uint64,
7 #[serde(rename = "string")]
8 String,
9 #[serde(rename = "array")]
10 Array,
11 #[serde(rename = "json")]
12 Json,
13 #[serde(rename = "vector")]
14 Vector,
15 #[serde(rename = "float16_vector")]
16 Float16Vector,
17 #[serde(rename = "bfloat16_vector")]
18 BFloat16Vector,
19 #[serde(rename = "binary_vector")]
20 BinaryVector,
21 #[serde(rename = "sparseVector")]
22 SparseVector,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
26pub enum MetricType {
27 #[serde(rename = "L2")]
28 L2,
29 #[serde(rename = "IP")]
30 IP,
31 #[serde(rename = "COSINE")]
32 COSINE,
33 #[serde(rename = "Hamming")]
34 HAMMING,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
38pub enum IndexType {
39 #[serde(rename = "FLAT")]
41 FLAT,
42 #[serde(rename = "HNSW")]
43 HNSW,
44 #[serde(rename = "IVF_FLAT")]
45 IVF_FLAT,
46 #[serde(rename = "IVF_PQ")]
47 IVF_PQ,
48 #[serde(rename = "IVF_SQ4")]
49 IVF_SQ4,
50 #[serde(rename = "IVF_SQ8")]
51 IVF_SQ8,
52 #[serde(rename = "IVF_SQ16")]
53 IVF_SQ16,
54 #[serde(rename = "BIN_FLAT")]
55 BIN_FLAT,
56 #[serde(rename = "BIN_HNSW")]
57 BIN_HNSW,
58
59 #[serde(rename = "primaryKey")]
61 PRIMARY_KEY,
62 #[serde(rename = "filter")]
63 FILTER,
64 #[serde(rename = "inverted")]
65 SPARSE_INVERTED,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
69pub enum ReadConsistency {
70 #[serde(rename = "strongConsistency")]
71 StrongConsistency,
72 #[serde(rename = "eventualConsistency")]
73 EventualConsistency,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
77pub enum EmbeddingModel {
78 #[serde(rename = "bge-base-zh")]
79 BgeBaseZh,
80 #[serde(rename = "m3e-base")]
81 M3eBase,
82 #[serde(rename = "text2vec-large-chinese")]
83 Text2VecLargeChinese,
84 #[serde(rename = "e5-large-v2")]
85 E5LargeV2,
86 #[serde(rename = "multilingual-e5-base")]
87 MultilingualE5Base,
88}
89
90impl EmbeddingModel {
91 pub fn dimensions(&self) -> usize {
92 match self {
93 EmbeddingModel::BgeBaseZh => 768,
94 EmbeddingModel::M3eBase => 768,
95 EmbeddingModel::Text2VecLargeChinese => 1024,
96 EmbeddingModel::E5LargeV2 => 1024,
97 EmbeddingModel::MultilingualE5Base => 768,
98 }
99 }
100}