use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum SearchMode {
Exact,
Approximate,
#[default]
Balanced,
}
#[derive(Debug, Clone, Copy)]
pub enum SearchQualityPreset {
Fast,
Balanced,
Accurate,
Maximum,
}
impl SearchQualityPreset {
pub fn ef_search(&self) -> usize {
match self {
SearchQualityPreset::Fast => 32,
SearchQualityPreset::Balanced => 64,
SearchQualityPreset::Accurate => 128,
SearchQualityPreset::Maximum => 256,
}
}
}
#[derive(Debug, Clone)]
pub struct VectorDbConfig {
pub dimension: usize,
pub max_connections: usize,
pub ef_construction: usize,
pub ef_search: usize,
pub num_layers: usize,
pub enable_quantization: bool,
pub quantization_buckets: usize,
pub enable_hnsw_index: bool,
pub distance_threshold: f32,
pub max_vectors: usize,
pub auto_save_interval: usize,
pub persistent_storage: bool,
pub storage_path: Option<PathBuf>,
pub enable_product_quantization: bool,
pub pq_subvectors: usize,
pub pq_bits: usize,
}
impl Default for VectorDbConfig {
fn default() -> Self {
Self {
dimension: 384, max_connections: 16,
ef_construction: 200,
ef_search: 50,
num_layers: 4,
enable_quantization: true,
quantization_buckets: 256,
enable_hnsw_index: true,
distance_threshold: 0.7,
max_vectors: 100_000,
auto_save_interval: 1000,
persistent_storage: false,
storage_path: None,
enable_product_quantization: false, pq_subvectors: 8, pq_bits: 8, }
}
}