-
-
Notifications
You must be signed in to change notification settings - Fork 140
Description
Description
The Gemini image adapter (@tanstack/ai-gemini) always returns usage: undefined in the ImageGenerationResult, even though the Gemini API response includes usageMetadata with token counts.
Current behavior
In packages/typescript/ai-gemini/src/adapters/image.ts#L171, transformGeminiResponse() hardcodes usage: undefined:
return {
id: generateId(this.name),
model,
images,
usage: undefined, // <-- always undefined
}The same happens in transformImagenResponse() at L203.
Expected behavior
The adapter should parse usageMetadata from the Gemini response and return it in the usage field, similar to how the Gemini text/summarize adapters already do.
Example Gemini API response (from gemini-3-pro-image-preview:generateContent):
{
"candidates": [{ "content": { "parts": [{ "inlineData": { "mimeType": "image/jpeg", "data": "..." } }] } }],
"usageMetadata": {
"promptTokenCount": 36,
"candidatesTokenCount": 1211,
"totalTokenCount": 1405,
"promptTokensDetails": [{ "modality": "TEXT", "tokenCount": 36 }],
"candidatesTokensDetails": [{ "modality": "IMAGE", "tokenCount": 1120 }],
"thoughtsTokenCount": 158
}
}The fix would map usageMetadata to the ImageGenerationResult.usage field:
usage: data.usageMetadata
? {
inputTokens: data.usageMetadata.promptTokenCount,
outputTokens: data.usageMetadata.candidatesTokenCount,
totalTokens: data.usageMetadata.totalTokenCount,
}
: undefined,This is consistent with how the OpenAI image adapter already handles usage (ai-openai/src/adapters/image.ts#L109-L115).