summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2026-04-04 16:40:28 -0700
committerGitHub <[email protected]>2026-04-04 16:40:28 -0700
commit8b8d4fa066a1de331f6e478ae4055636a9271707 (patch)
tree24a2ea1353ebfa6f9eaacf1ae47e2ae0533ff9b0 /packages
parent6253ef0c27bd9f3f6bcf4ab3e57637b689bbc217 (diff)
downloadopencode-8b8d4fa066a1de331f6e478ae4055636a9271707.tar.gz
opencode-8b8d4fa066a1de331f6e478ae4055636a9271707.zip
test: add regression test for double counting bug (#21053)
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/test/session/compaction.test.ts30
1 files changed, 29 insertions, 1 deletions
diff --git a/packages/opencode/test/session/compaction.test.ts b/packages/opencode/test/session/compaction.test.ts
index 0dac255b1..799bb3e2a 100644
--- a/packages/opencode/test/session/compaction.test.ts
+++ b/packages/opencode/test/session/compaction.test.ts
@@ -1080,7 +1080,7 @@ describe("session.getUsage", () => {
expect(result.tokens.cache.read).toBe(200)
})
- test("handles reasoning tokens", () => {
+ test("separates reasoning tokens from output tokens", () => {
const model = createModel({ context: 100_000, output: 32_000 })
const result = Session.getUsage({
model,
@@ -1092,7 +1092,35 @@ describe("session.getUsage", () => {
},
})
+ expect(result.tokens.input).toBe(1000)
+ expect(result.tokens.output).toBe(400)
expect(result.tokens.reasoning).toBe(100)
+ expect(result.tokens.total).toBe(1500)
+ })
+
+ test("does not double count reasoning tokens in cost", () => {
+ const model = createModel({
+ context: 100_000,
+ output: 32_000,
+ cost: {
+ input: 0,
+ output: 15,
+ cache: { read: 0, write: 0 },
+ },
+ })
+ const result = Session.getUsage({
+ model,
+ usage: {
+ inputTokens: 0,
+ outputTokens: 1_000_000,
+ totalTokens: 1_000_000,
+ reasoningTokens: 250_000,
+ },
+ })
+
+ expect(result.tokens.output).toBe(750_000)
+ expect(result.tokens.reasoning).toBe(250_000)
+ expect(result.cost).toBe(15)
})
test("handles undefined optional values gracefully", () => {