<|tool_call_start|> and <|tool_call_end|> The biggest problem with this model.

#18
by koloved - opened

About 50% of my tool calls end with output <|tool_call_start|> and <|tool_call_end|>

I don't even know what to do with this. I'm using the official Jin template.

When it happens
Non-deterministic / context-dependent: the same prompt usually yields a clean text answer, but after several tool-call rounds in the conversation history (β‰ˆ5+), the model "gets stuck" in tool-calling mode and emits one more tool call instead of the final text answer β€” even when that round has no tools available.
The chat template is not the cause: it only renders tool_calls that already exist in the assistant history; the stray pair above is generated by the model itself.
Native tool calling works correctly when tools are passed: the server returns structured tool_calls with finish_reason: "tool_calls".
What would help
Is there a reliable way to force a text-only answer (a stop sequence, a system instruction, or a special token) so the model stops emitting tool calls once no tools are available?
Does the model have a known failure mode at low quantization (Q6_K) with tool-calling under --reasoning? Is a higher-precision checkpoint or a different reasoning setting expected to mitigate it?
Would you recommend a dedicated "final answer" prompt/template for rounds where tools must not be called?

Liquid AI org

Thanks for the report. One clarifying question: is there anything between the two tokens (a function name and arguments), or is it literally just the empty pair? Also could you share some conversations when this happens?

I get this behavior from time to time in Pi coding agent. It is hard to replicate.

Sign up or log in to comment