feat: Add 6 new OpenRouter models (April 2026 refresh)#430
feat: Add 6 new OpenRouter models (April 2026 refresh)#430timeleft-- wants to merge 14 commits intoBeehiveInnovations:mainfrom
Conversation
New models: Claude Opus 4.6, Claude Sonnet 4.6, Gemini 3.1 Pro, GPT-5.4 Pro, GPT-5.3 Codex, DeepSeek V3.2, Devstral 2512, Qwen 3.5 397B, MiniMax M2.5. Removed: meta-llama/llama-3-70b (8K context, obsolete), perplexity/llama-3-sonar-large-32k-online (legacy). Generic aliases (opus, sonnet, pro, gpt5pro) migrated to newest model versions. Version-specific aliases preserved for backward compatibility (opus4.5, sonnet4.5, gemini3.0, gpt5.2-pro). Version bumped to 9.9.0. All 870 tests pass. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Keep version 9.9.0 from our feature branch (upstream synced to 9.8.2). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- gpt-5.3-codex: supports_temperature true→false (contradicts fixed constraint) - minimax-m2.5: max_output_tokens 196608→32768 (practical default; API allows up to 196K) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
10 files were failing the black --check CI step before this PR. None are files modified by this PR — fixing them here to unblock CI. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add openai/gpt-5.4 with aliases gpt5, gpt5.4, gpt-5.4 - Move gpt5 alias from openai/gpt-5 to openai/gpt-5.4 (newest base) - Keep gpt-5.0/gpt5.0 on old openai/gpt-5 for backward compat - Update tests and docs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- codex → openai/gpt-5.3-codex (was gpt-5-codex) - Old gpt-5-codex keeps codex-5.0 for backward compat Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Claude Desktop has a ~4 minute hardcoded MCP tool call timeout. When Pal routes to slow models (e.g. high-reasoning models), API calls can take 4-8 minutes and get cancelled before the response arrives. This wraps tool.execute() calls with periodic MCP progress notifications (every 15s) that keep the connection alive. Uses the standard MCP progressToken mechanism — no changes needed to individual tools or providers. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Address code review feedback from GPT 5.3 Codex: - Use `is None` instead of truthiness check for progress_token (0 is valid) - Wrap entire while loop in try/except CancelledError so cancellation during send_progress_notification also cleans up the task - Await the cancelled task to prevent orphaned coroutines - Log first notification failure instead of silently swallowing all Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Claude Desktop never sends a progressToken in MCP tool call requests, so progress notifications were never firing. Use request_id (always available) as fallback token. The notification still keeps the stdio transport alive and prevents the ~4 min timeout. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
During cancellation teardown, the inner task could raise a non-CancelledError exception (e.g. ValueError from model execution) which would mask the outer CancelledError. Catch Exception instead to ensure cancellation always propagates correctly. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add Hermes 4 (405B, 70B), Qwen 3.6 Plus, MiniMax M2.7, Qwen3 Coder, and Gemini 3.1 Flash Lite. Migrate primary aliases (qwen, minimax) to latest model versions. Total models: 35 → 41. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Code Review
This pull request updates the server to version 9.9.0 and increases the minimum Python requirement to 3.10. The changes include a major update to the OpenRouter model registry, adding several new frontier models (such as Claude 4.6, Gemini 3.1, and GPT-5.4) and migrating generic aliases to point to these latest versions. Additionally, a new progress notification mechanism was implemented in server.py to prevent client timeouts during long-running tool executions. Review feedback identifies a typo in the minimax-m2.7 model name and points out that some tests and documentation still reference older model versions for the qwen and minimax aliases.
| ("qwen", "qwen/qwen3.5-397b-a17b"), | ||
| ("minimax", "minimax/minimax-m2.5"), |
There was a problem hiding this comment.
These test cases for qwen and minimax aliases seem to be asserting the old mappings. According to the changes in openrouter_models.json and the PR description, these aliases should point to the newer model versions.
qwenshould resolve toqwen/qwen3.6-plus.minimaxshould resolve tominimax/minimax-m2.7.
Please update these assertions to reflect the alias migrations. Note that this suggestion assumes the model_name for minimax-m2.7 is corrected to use a dot instead of a dash, as suggested in another comment.
| ("qwen", "qwen/qwen3.5-397b-a17b"), | |
| ("minimax", "minimax/minimax-m2.5"), | |
| ("qwen", "qwen/qwen3.6-plus"), | |
| ("minimax", "minimax/minimax-m2.7"), |
| "intelligence_score": 17 | ||
| }, | ||
| { | ||
| "model_name": "minimax/minimax-m2-7", |
There was a problem hiding this comment.
| | `qwen`, `qwen3.5` | `qwen/qwen3.5-397b-a17b` | Frontier 397B MoE reasoning model (262K context) | | ||
| | `minimax`, `m2.5` | `minimax/minimax-m2.5` | SWE-Bench 80.2%, agent-optimized (197K context) | |
There was a problem hiding this comment.
The documentation for the qwen and minimax aliases seems to be out of sync with the changes in openrouter_models.json.
- The
qwenalias now points toqwen/qwen3.6-plus, but the table here lists it withqwen/qwen3.5-397b-a17b. - The
minimaxalias now points tominimax/minimax-m2.7, but the table lists it withminimax/minimax-m2.5.
The PR description mentions these migrations, so the documentation should be updated to reflect the new state.
| | `qwen`, `qwen3.5` | `qwen/qwen3.5-397b-a17b` | Frontier 397B MoE reasoning model (262K context) | | |
| | `minimax`, `m2.5` | `minimax/minimax-m2.5` | SWE-Bench 80.2%, agent-optimized (197K context) | | |
| | `qwen` | `qwen/qwen3.6-plus` | Alibaba's latest frontier model (1M context). `qwen3.5` -> 3.5 | | |
| | `minimax` | `minimax/minimax-m2.7` | 1T param model matching GPT-5.3-Codex. `m2.5` -> 2.5 | |
- Fix minimax-m2-7 typo → minimax-m2.7 (dot not dash, consistent with m2.5) - Update test assertions for migrated qwen/minimax aliases - Update docs alias table with new model mappings and new models Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 06127ed2ce
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| ("qwen", "qwen/qwen3.5-397b-a17b"), | ||
| ("minimax", "minimax/minimax-m2.5"), |
There was a problem hiding this comment.
Align alias-resolution test with migrated qwen/minimax defaults
These assertions still expect qwen and minimax to resolve to qwen/qwen3.5-397b-a17b and minimax/minimax-m2.5, but the updated registry now maps those aliases to qwen/qwen3.6-plus and minimax/minimax-m2-7 (conf/openrouter_models.json). As written, test_alias_resolution will fail once dependencies are installed, and it also blocks the intended alias migration from being validated.
Useful? React with 👍 / 👎.
Summary
qwenalias from Qwen 3.5 → Qwen 3.6 Plus,minimaxalias from M2.5 → M2.7Total models: 35 → 41.
Test plan
python -m pytest tests/ -v -m "not integration")python communication_simulator_test.py --individual openrouter_models)🤖 Generated with Claude Code