1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7pub mod hybrid_search;
9pub use hybrid_search::*;
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
13#[serde(rename_all = "snake_case")]
14pub enum SimilarityMetric {
15 Cosine,
17 Euclidean,
19 DotProduct,
21}
22
23impl Default for SimilarityMetric {
24 fn default() -> Self {
25 Self::Cosine
26 }
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct Vector {
32 pub id: String,
34 pub data: Vec<f32>,
36 pub metadata: Option<HashMap<String, serde_json::Value>>,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct Collection {
43 pub name: String,
45 pub dimension: usize,
47 pub similarity_metric: SimilarityMetric,
49 pub description: Option<String>,
51 pub created_at: Option<DateTime<Utc>>,
53 pub updated_at: Option<DateTime<Utc>>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct CollectionInfo {
60 pub name: String,
62 pub dimension: usize,
64 pub metric: String,
66 pub vector_count: usize,
68 pub document_count: usize,
70 pub created_at: String,
72 pub updated_at: String,
74 pub indexing_status: IndexingStatus,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct IndexingStatus {
81 pub status: String,
83 pub progress: f32,
85 pub total_documents: usize,
87 pub processed_documents: usize,
89 pub vector_count: usize,
91 pub estimated_time_remaining: Option<String>,
93 pub last_updated: String,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize)]
99pub struct SearchResult {
100 pub id: String,
102 pub score: f32,
104 pub content: Option<String>,
106 pub metadata: Option<HashMap<String, serde_json::Value>>,
108}
109
110#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct SearchResponse {
113 pub results: Vec<SearchResult>,
115 pub query_time_ms: f64,
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize)]
121pub struct EmbeddingRequest {
122 pub text: String,
124 pub model: Option<String>,
126 pub parameters: Option<EmbeddingParameters>,
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize)]
132pub struct EmbeddingParameters {
133 pub max_length: Option<usize>,
135 pub normalize: Option<bool>,
137 pub prefix: Option<String>,
139}
140
141#[derive(Debug, Clone, Serialize, Deserialize)]
143pub struct EmbeddingResponse {
144 pub embedding: Vec<f32>,
146 pub model: String,
148 pub text: String,
150 pub dimension: usize,
152 pub provider: String,
154}
155
156#[derive(Debug, Clone, Serialize, Deserialize)]
158pub struct HealthStatus {
159 pub status: String,
161 pub version: String,
163 pub timestamp: String,
165 pub uptime: Option<u64>,
167 pub collections: Option<usize>,
169 pub total_vectors: Option<usize>,
171}
172
173#[derive(Debug, Clone, Serialize, Deserialize)]
175pub struct CollectionsResponse {
176 pub collections: Vec<CollectionInfo>,
178}
179
180#[derive(Debug, Clone, Serialize, Deserialize)]
182pub struct CreateCollectionResponse {
183 pub message: String,
185 pub collection: String,
187}
188
189#[derive(Debug, Clone, Serialize, Deserialize)]
191pub struct DatabaseStats {
192 pub total_collections: usize,
194 pub total_vectors: usize,
196 pub total_memory_estimate_bytes: usize,
198 pub collections: Vec<CollectionStats>,
200}
201
202#[derive(Debug, Clone, Serialize, Deserialize)]
204pub struct CollectionStats {
205 pub name: String,
207 pub vector_count: usize,
209 pub dimension: usize,
211 pub memory_estimate_bytes: usize,
213}
214
215#[derive(Debug, Clone, Serialize, Deserialize)]
217pub struct BatchTextRequest {
218 pub id: String,
220 pub text: String,
222 pub metadata: Option<HashMap<String, String>>,
224}
225
226#[derive(Debug, Clone, Serialize, Deserialize)]
228pub struct BatchConfig {
229 pub max_batch_size: Option<usize>,
231 pub parallel_workers: Option<usize>,
233 pub atomic: Option<bool>,
235}
236
237#[derive(Debug, Clone, Serialize, Deserialize)]
239pub struct BatchInsertRequest {
240 pub texts: Vec<BatchTextRequest>,
242 pub config: Option<BatchConfig>,
244}
245
246#[derive(Debug, Clone, Serialize, Deserialize)]
248pub struct BatchResponse {
249 pub success: bool,
251 pub collection: String,
253 pub operation: String,
255 pub total_operations: usize,
257 pub successful_operations: usize,
259 pub failed_operations: usize,
261 pub duration_ms: u64,
263 pub errors: Vec<String>,
265}
266
267#[derive(Debug, Clone, Serialize, Deserialize)]
269pub struct BatchSearchQuery {
270 pub query: String,
272 pub limit: Option<usize>,
274 pub score_threshold: Option<f32>,
276}
277
278#[derive(Debug, Clone, Serialize, Deserialize)]
280pub struct BatchSearchRequest {
281 pub queries: Vec<BatchSearchQuery>,
283 pub config: Option<BatchConfig>,
285}
286
287#[derive(Debug, Clone, Serialize, Deserialize)]
289pub struct BatchSearchResponse {
290 pub success: bool,
292 pub collection: String,
294 pub total_queries: usize,
296 pub successful_queries: usize,
298 pub failed_queries: usize,
300 pub duration_ms: u64,
302 pub results: Vec<Vec<SearchResult>>,
304 pub errors: Vec<String>,
306}
307
308#[derive(Debug, Clone, Serialize, Deserialize)]
310pub struct BatchVectorUpdate {
311 pub id: String,
313 pub data: Option<Vec<f32>>,
315 pub metadata: Option<HashMap<String, serde_json::Value>>,
317}
318
319#[derive(Debug, Clone, Serialize, Deserialize)]
321pub struct BatchUpdateRequest {
322 pub updates: Vec<BatchVectorUpdate>,
324 pub config: Option<BatchConfig>,
326}
327
328#[derive(Debug, Clone, Serialize, Deserialize)]
330pub struct BatchDeleteRequest {
331 pub vector_ids: Vec<String>,
333 pub config: Option<BatchConfig>,
335}
336
337#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
339#[serde(rename_all = "snake_case")]
340pub enum SummarizationMethod {
341 Extractive,
343 Keyword,
345 Sentence,
347 Abstractive,
349}
350
351impl Default for SummarizationMethod {
352 fn default() -> Self {
353 Self::Extractive
354 }
355}
356
357#[derive(Debug, Clone, Serialize, Deserialize)]
359pub struct SummarizeTextRequest {
360 pub text: String,
362 pub method: Option<SummarizationMethod>,
364 pub max_length: Option<usize>,
366 pub compression_ratio: Option<f32>,
368 pub language: Option<String>,
370}
371
372#[derive(Debug, Clone, Serialize, Deserialize)]
374pub struct SummarizeTextResponse {
375 pub summary_id: String,
377 pub original_text: String,
379 pub summary: String,
381 pub method: String,
383 pub original_length: usize,
385 pub summary_length: usize,
387 pub compression_ratio: f32,
389 pub language: String,
391 pub status: String,
393 pub message: String,
395 pub metadata: HashMap<String, String>,
397}
398
399#[derive(Debug, Clone, Serialize, Deserialize)]
401pub struct SummarizeContextRequest {
402 pub context: String,
404 pub method: Option<SummarizationMethod>,
406 pub max_length: Option<usize>,
408 pub compression_ratio: Option<f32>,
410 pub language: Option<String>,
412}
413
414#[derive(Debug, Clone, Serialize, Deserialize)]
416pub struct SummarizeContextResponse {
417 pub summary_id: String,
419 pub original_context: String,
421 pub summary: String,
423 pub method: String,
425 pub original_length: usize,
427 pub summary_length: usize,
429 pub compression_ratio: f32,
431 pub language: String,
433 pub status: String,
435 pub message: String,
437 pub metadata: HashMap<String, String>,
439}
440
441#[derive(Debug, Clone, Serialize, Deserialize)]
443pub struct GetSummaryResponse {
444 pub summary_id: String,
446 pub original_text: String,
448 pub summary: String,
450 pub method: String,
452 pub original_length: usize,
454 pub summary_length: usize,
456 pub compression_ratio: f32,
458 pub language: String,
460 pub created_at: String,
462 pub metadata: HashMap<String, String>,
464 pub status: String,
466}
467
468#[derive(Debug, Clone, Serialize, Deserialize)]
470pub struct SummaryInfo {
471 pub summary_id: String,
473 pub method: String,
475 pub language: String,
477 pub original_length: usize,
479 pub summary_length: usize,
481 pub compression_ratio: f32,
483 pub created_at: String,
485 pub metadata: HashMap<String, String>,
487}
488
489#[derive(Debug, Clone, Serialize, Deserialize)]
491pub struct ListSummariesResponse {
492 pub summaries: Vec<SummaryInfo>,
494 pub total_count: usize,
496 pub status: String,
498}
499
500#[derive(Debug, Clone, Serialize, Deserialize)]
502pub struct IndexingProgress {
503 pub is_indexing: bool,
505 pub overall_status: String,
507 pub collections: Vec<CollectionProgress>,
509}
510
511#[derive(Debug, Clone, Serialize, Deserialize)]
513pub struct CollectionProgress {
514 pub collection_name: String,
516 pub status: String,
518 pub progress: f32,
520 pub vector_count: usize,
522 pub error_message: Option<String>,
524 pub last_updated: String,
526}
527
528#[derive(Debug, Clone, Serialize, Deserialize)]
532pub struct IntelligentSearchRequest {
533 pub query: String,
535 pub collections: Option<Vec<String>>,
537 pub max_results: Option<usize>,
539 pub domain_expansion: Option<bool>,
541 pub technical_focus: Option<bool>,
543 pub mmr_enabled: Option<bool>,
545 pub mmr_lambda: Option<f32>,
547}
548
549#[derive(Debug, Clone, Serialize, Deserialize)]
551pub struct SemanticSearchRequest {
552 pub query: String,
554 pub collection: String,
556 pub max_results: Option<usize>,
558 pub semantic_reranking: Option<bool>,
560 pub cross_encoder_reranking: Option<bool>,
562 pub similarity_threshold: Option<f32>,
564}
565
566#[derive(Debug, Clone, Serialize, Deserialize)]
568pub struct ContextualSearchRequest {
569 pub query: String,
571 pub collection: String,
573 pub context_filters: Option<HashMap<String, serde_json::Value>>,
575 pub max_results: Option<usize>,
577 pub context_reranking: Option<bool>,
579 pub context_weight: Option<f32>,
581}
582
583#[derive(Debug, Clone, Serialize, Deserialize)]
585pub struct MultiCollectionSearchRequest {
586 pub query: String,
588 pub collections: Vec<String>,
590 pub max_per_collection: Option<usize>,
592 pub max_total_results: Option<usize>,
594 pub cross_collection_reranking: Option<bool>,
596}
597
598#[derive(Debug, Clone, Serialize, Deserialize)]
600pub struct IntelligentSearchResult {
601 pub id: String,
603 pub score: f32,
605 pub content: String,
607 pub metadata: Option<HashMap<String, serde_json::Value>>,
609 pub collection: Option<String>,
611 pub query_used: Option<String>,
613}
614
615#[derive(Debug, Clone, Serialize, Deserialize)]
617pub struct IntelligentSearchResponse {
618 pub results: Vec<IntelligentSearchResult>,
620 pub total_results: usize,
622 pub duration_ms: u64,
624 pub queries_generated: Option<Vec<String>>,
626 pub collections_searched: Option<Vec<String>>,
628 pub metadata: Option<HashMap<String, serde_json::Value>>,
630}
631
632#[derive(Debug, Clone, Serialize, Deserialize)]
634pub struct SemanticSearchResponse {
635 pub results: Vec<IntelligentSearchResult>,
637 pub total_results: usize,
639 pub duration_ms: u64,
641 pub collection: String,
643 pub metadata: Option<HashMap<String, serde_json::Value>>,
645}
646
647#[derive(Debug, Clone, Serialize, Deserialize)]
649pub struct ContextualSearchResponse {
650 pub results: Vec<IntelligentSearchResult>,
652 pub total_results: usize,
654 pub duration_ms: u64,
656 pub collection: String,
658 pub context_filters: Option<HashMap<String, serde_json::Value>>,
660 pub metadata: Option<HashMap<String, serde_json::Value>>,
662}
663
664#[derive(Debug, Clone, Serialize, Deserialize)]
666pub struct MultiCollectionSearchResponse {
667 pub results: Vec<IntelligentSearchResult>,
669 pub total_results: usize,
671 pub duration_ms: u64,
673 pub collections_searched: Vec<String>,
675 pub results_per_collection: Option<HashMap<String, usize>>,
677 pub metadata: Option<HashMap<String, serde_json::Value>>,
679}
680
681#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
685#[serde(rename_all = "PascalCase")]
686pub enum ReplicaStatus {
687 Connected,
689 Syncing,
691 Lagging,
693 Disconnected,
695}
696
697#[derive(Debug, Clone, Serialize, Deserialize)]
699pub struct ReplicaInfo {
700 pub replica_id: String,
702 pub host: String,
704 pub port: u16,
706 pub status: String,
708 pub last_heartbeat: DateTime<Utc>,
710 pub operations_synced: u64,
712
713 #[serde(skip_serializing_if = "Option::is_none")]
716 pub offset: Option<u64>,
717 #[serde(skip_serializing_if = "Option::is_none")]
719 pub lag: Option<u64>,
720}
721
722#[derive(Debug, Clone, Serialize, Deserialize)]
724pub struct ReplicationStats {
725 #[serde(skip_serializing_if = "Option::is_none")]
728 pub role: Option<String>,
729 #[serde(skip_serializing_if = "Option::is_none")]
731 pub bytes_sent: Option<u64>,
732 #[serde(skip_serializing_if = "Option::is_none")]
734 pub bytes_received: Option<u64>,
735 #[serde(skip_serializing_if = "Option::is_none")]
737 pub last_sync: Option<DateTime<Utc>>,
738 #[serde(skip_serializing_if = "Option::is_none")]
740 pub operations_pending: Option<usize>,
741 #[serde(skip_serializing_if = "Option::is_none")]
743 pub snapshot_size: Option<usize>,
744 #[serde(skip_serializing_if = "Option::is_none")]
746 pub connected_replicas: Option<usize>,
747
748 pub master_offset: u64,
751 pub replica_offset: u64,
753 pub lag_operations: u64,
755 pub total_replicated: u64,
757}
758
759#[derive(Debug, Clone, Serialize, Deserialize)]
761pub struct ReplicationStatusResponse {
762 pub status: String,
764 pub stats: ReplicationStats,
766 #[serde(skip_serializing_if = "Option::is_none")]
768 pub message: Option<String>,
769}
770
771#[derive(Debug, Clone, Serialize, Deserialize)]
773pub struct ReplicaListResponse {
774 pub replicas: Vec<ReplicaInfo>,
776 pub count: usize,
778 pub message: String,
780}