fix(ai): avoid double-counting reasoning tokens

closes #3581
This commit is contained in:
Mario Zechner
2026-04-23 23:28:16 +02:00
parent ffa0f31239
commit c681d35d76
3 changed files with 48 additions and 10 deletions

View File

@@ -552,6 +552,41 @@ describe("openai-completions tool_choice", () => {
expect(toolCall).not.toHaveProperty("partialArgs");
});
it("does not double-count reasoning tokens in completion usage", async () => {
mockState.chunks = [
{
id: "chatcmpl-reasoning-usage",
choices: [{ delta: {}, finish_reason: "stop" }],
usage: {
prompt_tokens: 10,
completion_tokens: 33,
prompt_tokens_details: { cached_tokens: 0 },
completion_tokens_details: { reasoning_tokens: 21 },
},
},
];
const { compat: _compat, ...baseModel } = getModel("openai", "gpt-4o-mini")!;
const model = { ...baseModel, api: "openai-completions" } as const;
const response = await streamSimple(
model,
{
messages: [
{
role: "user",
content: "Use reasoning.",
timestamp: Date.now(),
},
],
},
{ apiKey: "test" },
).result();
expect(response.usage.input).toBe(10);
expect(response.usage.output).toBe(33);
expect(response.usage.totalTokens).toBe(43);
});
it("preserves prompt_tokens_details.cache_write_tokens from chunk usage", async () => {
mockState.chunks = [
{