diff --git a/src/server/request-log.ts b/src/server/request-log.ts index f4c4df6626..430fc01b8f 100644 --- a/src/server/request-log.ts +++ b/src/server/request-log.ts @@ -1017,7 +1017,11 @@ function finalizedUsage( // ESTIMATE via capEstimateAtContextWindow, and Math.max preserves a real // provider-reported count, so it needs no further reduction. ? (finalUsage.estimated && contextWindow !== undefined && finalUsage.inputTokens > contextWindow - ? { ...finalUsage, inputTokens: contextWindow } + ? { + ...finalUsage, + inputTokens: contextWindow, + totalTokens: contextWindow + finalUsage.outputTokens, + } : finalUsage) : usageFallback; const totalTokens = usageTotalTokens(loggedUsage); diff --git a/tests/request-log-estimate-cap.test.ts b/tests/request-log-estimate-cap.test.ts index b51f7aeb6b..3554dd62b5 100644 --- a/tests/request-log-estimate-cap.test.ts +++ b/tests/request-log-estimate-cap.test.ts @@ -31,6 +31,23 @@ describe("request log token-estimate context-window cap (codex-router PR #140)", expect(attempt.usage?.inputTokens).toBe(100_000); }); + test("capping adapter-estimated input recomputes an explicit total", () => { + const attempt = beginRequestAttempt(1, "kiro", "deepseek-3.2", "kiro"); + finishRequestAttempt(attempt, 200, 10, { + inputTokens: 200_000, + outputTokens: 4, + totalTokens: 200_004, + estimated: true, + }); + expect(attempt.usage).toEqual({ + inputTokens: DEEPSEEK_WINDOW, + outputTokens: 4, + totalTokens: DEEPSEEK_WINDOW + 4, + estimated: true, + }); + expect(attempt.totalTokens).toBe(DEEPSEEK_WINDOW + 4); + }); + test("a positive provider-reported input count is never reduced by the cap", () => { const attempt = beginRequestAttempt(1, "kiro", "deepseek-3.2", "kiro"); noteAttemptSend(attempt, 200_000); // estimate would exceed the window