Skip to main content

remem/eval/provider_comparison/
display.rs

1use 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}