From 91162a6af2089da22ab307088c3c8bb02d418eb9 Mon Sep 17 00:00:00 2001 From: silentoplayz Date: Mon, 27 Jul 2026 18:13:52 -0400 Subject: [PATCH] fix: read context usage tokens with the same key precedence as backend compaction --- src/lib/components/chat/Chat.svelte | 24 +++++++++++++++------ src/lib/components/chat/MessageInput.svelte | 24 +++++++++++++++------ 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 87a40296f6..f1c8ca51b2 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -281,13 +281,25 @@ for (let idx = activeMessages.length - 1; idx >= 0; idx -= 1) { const usage = activeMessages[idx]?.usage ?? activeMessages[idx]?.info?.usage; - const inputTokens = usage?.input_tokens ?? usage?.prompt_tokens; - if (inputTokens) { + const usageTokens = + Number( + usage?.prompt_tokens || + usage?.input_tokens || + usage?.prompt_eval_count || + usage?.prompt_n || + 0 + ) + + Number( + usage?.completion_tokens || + usage?.output_tokens || + usage?.eval_count || + usage?.predicted_n || + 0 + ) + + Number(usage?.cache_n || 0); + if (usageTokens) { hasUsageCheckpoint = true; - estimatedTokens = - Number(inputTokens || 0) + - Number(usage.output_tokens ?? usage.completion_tokens ?? 0) + - estimateMessagesTokens(activeMessages.slice(idx + 1)); + estimatedTokens = usageTokens + estimateMessagesTokens(activeMessages.slice(idx + 1)); break; } } diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index 883bdbad08..4000cd30db 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -444,13 +444,25 @@ for (let idx = activeMessages.length - 1; idx >= 0; idx -= 1) { const usage = activeMessages[idx]?.usage ?? activeMessages[idx]?.info?.usage; - const inputTokens = usage?.input_tokens ?? usage?.prompt_tokens; - if (inputTokens) { + const usageTokens = + Number( + usage?.prompt_tokens || + usage?.input_tokens || + usage?.prompt_eval_count || + usage?.prompt_n || + 0 + ) + + Number( + usage?.completion_tokens || + usage?.output_tokens || + usage?.eval_count || + usage?.predicted_n || + 0 + ) + + Number(usage?.cache_n || 0); + if (usageTokens) { hasUsageCheckpoint = true; - estimatedTokens = - Number(inputTokens || 0) + - Number(usage.output_tokens ?? usage.completion_tokens ?? 0) + - estimateMessagesTokens(activeMessages.slice(idx + 1)); + estimatedTokens = usageTokens + estimateMessagesTokens(activeMessages.slice(idx + 1)); break; } }