summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-06-16 12:43:22 -0400
committerDax Raad <[email protected]>2025-06-16 12:43:22 -0400
commit06af4061469b584744e4a976999bb7a55885c15d (patch)
tree29d13abfb9aca14f3f91b2e39a72ef56ec67c76d
parent0e3458b112292c35170ca2b8e2f961df58486409 (diff)
downloadopencode-06af4061469b584744e4a976999bb7a55885c15d.tar.gz
opencode-06af4061469b584744e4a976999bb7a55885c15d.zip
properly track cache token counts
-rw-r--r--packages/opencode/src/index.ts3
-rw-r--r--packages/opencode/src/session/index.ts26
-rw-r--r--packages/opencode/src/session/message.ts4
3 files changed, 26 insertions, 7 deletions
diff --git a/packages/opencode/src/index.ts b/packages/opencode/src/index.ts
index 0a82a00a6..45463d40c 100644
--- a/packages/opencode/src/index.ts
+++ b/packages/opencode/src/index.ts
@@ -46,7 +46,8 @@ const cli = yargs(hideBin(process.argv))
process.chdir(cwd)
const result = await App.provide(
{ cwd, version: VERSION },
- async () => {
+ async (app) => {
+ App.info().path.config
const providers = await Provider.list()
if (Object.keys(providers).length === 0) {
return "needs_provider"
diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts
index ed8ee7997..d14164d3f 100644
--- a/packages/opencode/src/session/index.ts
+++ b/packages/opencode/src/session/index.ts
@@ -13,7 +13,7 @@ import {
type LanguageModelUsage,
type CoreMessage,
type UIMessage,
- type LanguageModelV1Middleware,
+ type ProviderMetadata,
} from "ai"
import { z, ZodSchema } from "zod"
import { Decimal } from "decimal.js"
@@ -204,6 +204,8 @@ export namespace Session {
if (previous?.metadata.assistant) {
const tokens =
previous.metadata.assistant.tokens.input +
+ previous.metadata.assistant.tokens.cache.read +
+ previous.metadata.assistant.tokens.cache.write +
previous.metadata.assistant.tokens.output
if (
tokens >
@@ -262,7 +264,7 @@ export namespace Session {
draft.title = result.text
})
})
- .catch((e) => {})
+ .catch(() => {})
}
const msg: Message.Info = {
role: "user",
@@ -299,6 +301,7 @@ export namespace Session {
input: 0,
output: 0,
reasoning: 0,
+ cache: { read: 0, write: 0 },
},
modelID: input.modelID,
providerID: input.providerID,
@@ -413,7 +416,7 @@ export namespace Session {
finishReason: step.finishReason,
})
const assistant = next.metadata!.assistant!
- const usage = getUsage(step.usage, model.info)
+ const usage = getUsage(model.info, step.usage, step.providerMetadata)
assistant.cost += usage.cost
assistant.tokens = usage.tokens
await updateMessage(next)
@@ -428,7 +431,7 @@ export namespace Session {
},
async onFinish(input) {
const assistant = next.metadata!.assistant!
- const usage = getUsage(input.usage, model.info)
+ const usage = getUsage(model.info, input.usage, input.providerMetadata)
assistant.cost = usage.cost
await updateMessage(next)
},
@@ -675,6 +678,7 @@ export namespace Session {
input: 0,
output: 0,
reasoning: 0,
+ cache: { read: 0, write: 0 },
},
},
time: {
@@ -710,7 +714,7 @@ export namespace Session {
text: result.text,
})
const assistant = next.metadata!.assistant!
- const usage = getUsage(result.usage, model.info)
+ const usage = getUsage(model.info, result.usage, result.providerMetadata)
assistant.cost = usage.cost
assistant.tokens = usage.tokens
await updateMessage(next)
@@ -731,11 +735,21 @@ export namespace Session {
}
}
- function getUsage(usage: LanguageModelUsage, model: ModelsDev.Model) {
+ function getUsage(
+ model: ModelsDev.Model,
+ usage: LanguageModelUsage,
+ metadata?: ProviderMetadata,
+ ) {
const tokens = {
input: usage.promptTokens ?? 0,
output: usage.completionTokens ?? 0,
reasoning: 0,
+ cache: {
+ write: (metadata?.["anthropic"]?.["cacheCreationInputTokens"] ??
+ 0) as number,
+ read: (metadata?.["anthropic"]?.["cacheReadInputTokens"] ??
+ 0) as number,
+ },
}
return {
cost: new Decimal(0)
diff --git a/packages/opencode/src/session/message.ts b/packages/opencode/src/session/message.ts
index d73eee548..b4ecc28b6 100644
--- a/packages/opencode/src/session/message.ts
+++ b/packages/opencode/src/session/message.ts
@@ -174,6 +174,10 @@ export namespace Message {
input: z.number(),
output: z.number(),
reasoning: z.number(),
+ cache: z.object({
+ read: z.number(),
+ write: z.number(),
+ }),
}),
})
.optional(),