You asked Gemini CLI to look at an image, ReadFile read the .png successfully and, on the next turn, you got a 400 INVALID_ARGUMENT with the message Requests ending with a model turn are not supported. From then on, every call in the same session fails the same way. In version 0.66.0 (the npm latest as of November 4, 2026), the confirmed cause is a model name check that doesn't recognize dotted IDs such as gemini-3.8-flash. Leave the session with /clear and pick one of the three workarounds below.
What does the "Requests ending with a model turn are not supported" error look like?
It's three lines, in this order, right after reading an image. The report in issue google-gemini/gemini-cli #30074 shows exactly this:
✓ ReadFile Screenshot (209).png → Read image file: Screenshot (209).png
[System: You successfully executed a tool but returned an empty response. Please analyze the tool output and explain your progress or final answer.]
✕ [API Error: [{
"error": {
"code": 400,
"message": "Requests ending with a model turn are not supported.",
...
"status": "INVALID_ARGUMENT"
}
}]]
The middle line, starting with [System: You successfully executed a tool but returned an empty response, tells you the model answered with nothing after the read. If it shows up before the 400, this is your case.
Why does Gemini CLI break when reading an image?
Because in 0.66.0 the image doesn't reach the model inside the tool response. The supportsMultimodalFunctionResponse function, in packages/core/src/config/models.ts, decides that with model.startsWith('gemini-3-'). Dotted IDs fail that check, so the image is sent as a loose sibling part next to the functionResponse instead of nested in it. The description of PR #29982, which fixes this, explains the mechanism.
Without the image, the model returns an empty response, the CLI injects the empty response nudge, and the history sent to the API ends on a model turn. The API rejects that shape with the 400. That last chain of events is the analysis from contributors on issue #30074, not an official statement from Google.
| Model ID in the session | Passes startsWith('gemini-3-')? | Affected in 0.66.0 |
|---|---|---|
gemini-3-pro-preview | yes | no |
gemini-3-flash-preview | yes | no |
gemini-3.1-pro-preview | no | yes |
gemini-3.1-flash-lite | no | yes |
gemini-3.5-flash | no | yes |
gemini-3.5-flash-lite | no | yes |
gemini-3.8-flash | no | yes |
How do I get out of the stuck session?
Run /clear. According to the commands reference, it clears the conversation context and starts a new session. Retrying in the same session doesn't help: the history already ends on the wrong turn and every new call repeats the 400.
/clear
Before asking for the image again, apply one of the workarounds below. Otherwise the next image read locks up the new session the same way.
How do I make read_file work with images in 0.66.0?
Turn on dynamic model configuration. With it enabled, the same function skips the prefix check and reads the model definition instead, and in 0.66.0 every Gemini 3 model in the table above ships with multimodalToolUse: true in defaultModelConfigs.ts. Edit ~/.gemini/settings.json:
{
"experimental": {
"dynamicModelConfiguration": true
}
}
The configuration docs mark the key as Requires restart: Yes, so close and reopen the CLI. It's an experimental option that also changes how model definitions and resolutions are read. If anything looks off in /model, set it back to false.
Can I send the image without going through the tool?
Yes, with @ in the prompt itself. @path uses read_many_files under the hood and inserts the content into your message, not into a tool response, so the functionResponse problem doesn't happen.
@docs/login-screen.png the sign in button is misaligned, what changed in the CSS?
Two caveats, both in the 0.66.0 code. An image is only included if you name the file or its extension: with just @docs/, it is skipped with the reason asset file (image/pdf/audio) was not explicitly requested by name or extension. And spaces in the path need a backslash, as in @screen\ captures/login.png.
Which Gemini CLI version already has the fix?
Only nightly, for now. PR #29982 landed on main on October 28, 2026, one day after 0.66.0. We checked the file in each npm channel:
| npm channel (Nov 4, 2026) | Version | Has the fix? |
|---|---|---|
latest | 0.66.0 | no |
preview | 0.67.0-preview.0 | no |
nightly | 0.67.0-nightly.20261104 | yes (since the Oct 30 nightly) |
npm install -g @google/gemini-cli@nightly
Nightly is a daily build and can bring other problems. To go back to stable, run npm install -g @google/gemini-cli@latest. Issue #30074 is still open: a contributor pointed to a second spot, the order of ensureTerminalUserTurn() and stripToolCallIdPrefixes() in geminiChat.ts, which can still leave the history ending on a model turn. If the error comes back even on nightly, @path remains the safest workaround.
If you want a coding agent in the terminal without counting tokens on every retry, Verboo Code gives you unlimited tokens.



