This commit is contained in:
Timothy Jaeryang Baek
2026-08-24 05:40:53 -04:00
parent 16c2a9eda4
commit 978d257214
3 changed files with 34 additions and 13 deletions
+5 -7
View File
@@ -61,7 +61,8 @@
processDetails,
removeAllDetails,
getCodeBlockContents,
displayFileHandler
displayFileHandler,
getUsageTokenCount
} from '$lib/utils';
import { AudioQueue } from '$lib/utils/audio';
import { createTemporaryChatId, isTemporaryChatId } from '$lib/utils/chatId';
@@ -287,13 +288,10 @@
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 = getUsageTokenCount(usage);
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;
}
}
+4 -6
View File
@@ -52,6 +52,7 @@
getCurrentDateTime,
getFormattedDate,
getFormattedTime,
getUsageTokenCount,
getUserPosition,
getUserTimezone,
getWeekday
@@ -482,13 +483,10 @@
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 = getUsageTokenCount(usage);
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;
}
}
+25
View File
@@ -1417,6 +1417,31 @@ export const createMessagesList = (history, messageId) => {
return list.reverse();
};
const toTokenCount = (value: unknown) => {
const parsed = Number(value || 0);
return Number.isFinite(parsed) ? Math.trunc(parsed) : 0;
};
export const getUsageTokenCount = (usage?: Record<string, unknown> | null) => {
if (!usage) {
return 0;
}
let promptTokens = toTokenCount(usage.prompt_tokens || usage.prompt_eval_count || 0);
if (!promptTokens && (usage.prompt_n != null || usage.cache_n != null)) {
promptTokens = toTokenCount(usage.prompt_n || 0) + toTokenCount(usage.cache_n || 0);
}
if (!promptTokens) {
promptTokens = toTokenCount(usage.input_tokens || 0);
}
const completionTokens = toTokenCount(
usage.completion_tokens || usage.output_tokens || usage.eval_count || usage.predicted_n || 0
);
return promptTokens + completionTokens;
};
export const formatFileSize = (size) => {
if (size == null) return 'Unknown size';
if (typeof size !== 'number' || size < 0) return 'Invalid size';