Reporter: rabih@ultratms.com (via /eval-models routing review W23)
First observed: 2026-W22 + 2026-W23 — 2 consecutive weeks
Severity: medium-high (model is in 3 picks-table rows; swap already applied this week)
Likely venue: OpenRouter issue tracker, NOT PAL — but capturing here because it surfaced through PAL eval flow
TL;DR
Calls to qwen/qwen-2.5-coder-32b-instruct via OpenRouter exhibit two related anomalies:
- Premature truncation under codereview-style prompts. Output ends mid-token with
finish_reason: null AND native_finish_reason: null. 2 consecutive weekly runs (W22: 57 tokens, 1/6 issues; W23: 97 tokens, 1/6 issues). Same fixture both weeks.
- All-null OR
/v1/generation/{id} response under precommit-style prompts. PAL response contains valid 456-token content with 4/6 issues identified; OpenRouter's API for the same gen-id returns {"model": null, "tokens_prompt": null, "tokens_completion": null, "total_cost": null, "generation_time": null, "finish_reason": null} even after 20-second wait for eventual consistency.
Both shapes suggest a provider-routing issue specific to this slug — possibly one OpenRouter provider in the routing pool is returning malformed or incomplete metadata back to OpenRouter.
Reproduction A — codereview truncation
Fixture: ~/.claude/openrouter-models/test-fixtures/codereview-buggy.ts (116-line TS, 6 planted issues).
Prompt: "Focus on bugs, security, perf. Skip style. Format: file:line — issue — fix. One row per issue."
Call: pal__chat with model=qwen/qwen-2.5-coder-32b-instruct, temperature=0.2.
| Week |
gen-id |
Output tokens |
Issues found |
finish_reason |
native_finish_reason |
| W22 |
gen-1779687xxx (from W22 report) |
57 |
1/6 |
null |
(not recorded) |
| W23 |
gen-1779733527-doXyUhFdAIBQsJ9SqS9E |
97 |
1/6 (truncated mid-issue-2 at "file:4") |
null |
null |
Both runs returned actual content (output was syntactically valid prose, just cut off mid-sentence) but with no completion signal.
Reproduction B — null OR metadata
Fixture: same codereview-buggy.ts.
Prompt: precommit-style "Flag blockers only" (different system-prompt-modifier, max_tokens=2048).
Call: pal__chat with model=qwen/qwen-2.5-coder-32b-instruct, temperature=0.2.
gen-id: gen-1779735114-PJPfstG1DnH7d7LXGC9v (epoch 2026-05-25T15:51:54Z)
PAL response: valid content, 4 issues identified, normal MCP response shape, content_type="text", model_used="qwen/qwen-2.5-coder-32b-instruct".
OpenRouter /v1/generation/{id} lookup (immediate + 6s retry + 20s retry):
{
"model": null,
"tokens_prompt": null,
"tokens_completion": null,
"total_cost": null,
"generation_time": null,
"finish_reason": null,
"native_finish_reason": null,
"error": null
}
Same symptom shape as W22 PAL-BUG-2 case (pal__analyze empty_response) but here the PAL response is intact — only the OR metadata is missing. The W22 PAL-BUG-2 case had both PAL empty + OR null. This case has PAL OK + OR null.
Cross-pattern observation
Out of 51 unique models tested in the W23 routing review, only qwen/qwen-2.5-coder-32b-instruct exhibited any of these anomalies. All 50 other models — including other Qwen 2.5 family members, other 32B-class models, and other code-specialized models from competing providers — returned normal finish_reason: "stop" and complete OR metadata.
The pattern is slug-specific, not size-specific or family-specific.
Hypothesized cause
OpenRouter's provider-routing pool for qwen/qwen-2.5-coder-32b-instruct likely has at least one provider that:
- Returns content prematurely (no
[DONE] marker on the stream)
- Fails to report completion metadata back to OpenRouter's billing/telemetry pipeline
The intermittent vs systematic split between reproductions A and B may reflect different OR routing decisions for the two prompt shapes (different max_tokens, different system_prompt budget).
Recommended action
- For Master-Kit picks-table: swap applied immediately —
codereview + precommit rotated to x-ai/grok-build-0.1. Done in ~/.claude/openrouter-models/current-picks.md 2026-05-25.
- For OpenRouter: file an issue including both gen-ids and the all-null metadata response. Ask which provider in the routing pool serves this slug — they may need to be removed from rotation or flagged for upstream investigation.
- For PAL maintainers: consider adding a sanity check — when OR
/v1/generation/{id} returns all-null fields for a gen-id whose PAL response was non-empty, log a warning. This would have surfaced this bug a week earlier.
Cross-references
- W22 routing review:
~/.claude/openrouter-models/results/2026-W22.md (codereview truncation noted as F3)
- W23 routing review:
~/.claude/openrouter-models/results/2026-W23.md Section A1 + A7, Section B (PAL-BUG-3)
- Picks-table state:
~/.claude/openrouter-models/current-picks.md (post-W23 swap)
Reporter: rabih@ultratms.com (via /eval-models routing review W23)
First observed: 2026-W22 + 2026-W23 — 2 consecutive weeks
Severity: medium-high (model is in 3 picks-table rows; swap already applied this week)
Likely venue: OpenRouter issue tracker, NOT PAL — but capturing here because it surfaced through PAL eval flow
TL;DR
Calls to
qwen/qwen-2.5-coder-32b-instructvia OpenRouter exhibit two related anomalies:finish_reason: nullANDnative_finish_reason: null. 2 consecutive weekly runs (W22: 57 tokens, 1/6 issues; W23: 97 tokens, 1/6 issues). Same fixture both weeks./v1/generation/{id}response under precommit-style prompts. PAL response contains valid 456-token content with 4/6 issues identified; OpenRouter's API for the same gen-id returns{"model": null, "tokens_prompt": null, "tokens_completion": null, "total_cost": null, "generation_time": null, "finish_reason": null}even after 20-second wait for eventual consistency.Both shapes suggest a provider-routing issue specific to this slug — possibly one OpenRouter provider in the routing pool is returning malformed or incomplete metadata back to OpenRouter.
Reproduction A — codereview truncation
Fixture:
~/.claude/openrouter-models/test-fixtures/codereview-buggy.ts(116-line TS, 6 planted issues).Prompt: "Focus on bugs, security, perf. Skip style. Format: file:line — issue — fix. One row per issue."
Call:
pal__chatwith model=qwen/qwen-2.5-coder-32b-instruct, temperature=0.2.gen-1779687xxx(from W22 report)nullgen-1779733527-doXyUhFdAIBQsJ9SqS9EnullnullBoth runs returned actual content (output was syntactically valid prose, just cut off mid-sentence) but with no completion signal.
Reproduction B — null OR metadata
Fixture: same codereview-buggy.ts.
Prompt: precommit-style "Flag blockers only" (different system-prompt-modifier, max_tokens=2048).
Call:
pal__chatwith model=qwen/qwen-2.5-coder-32b-instruct, temperature=0.2.gen-id:
gen-1779735114-PJPfstG1DnH7d7LXGC9v(epoch 2026-05-25T15:51:54Z)PAL response: valid content, 4 issues identified, normal MCP response shape, content_type="text", model_used="qwen/qwen-2.5-coder-32b-instruct".
OpenRouter
/v1/generation/{id}lookup (immediate + 6s retry + 20s retry):{ "model": null, "tokens_prompt": null, "tokens_completion": null, "total_cost": null, "generation_time": null, "finish_reason": null, "native_finish_reason": null, "error": null }Same symptom shape as W22 PAL-BUG-2 case (
pal__analyzeempty_response) but here the PAL response is intact — only the OR metadata is missing. The W22 PAL-BUG-2 case had both PAL empty + OR null. This case has PAL OK + OR null.Cross-pattern observation
Out of 51 unique models tested in the W23 routing review, only
qwen/qwen-2.5-coder-32b-instructexhibited any of these anomalies. All 50 other models — including other Qwen 2.5 family members, other 32B-class models, and other code-specialized models from competing providers — returned normalfinish_reason: "stop"and complete OR metadata.The pattern is slug-specific, not size-specific or family-specific.
Hypothesized cause
OpenRouter's provider-routing pool for
qwen/qwen-2.5-coder-32b-instructlikely has at least one provider that:[DONE]marker on the stream)The intermittent vs systematic split between reproductions A and B may reflect different OR routing decisions for the two prompt shapes (different max_tokens, different system_prompt budget).
Recommended action
codereview+precommitrotated tox-ai/grok-build-0.1. Done in~/.claude/openrouter-models/current-picks.md2026-05-25./v1/generation/{id}returns all-null fields for a gen-id whose PAL response was non-empty, log a warning. This would have surfaced this bug a week earlier.Cross-references
~/.claude/openrouter-models/results/2026-W22.md(codereview truncation noted as F3)~/.claude/openrouter-models/results/2026-W23.mdSection A1 + A7, Section B (PAL-BUG-3)~/.claude/openrouter-models/current-picks.md(post-W23 swap)