Environment: gemini-3.1-pro-preview via the OpenAI-compatible endpoint (also reproduced via google-genai SDK), Python 3.12.
Behavior: in a two-round tool-calling exchange, round 1 completes correctly … the model issues a clean function_call (finish_reason=STOP). After the function response is appended and the conversation is re-sent, round 2 consistently returns finish_reason=MALFORMED_FUNCTION_CALL with a single empty text part and no function-call payload. No error is raised; the caller receives an empty completion.
Conditions: triggers reliably when the conversation contains large, repetitive-text context (~8-16k tokens) and the function response re-injects a sizable content payload. In our runs it reproduced on 91/99 affected items on one task slice and deterministically on retry. Two structurally different (both spec-conformant) continuation formats hit the identical rejection, which is why we believe the fault is in the model/API rather than the client.
Expected: round 2 either answers as text or issues a well-formed follow-up function call; if the model’s turn is malformed, an error or retry signal rather than a silent empty completion.
Repro: minimal instrumented script (3 items, prints parts/finish_reason/usage per round) available on request.