diff --git a/ai/internal/agent/agent.go b/ai/internal/agent/agent.go index 0715b99..149b58f 100644 --- a/ai/internal/agent/agent.go +++ b/ai/internal/agent/agent.go @@ -158,7 +158,9 @@ func (a *Agent) Diagnose(ctx context.Context, req Request) (*Result, error) { var prevID string var diagnosis *diag.Diagnosis pf := false - var usage any + // usage is summed over every turn: with previous_response_id each turn re-bills the whole context, so the + // last response alone understates the cost (seen 2026-10-08: 12 turns, last turn 11K input tokens). + usage := map[string]int{"input_tokens": 0, "output_tokens": 0, "total_tokens": 0, "turns": 0} for turn := 1; turn <= a.cfg.MaxTurns && diagnosis == nil; turn++ { res.Turns = turn r := openai.Request{Model: a.cfg.Model, Input: input, Tools: defs, ToolChoice: "auto", MaxOutputTokens: a.cfg.MaxOutputTokens, ParallelToolCalls: &pf} @@ -173,7 +175,10 @@ func (a *Agent) Diagnose(ctx context.Context, req Request) (*Result, error) { finish(err) return nil, err } - usage = resp.Usage + usage["input_tokens"] += resp.Usage.InputTokens + usage["output_tokens"] += resp.Usage.OutputTokens + usage["total_tokens"] += resp.Usage.TotalTokens + usage["turns"]++ prevID = resp.ID fcs := resp.FunctionCalls() if len(fcs) == 0 {