use serde::{Deserialize, Serialize};
use crate::model::EmbeddingModel;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum EmbeddingRoute {
Legacy,
Target,
DualWrite,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum RoutingPhase {
Stable,
Migrating,
RollbackWindow,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbeddingRoutingConfig {
pub query_model: EmbeddingModel,
pub write_models: Vec<EmbeddingModel>,
pub phase: RoutingPhase,
pub migration_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BackfillConfig {
pub batch_size: usize,
pub max_concurrent: usize,
pub dual_write: bool,
pub target_query_threshold: f64,
pub rollback_window_secs: u64,
}
impl Default for BackfillConfig {
fn default() -> Self {
Self {
batch_size: 100,
max_concurrent: 4,
dual_write: true,
target_query_threshold: 0.8,
rollback_window_secs: 86400, }
}
}