mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-05-31 09:25:32 +08:00
fix: refine token usage reporting (#807)
This commit is contained in:
@@ -23,6 +23,34 @@ import { createNormalizedMessage } from './shared/utils.js';
|
||||
// Track active sessions
|
||||
const activeCodexSessions = new Map();
|
||||
|
||||
function readUsageNumber(value) {
|
||||
const parsed = Number(value);
|
||||
return Number.isFinite(parsed) ? parsed : 0;
|
||||
}
|
||||
|
||||
function extractCodexTokenBudget(event) {
|
||||
const info = event?.info || event?.payload?.info || event?.usage?.info;
|
||||
const usage = info?.total_token_usage || event?.usage?.total_token_usage || event?.usage;
|
||||
if (!usage || typeof usage !== 'object') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const inputTokens = readUsageNumber(usage.input_tokens);
|
||||
const outputTokens = readUsageNumber(usage.output_tokens);
|
||||
const used = readUsageNumber(usage.total_tokens) || inputTokens + outputTokens;
|
||||
|
||||
return {
|
||||
used,
|
||||
total: readUsageNumber(info?.model_context_window || event?.usage?.model_context_window) || 200000,
|
||||
inputTokens,
|
||||
outputTokens,
|
||||
breakdown: {
|
||||
input: inputTokens,
|
||||
output: outputTokens,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform Codex SDK event to WebSocket message format
|
||||
* @param {object} event - SDK event
|
||||
@@ -316,9 +344,11 @@ export async function queryCodex(command, options = {}, ws) {
|
||||
}
|
||||
|
||||
// Extract and send token usage if available (normalized to match Claude format)
|
||||
if (event.type === 'turn.completed' && event.usage) {
|
||||
const totalTokens = (event.usage.input_tokens || 0) + (event.usage.output_tokens || 0);
|
||||
sendMessage(ws, createNormalizedMessage({ kind: 'status', text: 'token_budget', tokenBudget: { used: totalTokens, total: 200000 }, sessionId: capturedSessionId || sessionId || null, provider: 'codex' }));
|
||||
if (event.type === 'turn.completed') {
|
||||
const tokenBudget = extractCodexTokenBudget(event);
|
||||
if (tokenBudget) {
|
||||
sendMessage(ws, createNormalizedMessage({ kind: 'status', text: 'token_budget', tokenBudget, sessionId: capturedSessionId || sessionId || null, provider: 'codex' }));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user