Просмотр исходного кода

fix(opencode): include cache writes in ACP usage (#40450)

Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
opencode-agent[bot] 1 неделя назад
Родитель
Сommit
9f38562237

+ 1 - 1
packages/opencode/src/acp/service.ts

@@ -656,7 +656,7 @@ function makeUsageService(sdk: OpencodeClient) {
           sessionId: params.sessionID,
           update: {
             sessionUpdate: "usage_update",
-            used: message.tokens.input + message.tokens.cache.read,
+            used: UsageService.contextTokens(message),
             size,
             cost: { amount: UsageService.totalSessionCost(messages), currency: "USD" },
           },

+ 5 - 1
packages/opencode/src/acp/usage.ts

@@ -83,6 +83,10 @@ export function messageLoaderFromSDK(sdk: SDK): MessageLoaderInterface {
 
 export const messageLoaderLayer = (sdk: SDK) => Layer.succeed(MessageLoader, messageLoaderFromSDK(sdk))
 
+export function contextTokens(message: AssistantTokenCost): number {
+  return message.tokens.input + message.tokens.cache.read + message.tokens.cache.write
+}
+
 export function buildUsage(message: AssistantTokenCost): Usage {
   const cachedReadTokens = message.tokens.cache.read
   const cachedWriteTokens = message.tokens.cache.write
@@ -207,7 +211,7 @@ const layer = Layer.effect(
             sessionId: input.sessionID,
             update: {
               sessionUpdate: "usage_update",
-              used: message.tokens.input + message.tokens.cache.read,
+              used: contextTokens(message),
               size,
               cost: { amount: totalSessionCost(messages), currency: "USD" },
             },

+ 3 - 3
packages/opencode/test/acp/usage.test.ts

@@ -207,7 +207,7 @@ describe("acp usage", () => {
     )
   })
 
-  it.effect("sends ACP usage_update with context size and cumulative assistant cost", () => {
+  it.effect("includes cache reads and writes in ACP context usage", () => {
     const updates: SessionNotification[] = []
     return Effect.gen(function* () {
       const usage = yield* UsageService.Service
@@ -222,7 +222,7 @@ describe("acp usage", () => {
           sessionId: "ses_1",
           update: {
             sessionUpdate: "usage_update",
-            used: 15,
+            used: 22,
             size: 128_000,
             cost: { amount: 3, currency: "USD" },
           },
@@ -239,7 +239,7 @@ describe("acp usage", () => {
                 input: 10,
                 output: 20,
                 reasoning: 0,
-                cache: { read: 5, write: 0 },
+                cache: { read: 5, write: 7 },
               },
             }),
           ]),