mirror of
https://github.com/Kilo-Org/kilocode.git
synced 2026-08-28 19:11:03 +08:00
fix(vscode): make cache hit rate write-aware
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user