From bcf83e3672c83fa5914fd6aadfc6a0b86ad66473 Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Sat, 28 Feb 2026 22:13:06 +0800 Subject: [PATCH] fix: improve usage parsing and ignore local artifacts --- .gitignore | 8 ++++++++ src/model/client.js | 1 + src/utils/token_usage.js | 13 ++++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8e2d39b --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +node_modules/ +logs/ +.easyagent/ +*.log +1.txt +2.txt +edited_records.txt diff --git a/src/model/client.js b/src/model/client.js index 8fbc71f..3cfc54e 100644 --- a/src/model/client.js +++ b/src/model/client.js @@ -29,6 +29,7 @@ async function* streamChat({ config, modelKey, messages, tools, thinkingMode, cu stream: true, stream_options: { include_usage: true }, }; + payload.include_usage = true; payload.reasoning_split = true; const maxTokens = computeMaxTokens(profile, currentContextTokens); if (maxTokens) payload.max_tokens = maxTokens; diff --git a/src/utils/token_usage.js b/src/utils/token_usage.js index f728d2b..d1cf130 100644 --- a/src/utils/token_usage.js +++ b/src/utils/token_usage.js @@ -25,4 +25,15 @@ function applyUsage(base, usage) { return normalized; } -module.exports = { normalizeTokenUsage, applyUsage }; +function normalizeUsagePayload(usage) { + if (!usage || typeof usage !== 'object') return null; + const toNum = (value) => (Number.isFinite(Number(value)) ? Number(value) : 0); + const prompt = toNum(usage.prompt_tokens ?? usage.input_tokens ?? usage.prompt ?? usage.input); + const completion = toNum(usage.completion_tokens ?? usage.output_tokens ?? usage.completion ?? usage.output); + let total = toNum(usage.total_tokens ?? usage.total); + if (!total && (prompt || completion)) total = prompt + completion; + if (!prompt && !completion && !total) return null; + return { prompt_tokens: prompt, completion_tokens: completion, total_tokens: total }; +} + +module.exports = { normalizeTokenUsage, applyUsage, normalizeUsagePayload };