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:
1 parent
9bc3a3b5fe
commit
8b403c54df
1 file changed
+7
-2
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user