-
Stefy Lanza (nextime / spora ) authored
A pod serving Qwen3.8-27B logged, on every single tool-using request, hermes_tool_parser ... json.decoder.JSONDecodeError: Expecting value on text that begins <tool_call> <function=agenda_udienze> <parameter=dal>2026-10-21</parameter> vLLM reads that with `qwen3_xml`; `hermes` expects JSON inside <tool_call> and cannot. Buffered, coderai's own parser rescued the call out of the text, which is why this stayed invisible. STREAMED, vLLM had already consumed those tokens into tool-call deltas it then failed to emit, so the call was simply gone and the stream ended at </think>. A name cannot separate the two syntaxes -- Qwen2.5 and the Hermes-style finetunes genuinely are hermes, and qwen3_xml does not read JSON at all -- so the mapping cannot just be changed. The model's TEMPLATE decides instead: it is the model's own statement of what it emits, and this one says "If you choose to call a function ONLY reply in the following format: <tool_call>\n<function=example_function_name>\n<parameter=...>" with no JSON form anywhere in its 8,952 bytes. Read, not guessed, and never fatal: a repo id is fetched rather than looked up in the cache (on a rented pod nothing is cached the first time), an unreadable template leaves the name table's answer alone, and every failure path returns "" -- a pod that will not launch is worse than one that reads tool calls with the wrong parser. An explicit tool_call_parser still wins, "off" included. Co-Authored-By:
Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S8LAP3ueNzQJtwzhgVbq66
a9e7ed0e