revert(qoder): drop the Responses usage plumbing from shared code

The merged Qoder work also rewrote shared translator/handler code so that
/v1/responses clients got token usage on response.completed. That changed
behaviour for every provider, not just Qoder: proxies saw input tokens
rise by the 2000-token context buffer, and the plain token mapping was
replaced by one that always adds input_tokens_details.

A probe confirms the Qoder benefit does not depend on those edits: the
executor's coalescer already emits one include_usage-style finish chunk, so
a Claude client receives input_tokens and cache_read_input_tokens with
every shared file at its original state. Only the Responses path relies on
the shared translator, and that path has no Qoder-owned seam to put it in.

Reverts the shared files to their pre-PR state and drops the Responses
usage test. The Cline envelope unwrap in nonStreamingHandler.js, which
landed after the PR in the same file, is kept.
This commit is contained in:
LLL committed 2026-09-10 23:13:06 +07:00
1 parent 998bb3d975
commit 248d7da01c
9 files changed
+74 -341

No files matched your search

-27
View File
@@ -203,31 +203,4 @@ describe("openaiToClaudeResponse", () => {
limit: 120
});
});
it("records usage from a choices:[] frame so the finish chunk can emit it", () => {
const state = { toolCalls: new Map() };
expect(openaiToClaudeResponse({
usage: {
prompt_tokens: 90,
completion_tokens: 7,
prompt_tokens_details: { cached_tokens: 30 },
},
choices: [],
}, state)).toBeNull();
expect(state.usage).toEqual({
input_tokens: 60,
output_tokens: 7,
cache_read_input_tokens: 30,
});
const events = openaiToClaudeResponse({
id: "chatcmpl-qoder-finish",
model: "qoder/auto",
choices: [{ index: 0, delta: {}, finish_reason: "stop" }],
}, state);
const delta = events.find((e) => e.type === "message_delta");
expect(delta.usage.input_tokens).toBe(60);
expect(delta.usage.output_tokens).toBe(7);
expect(delta.usage.cache_read_input_tokens).toBe(30);
});
});