Skip to content

fix(provider/google): include usageMetadata in providerMetadata for non-streaming generate#16460

Open
R-Taneja wants to merge 1 commit into
release-v5.0from
r-taneja/google-usagemetadata-generate-v5
Open

fix(provider/google): include usageMetadata in providerMetadata for non-streaming generate#16460
R-Taneja wants to merge 1 commit into
release-v5.0from
r-taneja/google-usagemetadata-generate-v5

Conversation

@R-Taneja

@R-Taneja R-Taneja commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

TODO:

  • Test

Background

doStream attaches usageMetadata (including promptTokensDetails) to providerMetadata.google, and v6/v7 do so in both generate and stream. But on the v5 line, doGenerate omitted it — so non-streaming consumers got no per-modality token breakdown in providerMetadata.

This matters because LanguageModelV2Usage has no raw field (unlike v3/v4), so providerMetadata.google.usageMetadata is the only place a consumer can recover promptTokensDetails for a non-streaming v5 request. The result was that per-modality usage (e.g. audio vs text input tokens, which Gemini prices differently) was unavailable for generateText calls.

Change

Mirror the streaming path: add usageMetadata: usageMetadata ?? null to doGenerate's providerMetadata.google block. The usageMetadata variable is already in scope. This brings v5 doGenerate in line with its own doStream and with v6/v7.

Testing

  • New unit test asserting doGenerate exposes usageMetadata (incl. promptTokensDetails) in providerMetadata.
  • Full google-generative-ai-language-model.test.ts passes (100 tests); no snapshot changes (existing tests assert specific providerMetadata.google fields rather than the whole object).

…on-streaming generate

doStream attaches usageMetadata (incl. promptTokensDetails) to
providerMetadata.google, and v6/v7 do so in both generate and stream, but v5's
doGenerate omitted it. This left non-streaming consumers without the
per-modality token breakdown. Mirror the streaming path so generate is
consistent.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant