use super::types::*;
use crate::ast::Value;
use alloc::string::String;
use alloc::vec::Vec;
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MultivectorConfig {
pub comparator: MultivectorComparator,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct VectorDef {
pub name: String,
pub size: u64,
pub distance: VectorDistance,
pub hnsw: Option<Box<HnswRuntimeConfig>>,
pub quantization: Option<Box<QuantizationConfig>>,
pub multivector: Option<MultivectorConfig>,
pub vectors: Option<Box<VectorsConfig>>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SparseIndexConfig {
pub full_scan_threshold: Option<u64>,
pub on_disk: Option<bool>,
pub datatype: Option<VectorDatatype>,
pub memory: Option<MemoryPlacement>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SparseVectorDef {
pub name: String,
pub index: Option<Box<SparseIndexConfig>>,
pub modifier: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct QuantizationConfig {
pub qtype: QuantizationType,
pub always_ram: bool,
pub quantile: Option<f64>,
pub bits: Option<f64>,
pub compression: Option<String>,
pub encoding: Option<String>,
pub query_encoding: Option<String>,
pub memory: Option<MemoryPlacement>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct QuantizationUpdate {
pub disabled: bool,
pub config: Option<Box<QuantizationConfig>>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct VectorDiff {
pub name: String,
pub hnsw: Option<Box<HnswRuntimeConfig>>,
pub quantization: Option<Box<QuantizationUpdate>>,
pub vectors: Option<Box<VectorsConfig>>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SparseVectorDiff {
pub name: String,
pub index: Option<Box<SparseIndexConfig>>,
pub modifier: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct HnswRuntimeConfig {
pub m: Option<u64>,
pub ef_construct: Option<u64>,
pub full_scan_threshold: Option<u64>,
pub max_indexing_threads: Option<u64>,
pub on_disk: Option<bool>,
pub payload_m: Option<u64>,
pub inline_storage: Option<bool>,
pub memory: Option<MemoryPlacement>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct VectorsConfig {
pub on_disk: Option<bool>,
pub memory: Option<MemoryPlacement>,
pub datatype: Option<VectorDatatype>,
}
#[derive(Debug, Clone, Copy, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct OptimizationThreads {
pub auto_: bool,
pub value: u64,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct OptimizersRuntimeConfig {
pub deleted_threshold: Option<f64>,
pub vacuum_min_vector_number: Option<u64>,
pub default_segment_number: Option<u64>,
pub max_segment_size: Option<u64>,
pub memmap_threshold: Option<u64>,
pub indexing_threshold: Option<u64>,
pub flush_interval_sec: Option<u64>,
pub max_optimization_threads: Option<OptimizationThreads>,
pub prevent_unoptimized: Option<bool>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CollectionParamsConfig {
pub replication_factor: Option<u64>,
pub write_consistency_factor: Option<u64>,
pub read_fan_out_factor: Option<u64>,
pub read_fan_out_delay_ms: Option<u64>,
pub on_disk_payload: Option<bool>,
pub payload_memory: Option<MemoryPlacement>,
pub shard_number: Option<u64>,
pub sharding_method: Option<String>,
pub shard_keys: Option<Vec<super::ShardKey>>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CollectionConfig {
pub vectors: Option<Box<VectorsConfig>>,
pub hnsw: Option<Box<HnswRuntimeConfig>>,
pub optimizers: Option<Box<OptimizersRuntimeConfig>>,
pub params: Option<Box<CollectionParamsConfig>>,
pub quantization: Option<Box<QuantizationConfig>>,
pub quantization_update: Option<Box<QuantizationUpdate>>,
pub wal: Option<Vec<(String, Value)>>,
pub strict_mode: Option<Vec<(String, Value)>>,
pub metadata: Option<Vec<(String, Value)>>,
pub vector_diffs: Vec<VectorDiff>,
pub sparse_vector_diffs: Vec<SparseVectorDiff>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum CollectionMode {
Dense {
model: Option<String>,
},
Hybrid {
dense_vector: Option<String>,
sparse_vector: Option<String>,
},
Rerank,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CreateCollectionStmt {
pub collection: String,
pub mode: CollectionMode,
pub vectors: Vec<VectorDef>,
pub sparse_vectors: Vec<SparseVectorDef>,
pub config: Option<Box<CollectionConfig>>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct AlterCollectionStmt {
pub collection: String,
pub config: Option<Box<CollectionConfig>>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DropCollectionStmt {
pub collection: String,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CreateIndexStmt {
pub collection: String,
pub field: String,
pub field_type: String,
pub options: Vec<(String, Value)>,
pub wait: Option<bool>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DropIndexStmt {
pub collection: String,
pub field: String,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CreateShardKeyStmt {
pub collection: String,
pub shard_key: super::ShardKey,
pub shards_number: Option<u64>,
pub replication_factor: Option<u64>,
pub placement: Option<Vec<u64>>,
pub initial_state: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DropShardKeyStmt {
pub collection: String,
pub shard_key: super::ShardKey,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SetQuotaStmt {
pub config: Vec<(String, Value)>,
pub wait: Option<bool>,
}