feat(stats): record api-resolved model id in turn-stats
This commit is contained in:
parent
8b66bf78df
commit
4e0f2ac9ca
3 changed files with 102 additions and 0 deletions
|
|
@ -712,6 +712,11 @@ async fn run_claude(prompt: &str, files: &TurnFiles, bus: &Bus) -> Result<(bool,
|
|||
// get handed to `record_turn_usage` together so a single SSE
|
||||
// event updates both badges.
|
||||
let mut last_inference: Option<crate::events::TokenUsage> = None;
|
||||
// Resolved model id (API-echoed `message.model`) from this turn's
|
||||
// assistant events; recorded onto the bus at result-time so the
|
||||
// per-turn stats label the concrete version that ran, not the
|
||||
// requested `--model` alias.
|
||||
let mut last_model: Option<String> = None;
|
||||
while let Ok(Some(line)) = reader.next_line().await {
|
||||
if line.contains(PROMPT_TOO_LONG_MARKER) {
|
||||
flag_out.store(true, Ordering::Relaxed);
|
||||
|
|
@ -738,12 +743,19 @@ async fn run_claude(prompt: &str, files: &TurnFiles, bus: &Bus) -> Result<(bool,
|
|||
if let Some(u) = crate::events::TokenUsage::from_assistant_event(&v) {
|
||||
last_inference = Some(u);
|
||||
}
|
||||
if let Some(m) = crate::events::TokenUsage::model_from_assistant_event(&v) {
|
||||
last_model = Some(m);
|
||||
}
|
||||
if let Some(cost) = crate::events::TokenUsage::from_stream_event(&v) {
|
||||
// Fallback to `cost` if the turn somehow produced
|
||||
// a result without any assistant event — keeps the
|
||||
// ctx badge from going stale on a degenerate turn.
|
||||
let ctx = last_inference.unwrap_or(cost);
|
||||
bus_out.record_turn_usage(ctx, cost);
|
||||
// Pin the resolved model for this turn's stats row
|
||||
// (cleared to None if no assistant event reported one
|
||||
// → stats sink falls back to the requested name).
|
||||
bus_out.set_resolved_model(last_model.clone());
|
||||
}
|
||||
// Seed the API-reported context-window from the result
|
||||
// event's `modelUsage.*.contextWindow` field. This is
|
||||
|
|
|
|||
Loading…
Reference in a new issue