relay_knowledge/domain/graph/retrieval/
diagnostics.rs1use serde::{Deserialize, Serialize};
2
3use super::{RerankMode, RetrieverSource};
4
5pub const RECIPROCAL_RANK_FUSION_K: f64 = 60.0;
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
10pub struct RankingSignal {
11 pub source: RetrieverSource,
12 pub rank: usize,
13 pub score: f64,
14 pub explanation: String,
15}
16
17#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
19pub struct RerankSignal {
20 pub mode: RerankMode,
21 pub score: f64,
22 pub explanation: String,
23}
24
25#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
27pub struct RetrievalBudgetUsed {
28 pub limit: usize,
29 pub candidate_count: usize,
30 pub returned_count: usize,
31 pub context_bytes: usize,
32}
33
34#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
36pub struct FusionDiagnostics {
37 pub algorithm: String,
38 pub k: f64,
39 pub candidate_count: usize,
40}
41
42#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
44pub struct RerankDiagnostics {
45 pub requested_mode: RerankMode,
46 pub effective_mode: RerankMode,
47 pub algorithm: String,
48 pub candidate_count: usize,
49 pub returned_count: usize,
50 pub degraded: bool,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub reason: Option<String>,
53}