use std::collections::BTreeMap;
use serde_json::Value;
#[derive(Debug, Clone, Default)]
pub(super) struct ToolCall {
pub(super) id: Option<String>,
pub(super) name: String,
pub(super) detail: String,
pub(super) out_len: usize,
}
#[derive(Debug, Clone, Default)]
pub(super) struct ParsedRun {
pub(super) init_codegraph_tools: Option<usize>,
pub(super) tool_calls: Vec<ToolCall>,
pub(super) result: Option<Value>,
pub(super) assistant_total_tokens: u64,
pub(super) raced: bool,
}
#[derive(Debug, Clone, Default)]
pub(super) struct RunMetrics {
pub(super) init_codegraph_tools: usize,
pub(super) reads: usize,
pub(super) greps: usize,
pub(super) codegraph_calls: usize,
pub(super) codegraph_sequence: Vec<String>,
pub(super) codegraph_output: usize,
pub(super) trace_used: bool,
pub(super) turns: Option<f64>,
pub(super) duration_seconds: Option<f64>,
pub(super) cost: f64,
pub(super) ok: bool,
}
#[derive(Debug, Clone, Default)]
pub(super) struct SeqMetrics {
pub(super) base: RunMetrics,
pub(super) per_tool: BTreeMap<String, ToolPayload>,
pub(super) sequence: Vec<String>,
pub(super) after_trace: Option<Vec<String>>,
}
#[derive(Debug, Clone, Copy, Default)]
pub(super) struct ToolPayload {
pub(super) n: usize,
pub(super) out: usize,
}
#[derive(Debug, Clone, Copy, Default)]
pub(super) struct ProbeSignals {
pub(super) has_entry_points: bool,
pub(super) has_flow_trace: bool,
pub(super) has_route_manifest: bool,
pub(super) has_top_handler: bool,
pub(super) has_small_repo_tail: bool,
}
#[derive(Debug, Clone)]
pub(super) struct SweepSubject {
pub(super) id: &'static str,
pub(super) repo: &'static str,
pub(super) query: &'static str,
}
#[derive(Debug, Clone, Copy, Default)]
pub(super) struct BenchRun {
pub(super) duration: f64,
pub(super) tools: usize,
pub(super) tokens: u64,
pub(super) cost: f64,
pub(super) raced: bool,
}
#[derive(Debug, Clone)]
pub(super) struct MatrixCell {
pub(super) repo: String,
pub(super) files: Option<usize>,
pub(super) with: SeqMetrics,
pub(super) without: Option<SeqMetrics>,
}
#[derive(Debug, Clone)]
pub(super) struct RepoMeta {
pub(super) files: usize,
}
#[derive(Debug, Clone)]
pub(super) struct SweepRow {
pub(super) id: String,
pub(super) ms: u64,
pub(super) chars: usize,
pub(super) lines: usize,
pub(super) signals: ProbeSignals,
pub(super) error: Option<String>,
}
#[derive(Debug, Clone, Copy, Default)]
pub(super) struct TokenTotals {
pub(super) generated: u64,
pub(super) fresh: u64,
pub(super) cached: u64,
}
impl TokenTotals {
pub(super) fn add(&mut self, other: TokenTotals) {
self.generated += other.generated;
self.fresh += other.fresh;
self.cached += other.cached;
}
}