From 6d744f02ef7ac0c07e3853b5c63a935da02fdf80 Mon Sep 17 00:00:00 2001 From: sparkleMing <38350996+sparkleMing@users.noreply.github.com> Date: Thu, 26 Mar 2026 05:02:28 +0800 Subject: [PATCH] fix: subtract cached tokens from input in Google and Vertex cost calculation (#2588) Google's promptTokenCount includes cachedContentTokenCount, so using it directly as the input token count causes double-counting when calculateCost multiplies input by the input rate AND cacheRead by the cacheRead rate. The google-gemini-cli provider already handles this correctly (subtracting cachedContentTokenCount from promptTokenCount), but google.ts and google-vertex.ts were using the raw promptTokenCount. This fix aligns both providers with the google-gemini-cli behavior. --- packages/ai/src/providers/google-vertex.ts | 2 +- packages/ai/src/providers/google.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ai/src/providers/google-vertex.ts b/packages/ai/src/providers/google-vertex.ts index b2faa865..91a4616c 100644 --- a/packages/ai/src/providers/google-vertex.ts +++ b/packages/ai/src/providers/google-vertex.ts @@ -225,7 +225,7 @@ export const streamGoogleVertex: StreamFunction<"google-vertex", GoogleVertexOpt if (chunk.usageMetadata) { output.usage = { - input: chunk.usageMetadata.promptTokenCount || 0, + input: (chunk.usageMetadata.promptTokenCount || 0) - (chunk.usageMetadata.cachedContentTokenCount || 0), output: (chunk.usageMetadata.candidatesTokenCount || 0) + (chunk.usageMetadata.thoughtsTokenCount || 0), cacheRead: chunk.usageMetadata.cachedContentTokenCount || 0, diff --git a/packages/ai/src/providers/google.ts b/packages/ai/src/providers/google.ts index 5a1242fd..a37293f1 100644 --- a/packages/ai/src/providers/google.ts +++ b/packages/ai/src/providers/google.ts @@ -211,7 +211,7 @@ export const streamGoogle: StreamFunction<"google-generative-ai", GoogleOptions> if (chunk.usageMetadata) { output.usage = { - input: chunk.usageMetadata.promptTokenCount || 0, + input: (chunk.usageMetadata.promptTokenCount || 0) - (chunk.usageMetadata.cachedContentTokenCount || 0), output: (chunk.usageMetadata.candidatesTokenCount || 0) + (chunk.usageMetadata.thoughtsTokenCount || 0), cacheRead: chunk.usageMetadata.cachedContentTokenCount || 0,