refactor(translator): P4 concern #5 buildUsage — apply to kiro/ollama/commandcode

- Replace 3 inline {prompt,completion,total} usage objects with buildUsage()
- Preserves ?? vs total fallback semantics (commandcode)
- Golden tests pass, identical output

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
decolua
2026-06-13 21:27:22 +07:00
co-authored by Cursor
parent 252bf56a9f
commit 633b66dcb6
3 changed files with 13 additions and 15 deletions
@@ -18,6 +18,7 @@
import { register } from "../index.js"; import { register } from "../index.js";
import { FORMATS } from "../formats.js"; import { FORMATS } from "../formats.js";
import { buildChunk } from "../helpers/chunkBuilder.js"; import { buildChunk } from "../helpers/chunkBuilder.js";
import { buildUsage } from "../helpers/usageHelper.js";
import { reasoningDelta } from "../helpers/reasoningHelper.js"; import { reasoningDelta } from "../helpers/reasoningHelper.js";
import { toOpenAIFinish } from "../concerns/finishReasonMap.js"; import { toOpenAIFinish } from "../concerns/finishReasonMap.js";
@@ -157,11 +158,12 @@ export function convertCommandCodeToOpenAI(chunk, state) {
const finalChunk = makeChunk(state, {}, finishReason); const finalChunk = makeChunk(state, {}, finishReason);
const totalUsage = event.totalUsage || state.usage; const totalUsage = event.totalUsage || state.usage;
if (totalUsage) { if (totalUsage) {
finalChunk.usage = { const inTok = totalUsage.inputTokens ?? 0, outTok = totalUsage.outputTokens ?? 0;
prompt_tokens: totalUsage.inputTokens ?? 0, finalChunk.usage = buildUsage({
completion_tokens: totalUsage.outputTokens ?? 0, promptTokens: inTok,
total_tokens: totalUsage.totalTokens ?? ((totalUsage.inputTokens ?? 0) + (totalUsage.outputTokens ?? 0)), completionTokens: outTok,
}; totalTokens: totalUsage.totalTokens ?? (inTok + outTok),
});
} }
out.push(finalChunk); out.push(finalChunk);
break; break;
@@ -5,6 +5,7 @@
import { register } from "../index.js"; import { register } from "../index.js";
import { FORMATS } from "../formats.js"; import { FORMATS } from "../formats.js";
import { buildChunk } from "../helpers/chunkBuilder.js"; import { buildChunk } from "../helpers/chunkBuilder.js";
import { buildUsage } from "../helpers/usageHelper.js";
import { fallbackToolCallId } from "../helpers/toolCallHelper.js"; import { fallbackToolCallId } from "../helpers/toolCallHelper.js";
import { reasoningDelta } from "../helpers/reasoningHelper.js"; import { reasoningDelta } from "../helpers/reasoningHelper.js";
@@ -143,11 +144,8 @@ export function convertKiroToOpenAI(chunk, state) {
if (eventType === "usageEvent" || data.usageEvent) { if (eventType === "usageEvent" || data.usageEvent) {
const usage = data.usageEvent || data; const usage = data.usageEvent || data;
if (usage && typeof usage === 'object') { if (usage && typeof usage === 'object') {
state.usage = { const inTok = usage.inputTokens || 0, outTok = usage.outputTokens || 0;
prompt_tokens: usage.inputTokens || 0, state.usage = buildUsage({ promptTokens: inTok, completionTokens: outTok, totalTokens: inTok + outTok });
completion_tokens: usage.outputTokens || 0,
total_tokens: (usage.inputTokens || 0) + (usage.outputTokens || 0)
};
} }
return null; return null;
} }
@@ -1,6 +1,7 @@
import { register } from "../index.js"; import { register } from "../index.js";
import { FORMATS } from "../formats.js"; import { FORMATS } from "../formats.js";
import { buildChunk } from "../helpers/chunkBuilder.js"; import { buildChunk } from "../helpers/chunkBuilder.js";
import { buildUsage } from "../helpers/usageHelper.js";
import { fallbackToolCallId } from "../helpers/toolCallHelper.js"; import { fallbackToolCallId } from "../helpers/toolCallHelper.js";
/** /**
@@ -79,11 +80,8 @@ export function ollamaToOpenAI(chunk, state) {
* Extract usage stats from Ollama response * Extract usage stats from Ollama response
*/ */
function extractUsage(ollamaChunk) { function extractUsage(ollamaChunk) {
return { const inTok = ollamaChunk.prompt_eval_count || 0, outTok = ollamaChunk.eval_count || 0;
prompt_tokens: ollamaChunk.prompt_eval_count || 0, return buildUsage({ promptTokens: inTok, completionTokens: outTok, totalTokens: inTok + outTok });
completion_tokens: ollamaChunk.eval_count || 0,
total_tokens: (ollamaChunk.prompt_eval_count || 0) + (ollamaChunk.eval_count || 0)
};
} }
/** /**