fix(agent): record token usage summed over all turns

previous_response_id로 잇는 Responses API는 턴마다 전체 컨텍스트를 입력으로 과금하는데
세션에는 마지막 턴의 usage만 남아 비용이 과소 기록되었다(실측 2026-10-08: 12턴, 마지막 턴 입력
10,997). 턴별 input/output/total을 합산하고 턴 수도 함께 기록한다.
This commit is contained in:
seon committed 2026-10-08 10:53:08 +09:00
1 parent 9bc3a3b5fe
commit 8b403c54df
1 file changed
+7 -2
+7 -2
View File
@@ -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 {