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} query_embed_p95_ms={:.2}",
23                    row.provider,
24                    row.model_id.as_deref().unwrap_or("unknown"),
25                    self.k,
26                    evidence,
27                    row.query_embedding_latency_p95_ms.unwrap_or_default()
28                )?;
29            } else {
30                writeln!(
31                    f,
32                    "- {} unavailable: {}",
33                    row.provider,
34                    row.unavailable_reason.as_deref().unwrap_or("unknown")
35                )?;
36            }
37        }
38        Ok(())
39    }
40}