pub struct ConfigReport {
pub model: String,
pub n: usize,
pub accuracy: f64,
pub cost_total_usd: Option<f64>,
pub latency_ms_avg: u64,
pub turns_avg: Option<u64>,
pub cache_hits: usize,
pub cache_misses: usize,
pub flaky_cases: u32,
pub output_unstable_cases: u32,
pub by_tag: BTreeMap<String, TagStat>,
pub cases: Vec<CaseResult>,
}Fields§
§model: String§n: usize§accuracy: f64Mean of each case’s pass_rate. At samples == 1 this is exactly the old passes/n
accuracy — the field name is kept for gate continuity.
cost_total_usd: Option<f64>None when any case’s backend couldn’t report cost — absent is not zero, so a back-end
that genuinely can’t supply cost never shows up as “free”.
latency_ms_avg: u64§turns_avg: Option<u64>Average conversation turns per case (num_turns) — a context-quality diagnostic
(fewer turns ⇒ less exploration ⇒ cheaper). 0 in a pre-P4 report. None when any
case’s backend couldn’t report a turn count.
cache_hits: usizeSamples (not cases) served from the trace cache (re-scored, 0 LLM) vs freshly re-run this
invocation. cache_misses is the count of actual LLM calls made; both 0 in a pre-P4 report.
cache_misses: usize§flaky_cases: u32Cases with 0 < passes < samples — inconsistent across samples, not a hard regression.
0 in a pre-repeated-sampling report (no case could be flaky at samples == 1).
output_unstable_cases: u32Cases whose CaseResult::output_stability is Unstable or Incomplete — distinct from
flaky_cases, which only tracks verdict flips. A case can be output-unstable while passing
(or failing) every sample, which flaky_cases can never see. This is a labelled upper
bound, not an exact count — see OutputStability::Unstable for why. 0 when
--record-answers was off or samples <= 1 (nothing was measured), same as a
pre-repeated-sampling report.
by_tag: BTreeMap<String, TagStat>§cases: Vec<CaseResult>