1use std::collections::HashMap;
4
5use chrono::{DateTime, Utc};
6use serde::{Deserialize, Serialize};
7
8pub mod hybrid_search;
10pub use hybrid_search::*;
11
12pub mod graph;
14pub use graph::*;
15
16pub mod file_upload;
18pub use file_upload::*;
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
25#[serde(rename_all = "snake_case")]
26pub enum ReadPreference {
27 Master,
29 #[default]
31 Replica,
32 Nearest,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct HostConfig {
39 pub master: String,
41 pub replicas: Vec<String>,
43}
44
45#[derive(Debug, Clone, Default)]
47pub struct ReadOptions {
48 pub read_preference: Option<ReadPreference>,
50}
51
52#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
54#[serde(rename_all = "snake_case")]
55pub enum SimilarityMetric {
56 #[default]
58 Cosine,
59 Euclidean,
61 DotProduct,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
67pub struct Vector {
68 pub id: String,
70 pub data: Vec<f32>,
72 pub metadata: Option<HashMap<String, serde_json::Value>>,
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub public_key: Option<String>,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct Collection {
82 pub name: String,
84 pub dimension: usize,
86 #[serde(alias = "similarity_metric")]
88 pub metric: Option<String>,
89 #[serde(default)]
91 pub description: Option<String>,
92 #[serde(default)]
94 pub created_at: Option<String>,
95 #[serde(default)]
97 pub updated_at: Option<String>,
98 #[serde(default)]
100 pub vector_count: usize,
101 #[serde(default)]
103 pub document_count: usize,
104 #[serde(default)]
106 pub embedding_provider: Option<String>,
107 #[serde(default)]
109 pub indexing_status: Option<serde_json::Value>,
110 #[serde(default)]
112 pub normalization: Option<serde_json::Value>,
113 #[serde(default)]
115 pub quantization: Option<serde_json::Value>,
116 #[serde(default)]
118 pub size: Option<serde_json::Value>,
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize)]
130pub struct CollectionInfo {
131 pub name: String,
133 pub dimension: usize,
135 #[serde(default, alias = "similarity_metric")]
140 pub metric: String,
141 #[serde(default)]
143 pub vector_count: usize,
144 #[serde(default)]
146 pub document_count: usize,
147 #[serde(default)]
149 pub created_at: String,
150 #[serde(default)]
152 pub updated_at: String,
153 #[serde(default)]
155 pub indexing_status: Option<IndexingStatus>,
156 #[serde(default)]
159 pub size: Option<serde_json::Value>,
160 #[serde(default)]
162 pub quantization: Option<serde_json::Value>,
163 #[serde(default)]
165 pub normalization: Option<serde_json::Value>,
166 #[serde(default)]
168 pub status: Option<String>,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize)]
173pub struct IndexingStatus {
174 pub status: String,
176 pub progress: f32,
178 pub total_documents: usize,
180 pub processed_documents: usize,
182 pub vector_count: usize,
184 pub estimated_time_remaining: Option<String>,
186 pub last_updated: String,
188}
189
190#[derive(Debug, Clone, Serialize, Deserialize)]
192pub struct SearchResult {
193 pub id: String,
195 pub score: f32,
197 pub content: Option<String>,
199 pub metadata: Option<HashMap<String, serde_json::Value>>,
201}
202
203#[derive(Debug, Clone, Serialize, Deserialize)]
205pub struct SearchResponse {
206 pub results: Vec<SearchResult>,
208 pub query_time_ms: f64,
210}
211
212#[derive(Debug, Clone, Serialize, Deserialize)]
214pub struct EmbeddingRequest {
215 pub text: String,
217 pub model: Option<String>,
219 pub parameters: Option<EmbeddingParameters>,
221}
222
223#[derive(Debug, Clone, Serialize, Deserialize)]
225pub struct EmbeddingParameters {
226 pub max_length: Option<usize>,
228 pub normalize: Option<bool>,
230 pub prefix: Option<String>,
232}
233
234#[derive(Debug, Clone, Serialize, Deserialize)]
236pub struct EmbeddingResponse {
237 pub embedding: Vec<f32>,
239 pub model: String,
241 pub text: String,
243 pub dimension: usize,
245 pub provider: String,
247}
248
249#[derive(Debug, Clone, Serialize, Deserialize)]
251pub struct HealthStatus {
252 pub status: String,
254 pub version: String,
256 pub timestamp: String,
258 pub uptime: Option<u64>,
260 pub collections: Option<usize>,
262 pub total_vectors: Option<usize>,
264}
265
266#[derive(Debug, Clone, Serialize, Deserialize)]
268pub struct CollectionsResponse {
269 pub collections: Vec<Collection>,
271}
272
273#[derive(Debug, Clone, Serialize, Deserialize)]
275pub struct CreateCollectionResponse {
276 pub message: String,
278 pub collection: String,
280}
281
282#[derive(Debug, Clone, Serialize, Deserialize)]
284pub struct DatabaseStats {
285 pub total_collections: usize,
287 pub total_vectors: usize,
289 pub total_memory_estimate_bytes: usize,
291 pub collections: Vec<CollectionStats>,
293}
294
295#[derive(Debug, Clone, Serialize, Deserialize)]
297pub struct CollectionStats {
298 pub name: String,
300 pub vector_count: usize,
302 pub dimension: usize,
304 pub memory_estimate_bytes: usize,
306}
307
308#[derive(Debug, Clone, Serialize, Deserialize)]
310pub struct BatchTextRequest {
311 pub id: String,
313 pub text: String,
315 pub metadata: Option<HashMap<String, String>>,
317}
318
319#[derive(Debug, Clone, Serialize, Deserialize)]
321pub struct BatchConfig {
322 pub max_batch_size: Option<usize>,
324 pub parallel_workers: Option<usize>,
326 pub atomic: Option<bool>,
328}
329
330#[derive(Debug, Clone, Serialize, Deserialize)]
332pub struct BatchInsertRequest {
333 pub texts: Vec<BatchTextRequest>,
335 pub config: Option<BatchConfig>,
337}
338
339#[derive(Debug, Clone, Serialize, Deserialize)]
341pub struct BatchResponse {
342 pub success: bool,
344 pub collection: String,
346 pub operation: String,
348 pub total_operations: usize,
350 pub successful_operations: usize,
352 pub failed_operations: usize,
354 pub duration_ms: u64,
356 pub errors: Vec<String>,
358}
359
360#[derive(Debug, Clone, Serialize, Deserialize)]
362pub struct BatchSearchQuery {
363 pub query: String,
365 pub limit: Option<usize>,
367 pub score_threshold: Option<f32>,
369}
370
371#[derive(Debug, Clone, Serialize, Deserialize)]
373pub struct BatchSearchRequest {
374 pub queries: Vec<BatchSearchQuery>,
376 pub config: Option<BatchConfig>,
378}
379
380#[derive(Debug, Clone, Serialize, Deserialize)]
382pub struct BatchSearchResponse {
383 pub success: bool,
385 pub collection: String,
387 pub total_queries: usize,
389 pub successful_queries: usize,
391 pub failed_queries: usize,
393 pub duration_ms: u64,
395 pub results: Vec<Vec<SearchResult>>,
397 pub errors: Vec<String>,
399}
400
401#[derive(Debug, Clone, Serialize, Deserialize)]
403pub struct BatchVectorUpdate {
404 pub id: String,
406 pub data: Option<Vec<f32>>,
408 pub metadata: Option<HashMap<String, serde_json::Value>>,
410}
411
412#[derive(Debug, Clone, Serialize, Deserialize)]
414pub struct BatchUpdateRequest {
415 pub updates: Vec<BatchVectorUpdate>,
417 pub config: Option<BatchConfig>,
419}
420
421#[derive(Debug, Clone, Serialize, Deserialize)]
423pub struct BatchDeleteRequest {
424 pub vector_ids: Vec<String>,
426 pub config: Option<BatchConfig>,
428}
429
430#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
432#[serde(rename_all = "snake_case")]
433pub enum SummarizationMethod {
434 #[default]
436 Extractive,
437 Keyword,
439 Sentence,
441 Abstractive,
443}
444
445#[derive(Debug, Clone, Serialize, Deserialize)]
447pub struct SummarizeTextRequest {
448 pub text: String,
450 pub method: Option<SummarizationMethod>,
452 pub max_length: Option<usize>,
454 pub compression_ratio: Option<f32>,
456 pub language: Option<String>,
458}
459
460#[derive(Debug, Clone, Serialize, Deserialize)]
462pub struct SummarizeTextResponse {
463 pub summary_id: String,
465 pub original_text: String,
467 pub summary: String,
469 pub method: String,
471 pub original_length: usize,
473 pub summary_length: usize,
475 pub compression_ratio: f32,
477 pub language: String,
479 pub status: String,
481 pub message: String,
483 pub metadata: HashMap<String, String>,
485}
486
487#[derive(Debug, Clone, Serialize, Deserialize)]
489pub struct SummarizeContextRequest {
490 pub context: String,
492 pub method: Option<SummarizationMethod>,
494 pub max_length: Option<usize>,
496 pub compression_ratio: Option<f32>,
498 pub language: Option<String>,
500}
501
502#[derive(Debug, Clone, Serialize, Deserialize)]
504pub struct SummarizeContextResponse {
505 pub summary_id: String,
507 pub original_context: String,
509 pub summary: String,
511 pub method: String,
513 pub original_length: usize,
515 pub summary_length: usize,
517 pub compression_ratio: f32,
519 pub language: String,
521 pub status: String,
523 pub message: String,
525 pub metadata: HashMap<String, String>,
527}
528
529#[derive(Debug, Clone, Serialize, Deserialize)]
531pub struct GetSummaryResponse {
532 pub summary_id: String,
534 pub original_text: String,
536 pub summary: String,
538 pub method: String,
540 pub original_length: usize,
542 pub summary_length: usize,
544 pub compression_ratio: f32,
546 pub language: String,
548 pub created_at: String,
550 pub metadata: HashMap<String, String>,
552 pub status: String,
554}
555
556#[derive(Debug, Clone, Serialize, Deserialize)]
558pub struct SummaryInfo {
559 pub summary_id: String,
561 pub method: String,
563 pub language: String,
565 pub original_length: usize,
567 pub summary_length: usize,
569 pub compression_ratio: f32,
571 pub created_at: String,
573 pub metadata: HashMap<String, String>,
575}
576
577#[derive(Debug, Clone, Serialize, Deserialize)]
579pub struct ListSummariesResponse {
580 pub summaries: Vec<SummaryInfo>,
582 pub total_count: usize,
584 pub status: String,
586}
587
588#[derive(Debug, Clone, Serialize, Deserialize)]
590pub struct IndexingProgress {
591 pub is_indexing: bool,
593 pub overall_status: String,
595 pub collections: Vec<CollectionProgress>,
597}
598
599#[derive(Debug, Clone, Serialize, Deserialize)]
601pub struct CollectionProgress {
602 pub collection_name: String,
604 pub status: String,
606 pub progress: f32,
608 pub vector_count: usize,
610 pub error_message: Option<String>,
612 pub last_updated: String,
614}
615
616#[derive(Debug, Clone, Serialize, Deserialize)]
620pub struct IntelligentSearchRequest {
621 pub query: String,
623 pub collections: Option<Vec<String>>,
625 pub max_results: Option<usize>,
627 pub domain_expansion: Option<bool>,
629 pub technical_focus: Option<bool>,
631 pub mmr_enabled: Option<bool>,
633 pub mmr_lambda: Option<f32>,
635}
636
637#[derive(Debug, Clone, Serialize, Deserialize)]
639pub struct SemanticSearchRequest {
640 pub query: String,
642 pub collection: String,
644 pub max_results: Option<usize>,
646 pub semantic_reranking: Option<bool>,
648 pub cross_encoder_reranking: Option<bool>,
650 pub similarity_threshold: Option<f32>,
652}
653
654#[derive(Debug, Clone, Serialize, Deserialize)]
656pub struct ContextualSearchRequest {
657 pub query: String,
659 pub collection: String,
661 pub context_filters: Option<HashMap<String, serde_json::Value>>,
663 pub max_results: Option<usize>,
665 pub context_reranking: Option<bool>,
667 pub context_weight: Option<f32>,
669}
670
671#[derive(Debug, Clone, Serialize, Deserialize)]
673pub struct MultiCollectionSearchRequest {
674 pub query: String,
676 pub collections: Vec<String>,
678 pub max_per_collection: Option<usize>,
680 pub max_total_results: Option<usize>,
682 pub cross_collection_reranking: Option<bool>,
684}
685
686#[derive(Debug, Clone, Serialize, Deserialize)]
688pub struct IntelligentSearchResult {
689 pub id: String,
691 pub score: f32,
693 pub content: String,
695 pub metadata: Option<HashMap<String, serde_json::Value>>,
697 pub collection: Option<String>,
699 pub query_used: Option<String>,
701}
702
703#[derive(Debug, Clone, Serialize, Deserialize)]
705pub struct IntelligentSearchResponse {
706 pub results: Vec<IntelligentSearchResult>,
708 pub total_results: usize,
710 pub duration_ms: u64,
712 pub queries_generated: Option<Vec<String>>,
714 pub collections_searched: Option<Vec<String>>,
716 pub metadata: Option<HashMap<String, serde_json::Value>>,
718}
719
720#[derive(Debug, Clone, Serialize, Deserialize)]
722pub struct SemanticSearchResponse {
723 pub results: Vec<IntelligentSearchResult>,
725 pub total_results: usize,
727 pub duration_ms: u64,
729 pub collection: String,
731 pub metadata: Option<HashMap<String, serde_json::Value>>,
733}
734
735#[derive(Debug, Clone, Serialize, Deserialize)]
737pub struct ContextualSearchResponse {
738 pub results: Vec<IntelligentSearchResult>,
740 pub total_results: usize,
742 pub duration_ms: u64,
744 pub collection: String,
746 pub context_filters: Option<HashMap<String, serde_json::Value>>,
748 pub metadata: Option<HashMap<String, serde_json::Value>>,
750}
751
752#[derive(Debug, Clone, Serialize, Deserialize)]
754pub struct MultiCollectionSearchResponse {
755 pub results: Vec<IntelligentSearchResult>,
757 pub total_results: usize,
759 pub duration_ms: u64,
761 pub collections_searched: Vec<String>,
763 pub results_per_collection: Option<HashMap<String, usize>>,
765 pub metadata: Option<HashMap<String, serde_json::Value>>,
767}
768
769#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
773#[serde(rename_all = "PascalCase")]
774pub enum ReplicaStatus {
775 Connected,
777 Syncing,
779 Lagging,
781 Disconnected,
783}
784
785#[derive(Debug, Clone, Serialize, Deserialize)]
787pub struct ReplicaInfo {
788 pub replica_id: String,
790 pub host: String,
792 pub port: u16,
794 pub status: String,
796 pub last_heartbeat: DateTime<Utc>,
798 pub operations_synced: u64,
800
801 #[serde(skip_serializing_if = "Option::is_none")]
804 pub offset: Option<u64>,
805 #[serde(skip_serializing_if = "Option::is_none")]
807 pub lag: Option<u64>,
808}
809
810#[derive(Debug, Clone, Serialize, Deserialize)]
812pub struct ReplicationStats {
813 #[serde(skip_serializing_if = "Option::is_none")]
816 pub role: Option<String>,
817 #[serde(skip_serializing_if = "Option::is_none")]
819 pub bytes_sent: Option<u64>,
820 #[serde(skip_serializing_if = "Option::is_none")]
822 pub bytes_received: Option<u64>,
823 #[serde(skip_serializing_if = "Option::is_none")]
825 pub last_sync: Option<DateTime<Utc>>,
826 #[serde(skip_serializing_if = "Option::is_none")]
828 pub operations_pending: Option<usize>,
829 #[serde(skip_serializing_if = "Option::is_none")]
831 pub snapshot_size: Option<usize>,
832 #[serde(skip_serializing_if = "Option::is_none")]
834 pub connected_replicas: Option<usize>,
835
836 pub master_offset: u64,
839 pub replica_offset: u64,
841 pub lag_operations: u64,
843 pub total_replicated: u64,
845}
846
847#[derive(Debug, Clone, Serialize, Deserialize)]
849pub struct ReplicationStatusResponse {
850 pub status: String,
852 pub stats: ReplicationStats,
854 #[serde(skip_serializing_if = "Option::is_none")]
856 pub message: Option<String>,
857}
858
859#[derive(Debug, Clone, Serialize, Deserialize)]
861pub struct ReplicaListResponse {
862 pub replicas: Vec<ReplicaInfo>,
864 pub count: usize,
866 pub message: String,
868}