fix(agents): clamp Responses cached usage

This commit is contained in:
Vincent Koc
2026-05-16 02:34:41 +08:00
parent 472523360d
commit f964b1c3aa
2 changed files with 39 additions and 3 deletions
@@ -140,6 +140,39 @@ describe("openai transport stream", () => {
).rejects.toThrow(/did not deliver a first event within 1ms after HTTP streaming headers/);
});
it("clamps Responses cached prompt usage at zero", async () => {
const model = createAzureResponsesModel();
const output = createResponsesAssistantOutput(model);
await __testing.processResponsesStream(
streamChunks([
{
type: "response.completed",
response: {
id: "resp-cache-overflow",
status: "completed",
usage: {
input_tokens: 2,
output_tokens: 5,
total_tokens: 7,
input_tokens_details: { cached_tokens: 4 },
},
},
},
]),
output,
{ push: vi.fn() },
model,
);
expectRecordFields(output.usage, {
input: 0,
output: 5,
cacheRead: 4,
totalTokens: 9,
});
});
it("summarizes model payload tools with full names when requested", () => {
const previous = process.env.OPENCLAW_DEBUG_MODEL_PAYLOAD;
process.env.OPENCLAW_DEBUG_MODEL_PAYLOAD = "tools";
+6 -3
View File
@@ -887,12 +887,15 @@ async function processResponsesStream(
| undefined;
if (usage) {
const cachedTokens = usage.input_tokens_details?.cached_tokens || 0;
const inputTokens = usage.input_tokens || 0;
const outputTokens = usage.output_tokens || 0;
const input = Math.max(0, inputTokens - cachedTokens);
output.usage = {
input: (usage.input_tokens || 0) - cachedTokens,
output: usage.output_tokens || 0,
input,
output: outputTokens,
cacheRead: cachedTokens,
cacheWrite: 0,
totalTokens: usage.total_tokens || 0,
totalTokens: input + outputTokens + cachedTokens,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
};
}