vLLM returns 400 error for tool_choice="auto" when called from OpenClaw (Qwen3.5-35B on NVIDIA Spark GB10)

Title:
vLLM returns 400 error for tool_choice="auto" when called from OpenClaw (Qwen3.5-35B on NVIDIA Spark GB10) [vLLM][Tool Calling]


Hello everyone,

I hope you are doing well. I am currently experimenting with running a local LLM inference server on an NVIDIA Spark GB10 using vLLM and Qwen3.5-35B. I encountered an issue related to tool calling when the model is accessed from OpenClaw, and I would really appreciate any guidance from the community.


System Environment

Hardware

  • System: NVIDIA Spark GB10

  • GPU Memory: 128GB

  • Storage: 4TB SSD

Model Server

  • Framework: vLLM

  • Docker Image: vllm/vllm-openai:latest

  • Model: Qwen/Qwen3.5-35B-A3B

  • API Mode: OpenAI-compatible API

Client

  • OpenClaw (running on a separate machine)

Network Topology

OpenClaw Client  --->  vLLM Server (Spark GB10)
                      Port 8000


vLLM Deployment Command

docker run -d \
--name vllm-qwen35b \
--gpus all \
--ipc=host \
-p 8000:8000 \
-e OMP_NUM_THREADS=16 \
-e VLLM_WORKER_MULTIPROC_METHOD=spawn \
-v ~/.cache/huggingface:/root/.cache/huggingface \
vllm/vllm-openai:latest \
Qwen/Qwen3.5-35B-A3B \
--served-model-name qwen35b \
--host 0.0.0.0 \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.85 \
--max-model-len 8192 \
--max-num-seqs 256 \
--max-num-batched-tokens 32768 \
--block-size 16 \
--enable-chunked-prefill \
--disable-log-stats \
--enable-auto-tool-choice \
--tool-call-parser hermes


Verification

The vLLM server starts normally. Example log excerpt:

version 0.17.0
model Qwen/Qwen3.5-35B-A3B

enable_auto_tool_choice: True
tool_call_parser: hermes
max_model_len: 8192

Basic API test works:

GET /v1/models

returns:

{
 "data":[
   {"id":"qwen35b"}
 ]
}


Problem

When OpenClaw sends a request with tool_choice="auto" to the vLLM server, the following error occurs:

run error: 400 "auto" tool choice requires --enable-auto-tool-choice and --tool-call-parser to be set
connected | error
agent main | session main (openclaw-tui) | vllm/qwen35b | tokens ?/16k

However, both parameters are already set in the startup command:

--enable-auto-tool-choice
--tool-call-parser hermes


Expected Behavior

The server should accept requests with:

tool_choice = "auto"

and allow tool calling through the OpenAI-compatible API.


Actual Behavior

The server returns HTTP 400 with the message:

"auto" tool choice requires --enable-auto-tool-choice and --tool-call-parser to be set

even though both parameters are enabled.


Questions

  1. Is hermes the correct --tool-call-parser for Qwen3.5 models in vLLM?

  2. Should another parser (for example qwen3_xml or openai) be used instead?

  3. Could the issue be caused by request formatting differences from OpenClaw?


Additional Information

If needed, I can also provide:

  • The exact HTTP request payload sent by OpenClaw

  • Full vLLM logs

  • Docker environment details

  • GPU utilization information

Thank you very much for your time and assistance.

Additional info for context:

  • vLLM version: 0.17.0
  • Model: Qwen3.5-35B-A3B
  • Hardware: NVIDIA Spark GB10, 128GB GPU memory
  • Docker deployment works; /v1/models endpoint returns correctly
  • The 400 error only occurs when OpenClaw sends requests with “tool_choice”: “auto”
  • Minimal test request to reproduce:

curl -X POST http://<VLLM_IP>:8000/v1/chat/completions
-H “Content-Type: application/json”
-d ‘{
“model”: “qwen35b”,
“messages”: [{“role”: “user”, “content”: “Hello”}],
“tool_choice”: “auto”
}’

Error received:
400 “auto tool choice requires --enable-auto-tool-choice and --tool-call-parser to be set”

The example on HuggingFace uses --tool-call-parser qwen3_coder:

Tool Call: To support tool use, you can use the following command.

vllm serve Qwen/Qwen3.5-35B-A3B --port 8000 --tensor-parallel-size 8 --max-model-len 262144 --reasoning-parser qwen3 --enable-auto-tool-choice --tool-call-parser qwen3_coder