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
2026-09-10 22:52:29 +07:00
parent 998bb3d975
commit 248d7da01c
9 changed files with 74 additions and 341 deletions

View File

@@ -6,7 +6,6 @@
import fs from "fs";
import path from "path";
import { toResponsesUsage } from "../translator/concerns/usage.js";
// Create log directory for responses (Node.js only)
export function createResponsesLogger(model, logsDir = null) {
@@ -74,7 +73,6 @@ export function createResponsesApiTransformStream(logger = null) {
funcArgsDone: {},
funcItemDone: {},
buffer: "",
usage: null,
completedSent: false
};
@@ -227,17 +225,17 @@ export function createResponsesApiTransformStream(logger = null) {
const sendCompleted = (controller) => {
if (!state.completedSent) {
state.completedSent = true;
const response = {
id: state.responseId,
object: "response",
created_at: state.created,
status: "completed",
background: false,
error: null
};
const usage = toResponsesUsage(state.usage);
if (usage) response.usage = usage;
emit(controller, "response.completed", { type: "response.completed", response });
emit(controller, "response.completed", {
type: "response.completed",
response: {
id: state.responseId,
object: "response",
created_at: state.created,
status: "completed",
background: false,
error: null
}
});
}
};
@@ -266,9 +264,6 @@ export function createResponsesApiTransformStream(logger = null) {
continue;
}
// Remember usage (finish chunk or trailing include_usage frame) for response.completed
if (parsed.usage && typeof parsed.usage === "object") state.usage = parsed.usage;
if (!parsed.choices?.length) continue;
const choice = parsed.choices[0];