fix(stream): correct cached input accounting

This commit is contained in:
IfkumRfnl
2026-08-03 05:49:31 +00:00
parent 3f734bc280
commit 69ba0da305
3 changed files with 18 additions and 7 deletions
+4
View File
@@ -1,5 +1,9 @@
# Changelog # Changelog
## 0.4.4 - 2026-08-03
- Fix cached input tokens being counted twice.
## 0.4.3 - 2026-08-02 ## 0.4.3 - 2026-08-02
- Allow pi to start when model discovery is unavailable. The provider now caches the last successfully fetched model catalog so previously discovered Command Code models remain selectable offline; a first offline start without a cache keeps Command Code unavailable until `/reload` succeeds. - Allow pi to start when model discovery is unavailable. The provider now caches the last successfully fetched model catalog so previously discovered Command Code models remain selectable offline; a first offline start without a cache keeps Command Code unavailable until `/reload` succeeds.
+7 -3
View File
@@ -388,10 +388,14 @@ export function createStreamCommandCode(deps: CoreDependencies) {
const usage = commandCodeUsage(event) const usage = commandCodeUsage(event)
if (usage) { if (usage) {
const details = commandCodeInputTokenDetails(usage) const details = commandCodeInputTokenDetails(usage)
output.usage.input = numberValue(usage.inputTokens) ?? 0 const totalInput = numberValue(usage.inputTokens) ?? 0
const input = numberValue(details?.noCacheTokens)
const cacheRead = numberValue(details?.cacheReadTokens) ?? 0
const cacheWrite = numberValue(details?.cacheWriteTokens) ?? 0
output.usage.input = input ?? Math.max(0, totalInput - cacheRead - cacheWrite)
output.usage.output = numberValue(usage.outputTokens) ?? 0 output.usage.output = numberValue(usage.outputTokens) ?? 0
output.usage.cacheRead = numberValue(details?.cacheReadTokens) ?? 0 output.usage.cacheRead = cacheRead
output.usage.cacheWrite = numberValue(details?.cacheWriteTokens) ?? 0 output.usage.cacheWrite = cacheWrite
output.usage.totalTokens = output.usage.totalTokens =
output.usage.input + output.usage.input +
output.usage.output + output.usage.output +
+7 -4
View File
@@ -102,9 +102,9 @@ describe("streamCommandCode — successful streams", () => {
type: "finish", type: "finish",
finishReason: "stop", finishReason: "stop",
totalUsage: { totalUsage: {
inputTokens: 5, inputTokens: 3124,
outputTokens: 2, outputTokens: 15,
inputTokenDetails: { cacheReadTokens: 3, cacheWriteTokens: 1 }, inputTokenDetails: { noCacheTokens: 52, cacheReadTokens: 3072 },
}, },
}), }),
], ],
@@ -134,7 +134,10 @@ describe("streamCommandCode — successful streams", () => {
done.message.content[0]?.type === "text" ? done.message.content[0].text : "", done.message.content[0]?.type === "text" ? done.message.content[0].text : "",
"Hello", "Hello",
) )
assert.equal(done.message.usage.totalTokens, 11) assert.equal(done.message.usage.input, 52)
assert.equal(done.message.usage.cacheRead, 3072)
assert.equal(done.message.usage.cacheWrite, 0)
assert.equal(done.message.usage.totalTokens, 3139)
assert.equal(calculatedUsages.length, 1) assert.equal(calculatedUsages.length, 1)
}) })