casper_client/
models.rs

1use serde::{Deserialize, Serialize};
2
3/// Vector insertion request
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct InsertRequest {
6    pub id: u32,
7    pub vector: Vec<f32>,
8}
9
10/// Vector insertion body (for JSON payload)
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct InsertVectorBody {
13    pub vector: Vec<f32>,
14}
15
16/// Vector deletion request
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct DeleteRequest {
19    pub id: u32,
20}
21
22/// Search request
23#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct SearchRequest {
25    pub vector: Vec<f32>,
26    pub limit: Option<usize>,
27}
28
29/// Search vector body (for JSON payload)
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct SearchVectorBody {
32    pub vector: Vec<f32>,
33}
34
35/// Search result item (tuple format: [id, score])
36#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct SearchResult {
38    pub id: u32,
39    pub score: f32,
40}
41
42/// Search response (array of [id, score] tuples)
43pub type SearchResponse = Vec<SearchResult>;
44
45/// Collection creation request
46#[derive(Debug, Clone, Serialize, Deserialize)]
47pub struct CreateCollectionRequest {
48    pub dim: usize,
49    pub max_size: u32,
50}
51
52/// Collection information
53#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct CollectionInfo {
55    pub name: String,
56    pub dimension: usize,
57    pub mutable: bool,
58    pub has_index: bool,
59    pub max_size: u32,
60    /// Current number of vectors in the collection
61    pub size: usize,
62    pub index: Option<IndexInfo>,
63}
64
65/// Index information
66#[derive(Debug, Clone, Serialize, Deserialize)]
67pub struct IndexInfo {
68    /// HNSW index configuration (if present)
69    pub hnsw: Option<HNSWIndexConfig>,
70    /// Whether normalization is applied for this index
71    pub normalization: bool,
72}
73
74/// Batch insert operation
75#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct BatchInsertOperation {
77    pub id: u32,
78    pub vector: Vec<f32>,
79}
80
81/// Batch update request
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct BatchUpdateRequest {
84    pub insert: Vec<BatchInsertOperation>,
85    pub delete: Vec<u32>,
86}
87
88/// Index creation request for HNSW
89#[derive(Debug, Clone, Serialize, Deserialize)]
90pub struct CreateHNSWIndexRequest {
91    /// HNSW index configuration
92    pub hnsw: HNSWIndexConfig,
93    /// Whether to apply vector normalization
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub normalization: Option<bool>,
96}
97
98/// HNSW index configuration
99#[derive(Debug, Clone, Serialize, Deserialize)]
100pub struct HNSWIndexConfig {
101    /// Distance metric, e.g. "inner-product"
102    pub metric: String,
103    /// Quantization type, e.g. "f32" or "pq8"
104    pub quantization: String,
105    /// Number of bi-directional links created for every new element
106    pub m: usize,
107    /// Number of outgoing connections in the zero layer
108    pub m0: usize,
109    /// Controls index search speed/build speed tradeoff
110    pub ef_construction: usize,
111    /// Optional PQ name when using product quantization
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub pq_name: Option<String>,
114}
115
116/// Collections list response
117#[derive(Debug, Clone, Serialize, Deserialize)]
118pub struct CollectionsListResponse {
119    pub collections: Vec<CollectionInfo>,
120}
121
122/// Get vector response
123#[derive(Debug, Clone, Serialize, Deserialize)]
124pub struct GetVectorResponse {
125    pub id: u32,
126    pub vector: Vec<f32>,
127}
128
129/// Matrix information (from /matrix APIs)
130#[derive(Debug, Clone, Serialize, Deserialize)]
131pub struct MatrixInfo {
132    pub name: String,
133    pub dim: usize,
134    pub len: usize,
135    pub enabled: bool,
136}
137
138/// Result of gRPC matrix upload
139#[derive(Debug, Clone)]
140pub struct UploadMatrixResult {
141    pub success: bool,
142    pub message: String,
143    pub total_vectors: u32,
144    pub total_chunks: u32,
145}
146
147/// Create PQ request (for /pq/{name})
148#[derive(Debug, Clone, Serialize, Deserialize)]
149pub struct CreatePqRequest {
150    pub dim: usize,
151    pub codebooks: Vec<String>,
152}
153
154/// PQ info (for /pq APIs)
155#[derive(Debug, Clone, Serialize, Deserialize)]
156pub struct PqInfo {
157    pub name: String,
158    pub dim: usize,
159    pub codebooks: Vec<String>,
160    pub enabled: bool,
161}