remem/eval/provider_comparison/
display.rs1use std::fmt::{Display, Formatter, Result as FmtResult};
2
3use super::ProviderComparisonReport;
4
5impl Display for ProviderComparisonReport {
6 fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
7 writeln!(
8 f,
9 "remem provider comparison: decision={:?}, change_default={}, k={}",
10 self.default_decision.decision, self.default_decision.change_default, self.k
11 )?;
12 writeln!(f, "reason: {}", self.default_decision.decision_reason)?;
13 for row in &self.providers {
14 if row.available {
15 let slice_metrics = row
16 .provider_comparison_slice
17 .as_ref()
18 .and_then(|slice| slice.metrics.as_ref());
19 let evidence = slice_metrics.map_or(0.0, |metrics| metrics.evidence_recall_at_k);
20 writeln!(
21 f,
22 "- {} available model={} evidence@{}={:.3} cold_start_embed_ms={:.2} warm_query_embed_p95_ms={:.2}",
23 row.provider,
24 row.model_id.as_deref().unwrap_or("unknown"),
25 self.k,
26 evidence,
27 row.cold_start_embedding_latency_ms.unwrap_or_default(),
28 row.query_embedding_latency_p95_ms.unwrap_or_default()
29 )?;
30 } else {
31 writeln!(
32 f,
33 "- {} unavailable: {}",
34 row.provider,
35 row.unavailable_reason.as_deref().unwrap_or("unknown")
36 )?;
37 }
38 }
39 Ok(())
40 }
41}