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)]
183pub struct IndexingStatus {
184 #[serde(default)]
186 pub status: String,
187 #[serde(default)]
189 pub progress: f32,
190 #[serde(default)]
192 pub total_documents: usize,
193 #[serde(default)]
195 pub processed_documents: usize,
196 #[serde(default)]
198 pub vector_count: usize,
199 #[serde(default)]
201 pub estimated_time_remaining: Option<String>,
202 #[serde(default)]
204 pub last_updated: String,
205}
206
207#[derive(Debug, Clone, Serialize, Deserialize)]
209pub struct SearchResult {
210 pub id: String,
212 pub score: f32,
214 pub content: Option<String>,
216 pub metadata: Option<HashMap<String, serde_json::Value>>,
218}
219
220#[derive(Debug, Clone, Serialize, Deserialize)]
227pub struct SearchResponse {
228 #[serde(default)]
230 pub results: Vec<SearchResult>,
231 #[serde(default)]
234 pub query_time_ms: f64,
235 #[serde(default)]
237 pub query: Option<String>,
238 #[serde(default)]
240 pub limit: Option<usize>,
241 #[serde(default)]
243 pub collection: Option<String>,
244}
245
246#[derive(Debug, Clone, Serialize, Deserialize)]
248pub struct EmbeddingRequest {
249 pub text: String,
251 pub model: Option<String>,
253 pub parameters: Option<EmbeddingParameters>,
255}
256
257#[derive(Debug, Clone, Serialize, Deserialize)]
259pub struct EmbeddingParameters {
260 pub max_length: Option<usize>,
262 pub normalize: Option<bool>,
264 pub prefix: Option<String>,
266}
267
268#[derive(Debug, Clone, Serialize, Deserialize)]
270pub struct EmbeddingResponse {
271 pub embedding: Vec<f32>,
273 pub model: String,
275 pub text: String,
277 pub dimension: usize,
279 pub provider: String,
281}
282
283#[derive(Debug, Clone, Serialize, Deserialize)]
285pub struct HealthStatus {
286 pub status: String,
288 pub version: String,
290 pub timestamp: String,
292 pub uptime: Option<u64>,
294 pub collections: Option<usize>,
296 pub total_vectors: Option<usize>,
298}
299
300#[derive(Debug, Clone, Serialize, Deserialize)]
302pub struct CollectionsResponse {
303 pub collections: Vec<Collection>,
305}
306
307#[derive(Debug, Clone, Serialize, Deserialize)]
309pub struct CreateCollectionResponse {
310 pub message: String,
312 pub collection: String,
314}
315
316#[derive(Debug, Clone, Serialize, Deserialize)]
318pub struct DatabaseStats {
319 pub total_collections: usize,
321 pub total_vectors: usize,
323 pub total_memory_estimate_bytes: usize,
325 pub collections: Vec<CollectionStats>,
327}
328
329#[derive(Debug, Clone, Serialize, Deserialize)]
331pub struct CollectionStats {
332 pub name: String,
334 pub vector_count: usize,
336 pub dimension: usize,
338 pub memory_estimate_bytes: usize,
340}
341
342#[derive(Debug, Clone, Serialize, Deserialize)]
344pub struct BatchTextRequest {
345 pub id: String,
347 pub text: String,
349 pub metadata: Option<HashMap<String, String>>,
351}
352
353#[derive(Debug, Clone, Serialize, Deserialize)]
355pub struct BatchConfig {
356 pub max_batch_size: Option<usize>,
358 pub parallel_workers: Option<usize>,
360 pub atomic: Option<bool>,
362}
363
364#[derive(Debug, Clone, Serialize, Deserialize)]
366pub struct BatchInsertRequest {
367 pub texts: Vec<BatchTextRequest>,
369 pub config: Option<BatchConfig>,
371}
372
373#[derive(Debug, Clone, Serialize, Deserialize)]
382pub struct BatchResponse {
383 #[serde(default)]
387 pub success: bool,
388 #[serde(default)]
390 pub collection: String,
391 #[serde(default)]
393 pub operation: String,
394 #[serde(default, alias = "count")]
397 pub total_operations: usize,
398 #[serde(default, alias = "inserted")]
401 pub successful_operations: usize,
402 #[serde(default, alias = "failed")]
404 pub failed_operations: usize,
405 #[serde(default)]
407 pub duration_ms: u64,
408 #[serde(default)]
410 pub errors: Vec<String>,
411 #[serde(default)]
416 pub results: Vec<BatchResultEntry>,
417}
418
419#[derive(Debug, Clone, Serialize, Deserialize)]
424pub struct BatchResultEntry {
425 #[serde(default)]
427 pub client_id: String,
428 #[serde(default)]
430 pub index: usize,
431 #[serde(default)]
433 pub status: String,
434 #[serde(default)]
437 pub chunked: bool,
438 #[serde(default)]
440 pub vector_ids: Vec<String>,
441 #[serde(default)]
443 pub vectors_created: usize,
444 #[serde(default)]
446 pub error: Option<String>,
447}
448
449#[derive(Debug, Clone, Serialize, Deserialize)]
451pub struct BatchSearchQuery {
452 pub query: String,
454 pub limit: Option<usize>,
456 pub score_threshold: Option<f32>,
458}
459
460#[derive(Debug, Clone, Serialize, Deserialize)]
462pub struct BatchSearchRequest {
463 pub queries: Vec<BatchSearchQuery>,
465 pub config: Option<BatchConfig>,
467}
468
469#[derive(Debug, Clone, Serialize, Deserialize)]
471pub struct BatchSearchResponse {
472 pub success: bool,
474 pub collection: String,
476 pub total_queries: usize,
478 pub successful_queries: usize,
480 pub failed_queries: usize,
482 pub duration_ms: u64,
484 pub results: Vec<Vec<SearchResult>>,
486 pub errors: Vec<String>,
488}
489
490#[derive(Debug, Clone, Serialize, Deserialize)]
492pub struct BatchVectorUpdate {
493 pub id: String,
495 pub data: Option<Vec<f32>>,
497 pub metadata: Option<HashMap<String, serde_json::Value>>,
499}
500
501#[derive(Debug, Clone, Serialize, Deserialize)]
503pub struct BatchUpdateRequest {
504 pub updates: Vec<BatchVectorUpdate>,
506 pub config: Option<BatchConfig>,
508}
509
510#[derive(Debug, Clone, Serialize, Deserialize)]
512pub struct BatchDeleteRequest {
513 pub vector_ids: Vec<String>,
515 pub config: Option<BatchConfig>,
517}
518
519#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
521#[serde(rename_all = "snake_case")]
522pub enum SummarizationMethod {
523 #[default]
525 Extractive,
526 Keyword,
528 Sentence,
530 Abstractive,
532}
533
534#[derive(Debug, Clone, Serialize, Deserialize)]
536pub struct SummarizeTextRequest {
537 pub text: String,
539 pub method: Option<SummarizationMethod>,
541 pub max_length: Option<usize>,
543 pub compression_ratio: Option<f32>,
545 pub language: Option<String>,
547}
548
549#[derive(Debug, Clone, Serialize, Deserialize)]
551pub struct SummarizeTextResponse {
552 pub summary_id: String,
554 pub original_text: String,
556 pub summary: String,
558 pub method: String,
560 pub original_length: usize,
562 pub summary_length: usize,
564 pub compression_ratio: f32,
566 pub language: String,
568 pub status: String,
570 pub message: String,
572 pub metadata: HashMap<String, String>,
574}
575
576#[derive(Debug, Clone, Serialize, Deserialize)]
578pub struct SummarizeContextRequest {
579 pub context: String,
581 pub method: Option<SummarizationMethod>,
583 pub max_length: Option<usize>,
585 pub compression_ratio: Option<f32>,
587 pub language: Option<String>,
589}
590
591#[derive(Debug, Clone, Serialize, Deserialize)]
593pub struct SummarizeContextResponse {
594 pub summary_id: String,
596 pub original_context: String,
598 pub summary: String,
600 pub method: String,
602 pub original_length: usize,
604 pub summary_length: usize,
606 pub compression_ratio: f32,
608 pub language: String,
610 pub status: String,
612 pub message: String,
614 pub metadata: HashMap<String, String>,
616}
617
618#[derive(Debug, Clone, Serialize, Deserialize)]
620pub struct GetSummaryResponse {
621 pub summary_id: String,
623 pub original_text: String,
625 pub summary: String,
627 pub method: String,
629 pub original_length: usize,
631 pub summary_length: usize,
633 pub compression_ratio: f32,
635 pub language: String,
637 pub created_at: String,
639 pub metadata: HashMap<String, String>,
641 pub status: String,
643}
644
645#[derive(Debug, Clone, Serialize, Deserialize)]
647pub struct SummaryInfo {
648 pub summary_id: String,
650 pub method: String,
652 pub language: String,
654 pub original_length: usize,
656 pub summary_length: usize,
658 pub compression_ratio: f32,
660 pub created_at: String,
662 pub metadata: HashMap<String, String>,
664}
665
666#[derive(Debug, Clone, Serialize, Deserialize)]
668pub struct ListSummariesResponse {
669 pub summaries: Vec<SummaryInfo>,
671 pub total_count: usize,
673 pub status: String,
675}
676
677#[derive(Debug, Clone, Serialize, Deserialize)]
679pub struct IndexingProgress {
680 pub is_indexing: bool,
682 pub overall_status: String,
684 pub collections: Vec<CollectionProgress>,
686}
687
688#[derive(Debug, Clone, Serialize, Deserialize)]
690pub struct CollectionProgress {
691 pub collection_name: String,
693 pub status: String,
695 pub progress: f32,
697 pub vector_count: usize,
699 pub error_message: Option<String>,
701 pub last_updated: String,
703}
704
705#[derive(Debug, Clone, Serialize, Deserialize)]
709pub struct IntelligentSearchRequest {
710 pub query: String,
712 pub collections: Option<Vec<String>>,
714 pub max_results: Option<usize>,
716 pub domain_expansion: Option<bool>,
718 pub technical_focus: Option<bool>,
720 pub mmr_enabled: Option<bool>,
722 pub mmr_lambda: Option<f32>,
724}
725
726#[derive(Debug, Clone, Serialize, Deserialize)]
728pub struct SemanticSearchRequest {
729 pub query: String,
731 pub collection: String,
733 pub max_results: Option<usize>,
735 pub semantic_reranking: Option<bool>,
737 pub cross_encoder_reranking: Option<bool>,
739 pub similarity_threshold: Option<f32>,
741}
742
743#[derive(Debug, Clone, Serialize, Deserialize)]
745pub struct ContextualSearchRequest {
746 pub query: String,
748 pub collection: String,
750 pub context_filters: Option<HashMap<String, serde_json::Value>>,
752 pub max_results: Option<usize>,
754 pub context_reranking: Option<bool>,
756 pub context_weight: Option<f32>,
758}
759
760#[derive(Debug, Clone, Serialize, Deserialize)]
762pub struct MultiCollectionSearchRequest {
763 pub query: String,
765 pub collections: Vec<String>,
767 pub max_per_collection: Option<usize>,
769 pub max_total_results: Option<usize>,
771 pub cross_collection_reranking: Option<bool>,
773}
774
775#[derive(Debug, Clone, Serialize, Deserialize)]
777pub struct IntelligentSearchResult {
778 pub id: String,
780 pub score: f32,
782 pub content: String,
784 pub metadata: Option<HashMap<String, serde_json::Value>>,
786 pub collection: Option<String>,
788 pub query_used: Option<String>,
790}
791
792#[derive(Debug, Clone, Serialize, Deserialize)]
794pub struct IntelligentSearchResponse {
795 pub results: Vec<IntelligentSearchResult>,
797 pub total_results: usize,
799 pub duration_ms: u64,
801 pub queries_generated: Option<Vec<String>>,
803 pub collections_searched: Option<Vec<String>>,
805 pub metadata: Option<HashMap<String, serde_json::Value>>,
807}
808
809#[derive(Debug, Clone, Serialize, Deserialize)]
811pub struct SemanticSearchResponse {
812 pub results: Vec<IntelligentSearchResult>,
814 pub total_results: usize,
816 pub duration_ms: u64,
818 pub collection: String,
820 pub metadata: Option<HashMap<String, serde_json::Value>>,
822}
823
824#[derive(Debug, Clone, Serialize, Deserialize)]
826pub struct ContextualSearchResponse {
827 pub results: Vec<IntelligentSearchResult>,
829 pub total_results: usize,
831 pub duration_ms: u64,
833 pub collection: String,
835 pub context_filters: Option<HashMap<String, serde_json::Value>>,
837 pub metadata: Option<HashMap<String, serde_json::Value>>,
839}
840
841#[derive(Debug, Clone, Serialize, Deserialize)]
843pub struct MultiCollectionSearchResponse {
844 pub results: Vec<IntelligentSearchResult>,
846 pub total_results: usize,
848 pub duration_ms: u64,
850 pub collections_searched: Vec<String>,
852 pub results_per_collection: Option<HashMap<String, usize>>,
854 pub metadata: Option<HashMap<String, serde_json::Value>>,
856}
857
858#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
862#[serde(rename_all = "PascalCase")]
863pub enum ReplicaStatus {
864 Connected,
866 Syncing,
868 Lagging,
870 Disconnected,
872}
873
874#[derive(Debug, Clone, Serialize, Deserialize)]
876pub struct ReplicaInfo {
877 pub replica_id: String,
879 pub host: String,
881 pub port: u16,
883 pub status: String,
885 pub last_heartbeat: DateTime<Utc>,
887 pub operations_synced: u64,
889
890 #[serde(skip_serializing_if = "Option::is_none")]
893 pub offset: Option<u64>,
894 #[serde(skip_serializing_if = "Option::is_none")]
896 pub lag: Option<u64>,
897}
898
899#[derive(Debug, Clone, Serialize, Deserialize)]
901pub struct ReplicationStats {
902 #[serde(skip_serializing_if = "Option::is_none")]
905 pub role: Option<String>,
906 #[serde(skip_serializing_if = "Option::is_none")]
908 pub bytes_sent: Option<u64>,
909 #[serde(skip_serializing_if = "Option::is_none")]
911 pub bytes_received: Option<u64>,
912 #[serde(skip_serializing_if = "Option::is_none")]
914 pub last_sync: Option<DateTime<Utc>>,
915 #[serde(skip_serializing_if = "Option::is_none")]
917 pub operations_pending: Option<usize>,
918 #[serde(skip_serializing_if = "Option::is_none")]
920 pub snapshot_size: Option<usize>,
921 #[serde(skip_serializing_if = "Option::is_none")]
923 pub connected_replicas: Option<usize>,
924
925 pub master_offset: u64,
928 pub replica_offset: u64,
930 pub lag_operations: u64,
932 pub total_replicated: u64,
934}
935
936#[derive(Debug, Clone, Serialize, Deserialize)]
938pub struct ReplicationStatusResponse {
939 pub status: String,
941 pub stats: ReplicationStats,
943 #[serde(skip_serializing_if = "Option::is_none")]
945 pub message: Option<String>,
946}
947
948#[derive(Debug, Clone, Serialize, Deserialize)]
950pub struct ReplicaListResponse {
951 pub replicas: Vec<ReplicaInfo>,
953 pub count: usize,
955 pub message: String,
957}