From a5b626b3d54bd37a49dc682d9d7d46c9348b7638 Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Fri, 19 Jun 2026 01:56:56 -0700 Subject: [PATCH] fix(qwen3.5-122b): enable tool-calling (--enable-auto-tool-choice --tool-call-parser qwen3_xml) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gen/gen-reasoning tool-calling 400'd (operator + brokkr's capability battery both caught it): the bjk110 serve command shipped --reasoning-parser qwen3 but no tool flags. Qwen3.5 emits XML tool calls (V), NOT Hermes JSON — so `hermes` mis-parsed to raw text; `qwen3_xml` is the correct parser. Reasoning + tools coexist (gen-reasoning keeps its thinking split). Verified live: a get_weather request returns tool_calls=[get_weather {"city":"Paris"}]. --- stacks/qwen3.5-122b/compose.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/stacks/qwen3.5-122b/compose.yaml b/stacks/qwen3.5-122b/compose.yaml index a414c6b..ba77ebc 100644 --- a/stacks/qwen3.5-122b/compose.yaml +++ b/stacks/qwen3.5-122b/compose.yaml @@ -40,7 +40,11 @@ services: - MAX_NUM_BATCHED_TOKENS=${QWEN35_MAX_NUM_BATCHED_TOKENS:-32768} # --reasoning-parser qwen3 surfaces … as reasoning_content; # the thinking on/off itself is per-request (litellm chat_template_kwargs). - - VLLM_EXTRA_ARGS=--reasoning-parser qwen3 --enable-chunked-prefill + # --enable-auto-tool-choice + --tool-call-parser: Qwen3.5 emits XML tool calls + # V + # (NOT Hermes JSON), so the parser is qwen3_xml. Without these flags vLLM never + # parses tool calls (tool-calling is broken). The bjk110 repo command omitted them. + - VLLM_EXTRA_ARGS=--reasoning-parser qwen3 --enable-chunked-prefill --enable-auto-tool-choice --tool-call-parser qwen3_xml - NVIDIA_VISIBLE_DEVICES=0 - PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True - VLLM_API_KEY=${API_KEY:-}