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}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
78pub struct Collection {
79 pub name: String,
81 pub dimension: usize,
83 #[serde(alias = "similarity_metric")]
85 pub metric: Option<String>,
86 #[serde(default)]
88 pub description: Option<String>,
89 #[serde(default)]
91 pub created_at: Option<String>,
92 #[serde(default)]
94 pub updated_at: Option<String>,
95 #[serde(default)]
97 pub vector_count: usize,
98 #[serde(default)]
100 pub document_count: usize,
101 #[serde(default)]
103 pub embedding_provider: Option<String>,
104 #[serde(default)]
106 pub indexing_status: Option<serde_json::Value>,
107 #[serde(default)]
109 pub normalization: Option<serde_json::Value>,
110 #[serde(default)]
112 pub quantization: Option<serde_json::Value>,
113 #[serde(default)]
115 pub size: Option<serde_json::Value>,
116}
117
118#[derive(Debug, Clone, Serialize, Deserialize)]
120pub struct CollectionInfo {
121 pub name: String,
123 pub dimension: usize,
125 pub metric: String,
127 #[serde(default)]
129 pub vector_count: usize,
130 #[serde(default)]
132 pub document_count: usize,
133 pub created_at: String,
135 pub updated_at: String,
137 #[serde(default)]
139 pub indexing_status: Option<IndexingStatus>,
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize)]
144pub struct IndexingStatus {
145 pub status: String,
147 pub progress: f32,
149 pub total_documents: usize,
151 pub processed_documents: usize,
153 pub vector_count: usize,
155 pub estimated_time_remaining: Option<String>,
157 pub last_updated: String,
159}
160
161#[derive(Debug, Clone, Serialize, Deserialize)]
163pub struct SearchResult {
164 pub id: String,
166 pub score: f32,
168 pub content: Option<String>,
170 pub metadata: Option<HashMap<String, serde_json::Value>>,
172}
173
174#[derive(Debug, Clone, Serialize, Deserialize)]
176pub struct SearchResponse {
177 pub results: Vec<SearchResult>,
179 pub query_time_ms: f64,
181}
182
183#[derive(Debug, Clone, Serialize, Deserialize)]
185pub struct EmbeddingRequest {
186 pub text: String,
188 pub model: Option<String>,
190 pub parameters: Option<EmbeddingParameters>,
192}
193
194#[derive(Debug, Clone, Serialize, Deserialize)]
196pub struct EmbeddingParameters {
197 pub max_length: Option<usize>,
199 pub normalize: Option<bool>,
201 pub prefix: Option<String>,
203}
204
205#[derive(Debug, Clone, Serialize, Deserialize)]
207pub struct EmbeddingResponse {
208 pub embedding: Vec<f32>,
210 pub model: String,
212 pub text: String,
214 pub dimension: usize,
216 pub provider: String,
218}
219
220#[derive(Debug, Clone, Serialize, Deserialize)]
222pub struct HealthStatus {
223 pub status: String,
225 pub version: String,
227 pub timestamp: String,
229 pub uptime: Option<u64>,
231 pub collections: Option<usize>,
233 pub total_vectors: Option<usize>,
235}
236
237#[derive(Debug, Clone, Serialize, Deserialize)]
239pub struct CollectionsResponse {
240 pub collections: Vec<Collection>,
242}
243
244#[derive(Debug, Clone, Serialize, Deserialize)]
246pub struct CreateCollectionResponse {
247 pub message: String,
249 pub collection: String,
251}
252
253#[derive(Debug, Clone, Serialize, Deserialize)]
255pub struct DatabaseStats {
256 pub total_collections: usize,
258 pub total_vectors: usize,
260 pub total_memory_estimate_bytes: usize,
262 pub collections: Vec<CollectionStats>,
264}
265
266#[derive(Debug, Clone, Serialize, Deserialize)]
268pub struct CollectionStats {
269 pub name: String,
271 pub vector_count: usize,
273 pub dimension: usize,
275 pub memory_estimate_bytes: usize,
277}
278
279#[derive(Debug, Clone, Serialize, Deserialize)]
281pub struct BatchTextRequest {
282 pub id: String,
284 pub text: String,
286 pub metadata: Option<HashMap<String, String>>,
288}
289
290#[derive(Debug, Clone, Serialize, Deserialize)]
292pub struct BatchConfig {
293 pub max_batch_size: Option<usize>,
295 pub parallel_workers: Option<usize>,
297 pub atomic: Option<bool>,
299}
300
301#[derive(Debug, Clone, Serialize, Deserialize)]
303pub struct BatchInsertRequest {
304 pub texts: Vec<BatchTextRequest>,
306 pub config: Option<BatchConfig>,
308}
309
310#[derive(Debug, Clone, Serialize, Deserialize)]
312pub struct BatchResponse {
313 pub success: bool,
315 pub collection: String,
317 pub operation: String,
319 pub total_operations: usize,
321 pub successful_operations: usize,
323 pub failed_operations: usize,
325 pub duration_ms: u64,
327 pub errors: Vec<String>,
329}
330
331#[derive(Debug, Clone, Serialize, Deserialize)]
333pub struct BatchSearchQuery {
334 pub query: String,
336 pub limit: Option<usize>,
338 pub score_threshold: Option<f32>,
340}
341
342#[derive(Debug, Clone, Serialize, Deserialize)]
344pub struct BatchSearchRequest {
345 pub queries: Vec<BatchSearchQuery>,
347 pub config: Option<BatchConfig>,
349}
350
351#[derive(Debug, Clone, Serialize, Deserialize)]
353pub struct BatchSearchResponse {
354 pub success: bool,
356 pub collection: String,
358 pub total_queries: usize,
360 pub successful_queries: usize,
362 pub failed_queries: usize,
364 pub duration_ms: u64,
366 pub results: Vec<Vec<SearchResult>>,
368 pub errors: Vec<String>,
370}
371
372#[derive(Debug, Clone, Serialize, Deserialize)]
374pub struct BatchVectorUpdate {
375 pub id: String,
377 pub data: Option<Vec<f32>>,
379 pub metadata: Option<HashMap<String, serde_json::Value>>,
381}
382
383#[derive(Debug, Clone, Serialize, Deserialize)]
385pub struct BatchUpdateRequest {
386 pub updates: Vec<BatchVectorUpdate>,
388 pub config: Option<BatchConfig>,
390}
391
392#[derive(Debug, Clone, Serialize, Deserialize)]
394pub struct BatchDeleteRequest {
395 pub vector_ids: Vec<String>,
397 pub config: Option<BatchConfig>,
399}
400
401#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
403#[serde(rename_all = "snake_case")]
404pub enum SummarizationMethod {
405 #[default]
407 Extractive,
408 Keyword,
410 Sentence,
412 Abstractive,
414}
415
416#[derive(Debug, Clone, Serialize, Deserialize)]
418pub struct SummarizeTextRequest {
419 pub text: String,
421 pub method: Option<SummarizationMethod>,
423 pub max_length: Option<usize>,
425 pub compression_ratio: Option<f32>,
427 pub language: Option<String>,
429}
430
431#[derive(Debug, Clone, Serialize, Deserialize)]
433pub struct SummarizeTextResponse {
434 pub summary_id: String,
436 pub original_text: String,
438 pub summary: String,
440 pub method: String,
442 pub original_length: usize,
444 pub summary_length: usize,
446 pub compression_ratio: f32,
448 pub language: String,
450 pub status: String,
452 pub message: String,
454 pub metadata: HashMap<String, String>,
456}
457
458#[derive(Debug, Clone, Serialize, Deserialize)]
460pub struct SummarizeContextRequest {
461 pub context: String,
463 pub method: Option<SummarizationMethod>,
465 pub max_length: Option<usize>,
467 pub compression_ratio: Option<f32>,
469 pub language: Option<String>,
471}
472
473#[derive(Debug, Clone, Serialize, Deserialize)]
475pub struct SummarizeContextResponse {
476 pub summary_id: String,
478 pub original_context: String,
480 pub summary: String,
482 pub method: String,
484 pub original_length: usize,
486 pub summary_length: usize,
488 pub compression_ratio: f32,
490 pub language: String,
492 pub status: String,
494 pub message: String,
496 pub metadata: HashMap<String, String>,
498}
499
500#[derive(Debug, Clone, Serialize, Deserialize)]
502pub struct GetSummaryResponse {
503 pub summary_id: String,
505 pub original_text: String,
507 pub summary: String,
509 pub method: String,
511 pub original_length: usize,
513 pub summary_length: usize,
515 pub compression_ratio: f32,
517 pub language: String,
519 pub created_at: String,
521 pub metadata: HashMap<String, String>,
523 pub status: String,
525}
526
527#[derive(Debug, Clone, Serialize, Deserialize)]
529pub struct SummaryInfo {
530 pub summary_id: String,
532 pub method: String,
534 pub language: String,
536 pub original_length: usize,
538 pub summary_length: usize,
540 pub compression_ratio: f32,
542 pub created_at: String,
544 pub metadata: HashMap<String, String>,
546}
547
548#[derive(Debug, Clone, Serialize, Deserialize)]
550pub struct ListSummariesResponse {
551 pub summaries: Vec<SummaryInfo>,
553 pub total_count: usize,
555 pub status: String,
557}
558
559#[derive(Debug, Clone, Serialize, Deserialize)]
561pub struct IndexingProgress {
562 pub is_indexing: bool,
564 pub overall_status: String,
566 pub collections: Vec<CollectionProgress>,
568}
569
570#[derive(Debug, Clone, Serialize, Deserialize)]
572pub struct CollectionProgress {
573 pub collection_name: String,
575 pub status: String,
577 pub progress: f32,
579 pub vector_count: usize,
581 pub error_message: Option<String>,
583 pub last_updated: String,
585}
586
587#[derive(Debug, Clone, Serialize, Deserialize)]
591pub struct IntelligentSearchRequest {
592 pub query: String,
594 pub collections: Option<Vec<String>>,
596 pub max_results: Option<usize>,
598 pub domain_expansion: Option<bool>,
600 pub technical_focus: Option<bool>,
602 pub mmr_enabled: Option<bool>,
604 pub mmr_lambda: Option<f32>,
606}
607
608#[derive(Debug, Clone, Serialize, Deserialize)]
610pub struct SemanticSearchRequest {
611 pub query: String,
613 pub collection: String,
615 pub max_results: Option<usize>,
617 pub semantic_reranking: Option<bool>,
619 pub cross_encoder_reranking: Option<bool>,
621 pub similarity_threshold: Option<f32>,
623}
624
625#[derive(Debug, Clone, Serialize, Deserialize)]
627pub struct ContextualSearchRequest {
628 pub query: String,
630 pub collection: String,
632 pub context_filters: Option<HashMap<String, serde_json::Value>>,
634 pub max_results: Option<usize>,
636 pub context_reranking: Option<bool>,
638 pub context_weight: Option<f32>,
640}
641
642#[derive(Debug, Clone, Serialize, Deserialize)]
644pub struct MultiCollectionSearchRequest {
645 pub query: String,
647 pub collections: Vec<String>,
649 pub max_per_collection: Option<usize>,
651 pub max_total_results: Option<usize>,
653 pub cross_collection_reranking: Option<bool>,
655}
656
657#[derive(Debug, Clone, Serialize, Deserialize)]
659pub struct IntelligentSearchResult {
660 pub id: String,
662 pub score: f32,
664 pub content: String,
666 pub metadata: Option<HashMap<String, serde_json::Value>>,
668 pub collection: Option<String>,
670 pub query_used: Option<String>,
672}
673
674#[derive(Debug, Clone, Serialize, Deserialize)]
676pub struct IntelligentSearchResponse {
677 pub results: Vec<IntelligentSearchResult>,
679 pub total_results: usize,
681 pub duration_ms: u64,
683 pub queries_generated: Option<Vec<String>>,
685 pub collections_searched: Option<Vec<String>>,
687 pub metadata: Option<HashMap<String, serde_json::Value>>,
689}
690
691#[derive(Debug, Clone, Serialize, Deserialize)]
693pub struct SemanticSearchResponse {
694 pub results: Vec<IntelligentSearchResult>,
696 pub total_results: usize,
698 pub duration_ms: u64,
700 pub collection: String,
702 pub metadata: Option<HashMap<String, serde_json::Value>>,
704}
705
706#[derive(Debug, Clone, Serialize, Deserialize)]
708pub struct ContextualSearchResponse {
709 pub results: Vec<IntelligentSearchResult>,
711 pub total_results: usize,
713 pub duration_ms: u64,
715 pub collection: String,
717 pub context_filters: Option<HashMap<String, serde_json::Value>>,
719 pub metadata: Option<HashMap<String, serde_json::Value>>,
721}
722
723#[derive(Debug, Clone, Serialize, Deserialize)]
725pub struct MultiCollectionSearchResponse {
726 pub results: Vec<IntelligentSearchResult>,
728 pub total_results: usize,
730 pub duration_ms: u64,
732 pub collections_searched: Vec<String>,
734 pub results_per_collection: Option<HashMap<String, usize>>,
736 pub metadata: Option<HashMap<String, serde_json::Value>>,
738}
739
740#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
744#[serde(rename_all = "PascalCase")]
745pub enum ReplicaStatus {
746 Connected,
748 Syncing,
750 Lagging,
752 Disconnected,
754}
755
756#[derive(Debug, Clone, Serialize, Deserialize)]
758pub struct ReplicaInfo {
759 pub replica_id: String,
761 pub host: String,
763 pub port: u16,
765 pub status: String,
767 pub last_heartbeat: DateTime<Utc>,
769 pub operations_synced: u64,
771
772 #[serde(skip_serializing_if = "Option::is_none")]
775 pub offset: Option<u64>,
776 #[serde(skip_serializing_if = "Option::is_none")]
778 pub lag: Option<u64>,
779}
780
781#[derive(Debug, Clone, Serialize, Deserialize)]
783pub struct ReplicationStats {
784 #[serde(skip_serializing_if = "Option::is_none")]
787 pub role: Option<String>,
788 #[serde(skip_serializing_if = "Option::is_none")]
790 pub bytes_sent: Option<u64>,
791 #[serde(skip_serializing_if = "Option::is_none")]
793 pub bytes_received: Option<u64>,
794 #[serde(skip_serializing_if = "Option::is_none")]
796 pub last_sync: Option<DateTime<Utc>>,
797 #[serde(skip_serializing_if = "Option::is_none")]
799 pub operations_pending: Option<usize>,
800 #[serde(skip_serializing_if = "Option::is_none")]
802 pub snapshot_size: Option<usize>,
803 #[serde(skip_serializing_if = "Option::is_none")]
805 pub connected_replicas: Option<usize>,
806
807 pub master_offset: u64,
810 pub replica_offset: u64,
812 pub lag_operations: u64,
814 pub total_replicated: u64,
816}
817
818#[derive(Debug, Clone, Serialize, Deserialize)]
820pub struct ReplicationStatusResponse {
821 pub status: String,
823 pub stats: ReplicationStats,
825 #[serde(skip_serializing_if = "Option::is_none")]
827 pub message: Option<String>,
828}
829
830#[derive(Debug, Clone, Serialize, Deserialize)]
832pub struct ReplicaListResponse {
833 pub replicas: Vec<ReplicaInfo>,
835 pub count: usize,
837 pub message: String,
839}