fix: normalize missing Codex token usage
Treat token_count events without usage as null canonical token values so node:sqlite never receives undefined. Covers issue #1 with a parse-to-persist regression test.
This commit is contained in:
@@ -296,12 +296,21 @@ function parseCodexJsonInput(value: JsonValue): JsonValue {
|
||||
try { return JSON.parse(value); } catch { return value; }
|
||||
}
|
||||
|
||||
function codexUsage(payload: JsonRecord) {
|
||||
interface CodexUsage {
|
||||
inputTokens: number | null;
|
||||
outputTokens: number | null;
|
||||
}
|
||||
|
||||
function codexUsage(payload: JsonRecord): CodexUsage {
|
||||
const usage = payload?.info?.last_token_usage || payload?.info?.total_token_usage || payload?.last_token_usage || null;
|
||||
if (!usage) return {};
|
||||
if (!usage) return { inputTokens: null, outputTokens: null };
|
||||
return {
|
||||
inputTokens: usage.input_tokens ?? null,
|
||||
outputTokens: usage.output_tokens ?? null,
|
||||
inputTokens: typeof usage.input_tokens === 'number' && Number.isFinite(usage.input_tokens)
|
||||
? usage.input_tokens
|
||||
: null,
|
||||
outputTokens: typeof usage.output_tokens === 'number' && Number.isFinite(usage.output_tokens)
|
||||
? usage.output_tokens
|
||||
: null,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -256,9 +256,9 @@ export function* parse(unit: IndexUnit, _cursor: Cursor): Generator<TranscriptRe
|
||||
}
|
||||
if (payload.type === 'token_count') {
|
||||
const usage = codexUsage(payload);
|
||||
if (usage.inputTokens !== null) sm.totalInputTokens = usage.inputTokens;
|
||||
if (usage.outputTokens !== null) sm.totalOutputTokens = usage.outputTokens;
|
||||
if (sm.lastTextAssistantUuid && (usage.inputTokens !== null || usage.outputTokens !== null)) {
|
||||
if (usage.inputTokens != null) sm.totalInputTokens = usage.inputTokens;
|
||||
if (usage.outputTokens != null) sm.totalOutputTokens = usage.outputTokens;
|
||||
if (sm.lastTextAssistantUuid && (usage.inputTokens != null || usage.outputTokens != null)) {
|
||||
const rec = msgByUuid.get(sm.lastTextAssistantUuid);
|
||||
if (rec) { rec.input_tokens = usage.inputTokens; rec.output_tokens = usage.outputTokens; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user