Explorar o código

fix: correct cache cost for OpenRouter and other OpenAI-compatible providers (#4256)

Ivan hai 3 meses
pai
achega
c8bda598f5
Modificáronse 1 ficheiros con 8 adicións e 2 borrados
  1. 8 2
      packages/opencode/src/session/index.ts

+ 8 - 2
packages/opencode/src/session/index.ts

@@ -378,8 +378,14 @@ export namespace Session {
       metadata: z.custom<ProviderMetadata>().optional(),
       metadata: z.custom<ProviderMetadata>().optional(),
     }),
     }),
     (input) => {
     (input) => {
+      const cachedInputTokens = input.usage.cachedInputTokens ?? 0
+      const excludesCachedTokens = !!(input.metadata?.["anthropic"] || input.metadata?.["bedrock"])
+      const adjustedInputTokens = excludesCachedTokens
+        ? (input.usage.inputTokens ?? 0)
+        : (input.usage.inputTokens ?? 0) - cachedInputTokens
+
       const tokens = {
       const tokens = {
-        input: input.usage.inputTokens ?? 0,
+        input: adjustedInputTokens,
         output: input.usage.outputTokens ?? 0,
         output: input.usage.outputTokens ?? 0,
         reasoning: input.usage?.reasoningTokens ?? 0,
         reasoning: input.usage?.reasoningTokens ?? 0,
         cache: {
         cache: {
@@ -387,7 +393,7 @@ export namespace Session {
             // @ts-expect-error
             // @ts-expect-error
             input.metadata?.["bedrock"]?.["usage"]?.["cacheWriteInputTokens"] ??
             input.metadata?.["bedrock"]?.["usage"]?.["cacheWriteInputTokens"] ??
             0) as number,
             0) as number,
-          read: input.usage.cachedInputTokens ?? 0,
+          read: cachedInputTokens,
         },
         },
       }
       }
       return {
       return {