diff --git a/open-sse/translator/response/commandcode-to-openai.js b/open-sse/translator/response/commandcode-to-openai.js index a11d800d..d46d177e 100644 --- a/open-sse/translator/response/commandcode-to-openai.js +++ b/open-sse/translator/response/commandcode-to-openai.js @@ -18,6 +18,7 @@ import { register } from "../index.js"; import { FORMATS } from "../formats.js"; import { buildChunk } from "../helpers/chunkBuilder.js"; +import { buildUsage } from "../helpers/usageHelper.js"; import { reasoningDelta } from "../helpers/reasoningHelper.js"; import { toOpenAIFinish } from "../concerns/finishReasonMap.js"; @@ -157,11 +158,12 @@ export function convertCommandCodeToOpenAI(chunk, state) { const finalChunk = makeChunk(state, {}, finishReason); const totalUsage = event.totalUsage || state.usage; if (totalUsage) { - finalChunk.usage = { - prompt_tokens: totalUsage.inputTokens ?? 0, - completion_tokens: totalUsage.outputTokens ?? 0, - total_tokens: totalUsage.totalTokens ?? ((totalUsage.inputTokens ?? 0) + (totalUsage.outputTokens ?? 0)), - }; + const inTok = totalUsage.inputTokens ?? 0, outTok = totalUsage.outputTokens ?? 0; + finalChunk.usage = buildUsage({ + promptTokens: inTok, + completionTokens: outTok, + totalTokens: totalUsage.totalTokens ?? (inTok + outTok), + }); } out.push(finalChunk); break; diff --git a/open-sse/translator/response/kiro-to-openai.js b/open-sse/translator/response/kiro-to-openai.js index aeac3520..bcf2be38 100644 --- a/open-sse/translator/response/kiro-to-openai.js +++ b/open-sse/translator/response/kiro-to-openai.js @@ -5,6 +5,7 @@ import { register } from "../index.js"; import { FORMATS } from "../formats.js"; import { buildChunk } from "../helpers/chunkBuilder.js"; +import { buildUsage } from "../helpers/usageHelper.js"; import { fallbackToolCallId } from "../helpers/toolCallHelper.js"; import { reasoningDelta } from "../helpers/reasoningHelper.js"; @@ -143,11 +144,8 @@ export function convertKiroToOpenAI(chunk, state) { if (eventType === "usageEvent" || data.usageEvent) { const usage = data.usageEvent || data; if (usage && typeof usage === 'object') { - state.usage = { - prompt_tokens: usage.inputTokens || 0, - completion_tokens: usage.outputTokens || 0, - total_tokens: (usage.inputTokens || 0) + (usage.outputTokens || 0) - }; + const inTok = usage.inputTokens || 0, outTok = usage.outputTokens || 0; + state.usage = buildUsage({ promptTokens: inTok, completionTokens: outTok, totalTokens: inTok + outTok }); } return null; } diff --git a/open-sse/translator/response/ollama-to-openai.js b/open-sse/translator/response/ollama-to-openai.js index 00b4dcbc..c3e3faeb 100644 --- a/open-sse/translator/response/ollama-to-openai.js +++ b/open-sse/translator/response/ollama-to-openai.js @@ -1,6 +1,7 @@ import { register } from "../index.js"; import { FORMATS } from "../formats.js"; import { buildChunk } from "../helpers/chunkBuilder.js"; +import { buildUsage } from "../helpers/usageHelper.js"; import { fallbackToolCallId } from "../helpers/toolCallHelper.js"; /** @@ -79,11 +80,8 @@ export function ollamaToOpenAI(chunk, state) { * Extract usage stats from Ollama response */ function extractUsage(ollamaChunk) { - return { - prompt_tokens: ollamaChunk.prompt_eval_count || 0, - completion_tokens: ollamaChunk.eval_count || 0, - total_tokens: (ollamaChunk.prompt_eval_count || 0) + (ollamaChunk.eval_count || 0) - }; + const inTok = ollamaChunk.prompt_eval_count || 0, outTok = ollamaChunk.eval_count || 0; + return buildUsage({ promptTokens: inTok, completionTokens: outTok, totalTokens: inTok + outTok }); } /**