OpenClaw 2026.2.6-3
Model: Qwen3-Coder-30B-A3B-Instruct (local IQ3_S.gguf)
Issue: Tool calls execute, but assistant output is often empty
Description:
Was able to get tool-calling to work one time, but the assistant’s response is frequently empty (content: "") even when a tool is clearly invoked.
Examples of commands that previously worked:
- “Use the read tool to read package.json and tell me the version.”
- “Use the write tool to create a test.txt and write short random test text inside.”
In those cases, the tools executed as expected (files were read or created), confirming that tool invocation itself was functioning. However, the assistant output is usually empty or malformed, despite similar prompts and tool definitions.
Modelfile (Ollama GoLang template)
```# -------------------------
Sampling
-------------------------
PARAMETER temperature 0.4
PARAMETER top_p 0.95
PARAMETER top_k 40
PARAMETER repeat_penalty 1.05
PARAMETER stop "<|im_start|>"
PARAMETER stop "<|im_end|>"
PARAMETER stop "<|end|>"
PARAMETER stop "<|endoftext|>"
TEMPLATE """<|im_start|>system<|message|>
You are a helpful assistant.
Always respond concisely and directly.
If tools are provided, call them when appropriate.
Do not include prose outside of JSON or tool_calls channel.
{{- if .Tools }}
<|im_start|>system<|message|>
Tools are available.
Return function calls in this exact JSON format:
{"tool_calls": [{"id": "call_1", "type": "function", "function": {"name": "tool_name", "arguments": "{}"}}]}
Do NOT wrap in XML tags. Output raw JSON only.
{{- end }}
{{- range .Messages }}
{{- if eq .Role "user" }}<|im_start|>user<|message|>{{ .Content }}<|im_end|>
{{- else if eq .Role "assistant" }}<|im_start|>assistant<|message|>{{ .Content }}<|im_end|>
{{- else if eq .Role "tool" }}<|im_start|>user<|message|>Tool result: {{ .Content }}<|im_end|>
{{- end }}
{{- end }}
<|im_start|>assistant<|message|>"""
PARAMETER stop <|im_end|>
PARAMETER stop <|im_start|>