fix(vscode): make cache hit rate write-aware

This commit is contained in:
marius-kilocode
2026-07-31 16:03:59 +02:00
parent 3af9c50970
commit 84b8b9676a
4 changed files with 16 additions and 8 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"kilo-code": patch
---
Show a write-aware cache hit rate in the VS Code session usage bar.
@@ -1,6 +1,7 @@
import { describe, expect, test } from "bun:test"
import type { Provider, SessionModelUsage } from "../../webview-ui/src/types/messages"
import {
cacheRate,
groupModelUsage,
hasModelUsage,
isSameSessionTree,
@@ -44,6 +45,8 @@ describe("model usage", () => {
}),
).toBeFalse()
expect(tokenSummary(usage)).toEqual({ input: 10, output: 2, cached: 20 })
expect(cacheRate(models[0])).toBe("57.1%")
expect(cacheRate({ ...models[0], tokens: { ...tokens, input: 0, cache: { read: 0, write: 0 } } })).toBe("-")
expect(groupModelUsage(models, providers).map((group) => group.providerName)).toEqual(["Kilo Gateway", "MiniMax"])
expect(modelUsageName(models[0], providers)).toBe("Qwen 3.7 Plus")
expect(modelUsageName(models[1], providers)).toBe("MiniMax M3")
@@ -5,7 +5,7 @@ import { Icon } from "@kilocode/kilo-ui/icon"
import { useLanguage } from "../../context/language"
import { useProvider } from "../../context/provider"
import type { SessionModelUsage } from "../../types/messages"
import { groupModelUsage, modelUsageName, type TokenSummary } from "../../context/model-usage"
import { cacheRate, groupModelUsage, modelUsageName, type TokenSummary } from "../../context/model-usage"
import { formatCompactCount } from "../../utils/format"
interface TaskUsageProps {
@@ -35,12 +35,6 @@ export const TaskUsage: Component<TaskUsageProps> = (props) => {
if (value > 0 && value < 0.000001) return "<$0.000001"
return money().format(value)
}
const rate = (model: SessionModelUsage["models"][number]) => {
const total = model.tokens.input + model.tokens.cache.read
if (total === 0) return "-"
return `${((model.tokens.cache.read / total) * 100).toFixed(1)}%`
}
const Summary = () => (
<>
<span class="task-header-tokens-label">Tokens</span>
@@ -102,7 +96,7 @@ export const TaskUsage: Component<TaskUsageProps> = (props) => {
</div>
<div class="task-header-usage-meta">
Cache R {count(model.tokens.cache.read)} · W {count(model.tokens.cache.write)} · Hit Rate{" "}
{rate(model)}
{cacheRate(model)}
</div>
</div>
)}
@@ -46,6 +46,12 @@ export function tokenSummary(usage: SessionModelUsage): TokenSummary {
}
}
export function cacheRate(model: SessionModelUsage["models"][number]) {
const total = model.tokens.input + model.tokens.cache.read + model.tokens.cache.write
if (total === 0) return "-"
return `${((model.tokens.cache.read / total) * 100).toFixed(1)}%`
}
export function groupModelUsage(models: SessionModelUsage["models"], providers: Record<string, Provider>) {
const groups = new Map<string, { providerID: string; providerName: string; models: SessionModelUsage["models"] }>()
for (const model of models) {