fix compression context usage accounting (#924)

This commit is contained in:
ekko
2026-05-22 09:46:50 +08:00
committed by GitHub
parent b5f0215beb
commit c3538a6b44
11 changed files with 454 additions and 61 deletions
+15 -3
View File
@@ -569,14 +569,16 @@ export const useChatStore = defineStore('chat', () => {
compressed: null,
})
} else if (e.event === 'compression.completed') {
const afterTokens = e.contextTokens || e.afterTokens || 0
setCompressionState({
compressing: false,
messageCount: e.totalMessages || 0,
beforeTokens: e.beforeTokens || 0,
afterTokens: e.afterTokens || 0,
afterTokens,
compressed: e.compressed ?? false,
error: e.error,
})
if (e.contextTokens != null) activeSession.value!.contextTokens = e.contextTokens
} else if (e.event === 'abort.started') {
setAbortState({ aborting: true, synced: null })
} else if (e.event === 'abort.completed') {
@@ -1073,14 +1075,19 @@ export const useChatStore = defineStore('chat', () => {
}
case 'compression.completed': {
const afterTokens = (evt as any).contextTokens || (evt as any).afterTokens || 0
setCompressionState({
compressing: false,
messageCount: (evt as any).totalMessages || 0,
beforeTokens: (evt as any).beforeTokens || 0,
afterTokens: (evt as any).afterTokens || 0,
afterTokens,
compressed: (evt as any).compressed ?? false,
error: (evt as any).error,
})
if ((evt as any).contextTokens != null) {
const target = sessions.value.find(s => s.id === sid)
if (target) target.contextTokens = (evt as any).contextTokens
}
// Auto-clear after 5s
setTimeout(() => {
if (compressionState.value && !compressionState.value.compressing) {
@@ -1520,14 +1527,19 @@ export const useChatStore = defineStore('chat', () => {
}
case 'compression.completed': {
const afterTokens = (evt as any).contextTokens || (evt as any).afterTokens || 0
setCompressionState({
compressing: false,
messageCount: (evt as any).totalMessages || 0,
beforeTokens: (evt as any).beforeTokens || 0,
afterTokens: (evt as any).afterTokens || 0,
afterTokens,
compressed: (evt as any).compressed ?? false,
error: (evt as any).error,
})
if ((evt as any).contextTokens != null) {
const target = sessions.value.find(s => s.id === sid)
if (target) target.contextTokens = (evt as any).contextTokens
}
setTimeout(() => {
if (compressionState.value && !compressionState.value.compressing) {
setCompressionState(null)