fix: 普通聊天流式模式未捕获 prompt_eval_count 导致趋势图无法区分输入/输出 token

This commit is contained in:
thzxx
2026-04-23 17:04:20 +08:00
parent d3c38977bc
commit 4070f85214
+5 -3
View File
@@ -672,7 +672,7 @@ export async function sendMessage(): Promise<void> {
let assistantContent = ''; let assistantContent = '';
let thinkContent = ''; let thinkContent = '';
let finalStats: { eval_count?: number; total_duration?: number } | null = null; let finalStats: { eval_count?: number; prompt_eval_count?: number; total_duration?: number } | null = null;
let modelName = ''; let modelName = '';
try { try {
@@ -711,9 +711,10 @@ export async function sendMessage(): Promise<void> {
} }
if (chunk.model) modelName = chunk.model; if (chunk.model) modelName = chunk.model;
// 捕获任何包含统计的 chunk(不限于 done) // 捕获任何包含统计的 chunk(不限于 done)
if (chunk.eval_count || chunk.total_duration) { if (chunk.eval_count || chunk.prompt_eval_count || chunk.total_duration) {
finalStats = { finalStats = {
eval_count: chunk.eval_count ?? finalStats?.eval_count, eval_count: chunk.eval_count ?? finalStats?.eval_count,
prompt_eval_count: chunk.prompt_eval_count ?? finalStats?.prompt_eval_count,
total_duration: chunk.total_duration ?? finalStats?.total_duration, total_duration: chunk.total_duration ?? finalStats?.total_duration,
}; };
} }
@@ -722,6 +723,7 @@ export async function sendMessage(): Promise<void> {
// done chunk 优先使用其统计,保留之前的兜底 // done chunk 优先使用其统计,保留之前的兜底
finalStats = { finalStats = {
eval_count: chunk.eval_count ?? finalStats?.eval_count, eval_count: chunk.eval_count ?? finalStats?.eval_count,
prompt_eval_count: chunk.prompt_eval_count ?? finalStats?.prompt_eval_count,
total_duration: chunk.total_duration ?? finalStats?.total_duration, total_duration: chunk.total_duration ?? finalStats?.total_duration,
}; };
} }
@@ -740,7 +742,7 @@ export async function sendMessage(): Promise<void> {
timestamp: Date.now(), timestamp: Date.now(),
...(modelName && { model: modelName }), ...(modelName && { model: modelName }),
...(thinkContent && { think: thinkContent }), ...(thinkContent && { think: thinkContent }),
...(finalStats && { eval_count: finalStats.eval_count, total_duration: finalStats.total_duration }) ...(finalStats && { eval_count: finalStats.eval_count, prompt_eval_count: finalStats.prompt_eval_count, total_duration: finalStats.total_duration })
}; };
state.update(KEYS.CURRENT_SESSION, (session: ChatSession | null) => ({ state.update(KEYS.CURRENT_SESSION, (session: ChatSession | null) => ({
...session, ...session,