v3.10.54 — No more 'suddenly stops' on reasoning models
🛑→
Reasoning models (Grok, Kimi k3, DeepSeek) sometimes emit only their <thinking> and end the stream — usually truncated on finish_reason="length" — before producing an answer or a tool call. The agent loop treated "no tool calls" as a finished turn and broke silently, so the agent looked like it just… stopped, mid-task, after thinking out loud.
Now a turn with no text AND no tool call is recognized as a stall (not a completion): Dulus nudges the model to continue — call the next tool or give its answer — bounded by a small retry cap so a persistently-empty model can't loop. A turn with real text is still a normal final answer; a token-limit truncation tells the model to wrap up.
pip install -U dulus · PyPI