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 prevID string
|
||||||
var diagnosis *diag.Diagnosis
|
var diagnosis *diag.Diagnosis
|
||||||
pf := false
|
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++ {
|
for turn := 1; turn <= a.cfg.MaxTurns && diagnosis == nil; turn++ {
|
||||||
res.Turns = turn
|
res.Turns = turn
|
||||||
r := openai.Request{Model: a.cfg.Model, Input: input, Tools: defs, ToolChoice: "auto", MaxOutputTokens: a.cfg.MaxOutputTokens, ParallelToolCalls: &pf}
|
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)
|
finish(err)
|
||||||
return nil, 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
|
prevID = resp.ID
|
||||||
fcs := resp.FunctionCalls()
|
fcs := resp.FunctionCalls()
|
||||||
if len(fcs) == 0 {
|
if len(fcs) == 0 {
|
||||||
|
|||||||
Reference in new issue
Block a user