gemini-3-pro-image sometimes returns multiple full-image outputs for one call (up to 7+), all billed

I’m seeing gemini-3-pro-image sometimes generate and bill for multiple full images on a single call, instead of one.

Discovered this today — already lost around $40 in unexpected charges from this on a single day of production traffic.

Same prompt/config, repeated calls in one session: 1,714 tokens → 4,303 tokens → 19,606 tokens (screenshots attached), with the output image looking nearly identical each time.

Via the API (POST /v1beta/interactions), I confirmed this directly in the response structure: one call returned 7 separate model_output steps (each a full generated image), with usage.output_tokens_by_modality.image = 7840 (= 7 x 1120, the standard per-image cost). A near-identical call minutes later returned the expected 1 step (1120 tokens). This is not the documented “up to 2 thinking drafts” behavior — those show up as separate thought-type steps with no image data, not as model_output.

Also reproduced on gemini-3.1-flash-image (2 model_output steps, 2240 tokens) and on the legacy generateContent endpoint before migrating (up to 10 inlineData parts in one response). So this isn’t specific to Interactions API or one model.

Raw responses for both cases attached below (anomalous 7-step call vs normal 1-step call, same request config, base64 image data and thought signatures truncated, all other fields unmodified).

Screenshots of the AI Studio token progression attached.

{
  "status": "completed",
  "usage": {
    "total_tokens": 9806,
    "total_input_tokens": 417,
    "input_tokens_by_modality": [
      { "modality": "text", "tokens": 159 },
      { "modality": "image", "tokens": 258 }
    ],
    "total_cached_tokens": 0,
    "total_output_tokens": 9121,
    "output_tokens_by_modality": [
      { "modality": "image", "tokens": 7840 }
    ],
    "total_tool_use_tokens": 0,
    "total_thought_tokens": 268
  },
  "created": "2026-07-03T19:43:07Z",
  "updated": "2026-07-03T19:43:07Z",
  "service_tier": "standard",
  "steps": [
    { "type": "thought", "signature": "[TRUNCATED, original length ~1096000 base64 chars]" },
    { "type": "model_output", "content": [ { "type": "image", "mime_type": "image/jpeg", "data": "[TRUNCATED, decoded image size = 3256268 bytes]" } ] },
    { "type": "thought", "signature": "[TRUNCATED]" },
    { "type": "model_output", "content": [ { "type": "image", "mime_type": "image/jpeg", "data": "[TRUNCATED, decoded image size = 3317472 bytes]" } ] },
    { "type": "thought", "signature": "[TRUNCATED]" },
    { "type": "model_output", "content": [ { "type": "image", "mime_type": "image/jpeg", "data": "[TRUNCATED, decoded image size = 3327380 bytes]" } ] },
    { "type": "thought", "signature": "[TRUNCATED]" },
    { "type": "model_output", "content": [ { "type": "image", "mime_type": "image/jpeg", "data": "[TRUNCATED, decoded image size = 3300876 bytes]" } ] },
    { "type": "thought", "signature": "[TRUNCATED]" },
    { "type": "model_output", "content": [ { "type": "image", "mime_type": "image/jpeg", "data": "[TRUNCATED, decoded image size = 3180524 bytes]" } ] },
    { "type": "thought", "signature": "[TRUNCATED]" },
    { "type": "model_output", "content": [ { "type": "image", "mime_type": "image/jpeg", "data": "[TRUNCATED, decoded image size = 3265000 bytes]" } ] },
    { "type": "thought", "signature": "[TRUNCATED]" },
    { "type": "model_output", "content": [ { "type": "image", "mime_type": "image/jpeg", "data": "[TRUNCATED, decoded image size = 3200420 bytes]" } ] }
  ],
  "object": "interaction",
  "model": "gemini-3-pro-image"
}
{
  "status": "completed",
  "usage": {
    "total_tokens": 1964,
    "total_input_tokens": 417,
    "input_tokens_by_modality": [
      { "modality": "text", "tokens": 159 },
      { "modality": "image", "tokens": 258 }
    ],
    "total_cached_tokens": 0,
    "total_output_tokens": 1294,
    "output_tokens_by_modality": [
      { "modality": "image", "tokens": 1120 }
    ],
    "total_tool_use_tokens": 0,
    "total_thought_tokens": 253
  },
  "created": "2026-07-03T19:43:43Z",
  "updated": "2026-07-03T19:43:43Z",
  "service_tier": "standard",
  "steps": [
    { "type": "thought", "signature": "[TRUNCATED, original length ~1096000 base64 chars]" },
    { "type": "model_output", "content": [ { "type": "image", "mime_type": "image/jpeg", "data": "[TRUNCATED, decoded image size = 3158140 bytes]" } ] }
  ],
  "object": "interaction",
  "model": "gemini-3-pro-image"
}