Summary
Since the morning of 2026-09-22 (starting 02:21 UTC), tool calling on deepseek-v4.1-flash has regressed: the model no longer returns the standard tool_calls field. Instead, DeepSeek's internal DSML tool-call markup is emitted as plain text inside content, making it unparseable for any agent client that relies on standard tool_calls.
Environment
Client: pi-coding-agent (0.86.1 / 0.87.0 — behavior identical on both, ruling out a client regression)
Model: deepseek-v4.1-flash
API: OpenAI-compatible endpoint, with tools defined in the request body
Affected window: 2026-09-22 10:21 – 10:56 (UTC+8), for server-side log lookup
Expected Behavior
{
"choices": [{
"message": {
"content": null,
"tool_calls": [{
"id": "...",
"type": "function",
"function": { "name": "read", "arguments": "{"path": "..."}" }
}]
}
}]
}
Actual Behavior
I'll run a grilling session. First, let me read the skill and gather the facts.
<||DSML|| calls>
<||DSML|| invoke name="read">
<||DSML|| parameter name="path" string="true">/Users/xiaodi/.agents/skills/grill-me/SKILL.md</||DSML|| parameter>
</||DSML|| invoke>
</||DSML|| calls>
Steps to reproduce the issue
Time | Status
-- | --
Sep 16 – 21 | Tool calling fully normal — ~420 responses with parsed tool_calls, zero anomalies
Sep 22, 10:21 onward | Identical requests start returning the leaked format; 100% reproducible across retries
Sep 22, 10:49 | Client upgraded to 0.87.0 — no change, ruling out a client regression
Sep 22, 11:00 | Switching to glm-5.3-flash restores normal tool calling — issue specific to deepseek-family models
Command Code Version
go sub
Operating System
macOS
Terminal/IDE
No response
Shell
No response
Session file (optional)
No response
Fix prompt (optional)
No response
Additional context
No response
Summary
Since the morning of 2026-09-22 (starting 02:21 UTC), tool calling on deepseek-v4.1-flash has regressed: the model no longer returns the standard tool_calls field. Instead, DeepSeek's internal DSML tool-call markup is emitted as plain text inside content, making it unparseable for any agent client that relies on standard tool_calls.
Environment
Client: pi-coding-agent (0.86.1 / 0.87.0 — behavior identical on both, ruling out a client regression)
Model: deepseek-v4.1-flash
API: OpenAI-compatible endpoint, with tools defined in the request body
Affected window: 2026-09-22 10:21 – 10:56 (UTC+8), for server-side log lookup
Expected Behavior
{
"choices": [{
"message": {
"content": null,
"tool_calls": [{
"id": "...",
"type": "function",
"function": { "name": "read", "arguments": "{"path": "..."}" }
}]
}
}]
}
Actual Behavior
I'll run a grilling session. First, let me read the skill and gather the facts.
<||DSML|| calls>
<||DSML|| invoke name="read">
<||DSML|| parameter name="path" string="true">/Users/xiaodi/.agents/skills/grill-me/SKILL.md</||DSML|| parameter>
</||DSML|| invoke>
</||DSML|| calls>
Steps to reproduce the issue
Time | Status -- | -- Sep 16 – 21 | Tool calling fully normal — ~420 responses with parsed tool_calls, zero anomalies Sep 22, 10:21 onward | Identical requests start returning the leaked format; 100% reproducible across retries Sep 22, 10:49 | Client upgraded to 0.87.0 — no change, ruling out a client regression Sep 22, 11:00 | Switching to glm-5.3-flash restores normal tool calling — issue specific to deepseek-family modelsCommand Code Version
go sub
Operating System
macOS
Terminal/IDE
No response
Shell
No response
Session file (optional)
No response
Fix prompt (optional)
No response
Additional context
No response