use serde::{Deserialize, Serialize};
use super::{RerankMode, RetrieverSource};
pub const RECIPROCAL_RANK_FUSION_K: f64 = 60.0;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RankingSignal {
pub source: RetrieverSource,
pub rank: usize,
pub score: f64,
pub explanation: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RerankSignal {
pub mode: RerankMode,
pub score: f64,
pub explanation: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RetrievalBudgetUsed {
pub limit: usize,
pub candidate_count: usize,
pub returned_count: usize,
pub context_bytes: usize,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct FusionDiagnostics {
pub algorithm: String,
pub k: f64,
pub candidate_count: usize,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RerankDiagnostics {
pub requested_mode: RerankMode,
pub effective_mode: RerankMode,
pub algorithm: String,
pub candidate_count: usize,
pub returned_count: usize,
pub degraded: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}