@tardy blaze
Description:
Bug Report: Qwen3-Coder Missing Function Names in Streaming Tool Calls
Date: 2026-01-12
Reporter: DevMate Investigation
Severity: Critical
Component: qwen/qwen3-coder via OpenRouter
Executive Summary
qwen/qwen3-coder via OpenRouter drops function names from tool_calls in streaming mode approximately 22% of the time. The model correctly signals intent to call a tool (finish_reason: "tool_calls") but the function.name field is null/empty, making the tool call unusable.
Non-streaming mode works 100% correctly.
Impact: Applications using streaming mode with Qwen3-Coder will experience ~22% tool call failure rate, causing agent workflows to break unpredictably.
Environment
| Component | Value |
|---|---|
| Model | qwen/qwen3-coder |
| API | OpenRouter (https://openrouter.ai/api/v1) |
| Test Date | 2026-01-12 |
| Client | Direct HTTP (httpx) |
Bug Description
When making streaming requests (`st
What I've Tried:
-
Direct API Testing - Same battery of tests as GLM investigation
- Streaming vs non-streaming comparison
- Various prompt styles
- Multiple iterations to establish failure rate
-
Capture Raw Responses - Get full chunk data from failures
-
Compare with GLM-4.7 - GLM worked fine, what's different?
Error Messages:
In streaming mode, the model emits:
- `finish_reason: "tool_calls"` ✓
- `tool_calls` array with valid ID ✓
- `function.arguments` with valid JSON ✓
- `function.name` is **null/empty** ✗
Example failed response:
```json
{
"tool_calls": [{
"id": "call_a9425bc04bee4dc1967c6fed",
"type": "function",
"function": {
"name": null, // <-- BUG: Missing function name!
"arguments": "{}"
}
}]
}
**API/Model:** qwen/qwen-3-coder