Four reproducible vLLM parser failures that return 200 with the wrong tool call Four reproducible parser failures in vLLM 0.26.0, 0.27.1, and 0.28.0 can drop or garble tool calls and reasoning content while still returning HTTP 200, according to the Ingot team's tests on CPU without GPU or weights. Two failures affect the Gemma4 tool parser (a valid call parses to an empty list; a parenthesized call becomes a garbage function name that swallows the next call), and two affect reasoning parsers (Qwen3 routes a plain-text answer into reasoning_content; MiniMax M3 ends reasoning prematurely after reading an example). As of 2026-08-27, one issue is fixed on main but not in any release; the rest remain open. vLLM can drop or garble a tool call and still return 200 Four reproducible parser failures in vLLM 0.26.0, 0.27.1 and 0.28.0, run on CPU with no GPU or weights. As of 2026-08-27 one is fixed on main but not in any release; the rest are open. See Upstream status. Published 2026-08-25. Ingot team. We did not run a live server for this. We pip-installed the upstream vllm package at 0.26.0 and 0.27.1 and, on 2026-08-27, 0.28.0 , imported the tool-call and reasoning parsers on a CPU box no GPU, no model weights , and fed them the reproducer strings from open vLLM issues. Where an issue named a community chat template, we rendered the real template too. Every issue we cite was still open when we pulled it on 2026-08-25. Scripts and raw transcripts are in the ingot-repros repository https://github.com/Ember-Sovereignty/ingot-repros/tree/main/vllm-parser-failures/tool-parser-fsm . This is not a safety certification of any model or framework. What we found: four cases where the model's raw text is fine and the parser hands back HTTP 200 with a null field, an empty array, or a corrupted string. Two are in the Gemma4 tool parser a valid call parses to an empty list; a parenthesized call becomes a garbage function name that also swallows the next call . Two are in reasoning parsers Qwen3 routes a whole plain-text answer into reasoning content ; MiniMax M3 decides reasoning has ended after reading an example in the prompt . There is a fifth, Kimi K3, that we could only reproduce on the streaming lane. Two things surprised us. The Kimi K3 non-streaming path appears repaired on 0.27.1 while the streaming path in the same release still loses the turn, so "what version are you on" is not enough of a question. And MiniMax M3's own stock template, which tells the model to wrap reasoning in