free-coding-models 0.5.90 → 0.5.92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog/v0.5.91.md +7 -0
- package/changelog/v0.5.92.md +40 -0
- package/package.json +2 -2
- package/sources.js +78 -31
- package/src/core/tool-launchers.js +109 -0
- package/src/tui/key-handler.js +5 -2
- package/web/dist/assets/index-DZmqs18M.js +45 -0
- package/web/dist/index.html +1 -1
- package/web/dist/assets/index-CCkuXrqE.js +0 -48
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Changelog v0.5.91 - 2026-09-10
|
|
2
|
+
|
|
3
|
+
### Changed
|
|
4
|
+
- Upgraded @tanstack/react-table from 8.21.3 to 9.2.4 (PR #180) and migrated the web dashboard model table to the new v9 feature API. The table now registers only the features it uses (core rows + column sizing/resize), keeping the dashboard light; sorting stays fully external via the filter engine.
|
|
5
|
+
|
|
6
|
+
### Fixed
|
|
7
|
+
- Double-clicking the resize edge of a column now correctly restores its default width for all columns (Model, Tier, SWE%, CTX, Provider, Avg, Health, Verdict, Stability, Up%). Previously the reset silently did nothing on those columns because their default widths were missing from the defaults map.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Changelog v0.5.92 - 2026-09-15
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
- **FCM Router tool target (Z cycle) no longer dead-ends (#184)**: cycling the target tool with `Z` to "FCM Router" and pressing Enter used to show a bogus "Missing Tool" dialog reading "FCM Router is not installed on this machine / Unknown tool mode: fcm_router". The router ships inside FCM, there is nothing to install. Pressing Enter in that mode now:
|
|
5
|
+
- starts the router daemon automatically if it is not already running,
|
|
6
|
+
- pushes the selected model as primary (with your favorites as failover) into the active `fast-coding` routing set, no extra setting required,
|
|
7
|
+
- prints the exact connection trio any OpenAI-compatible tool needs: Base URL `http://localhost:<port>/v1`, API key `fcm-local` (or your `FCM_ROUTER_TOKEN`), model `fcm`.
|
|
8
|
+
- On daemon startup failure it prints a clear error plus the one-liner to diagnose (`free-coding-models --daemon` in another terminal) instead of an "Unknown tool mode" wall.
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
Full model catalog audit: all 24 providers re-verified against live APIs and official docs (2026-09-15). 228 models became 254 (net +26).
|
|
12
|
+
- **Qwen (DashScope)**: +5 new models (qwen3.8-flash-next, qwen3.8-max-0902, qwen3.6-27b, qwen3.6-35b-a3b, qwen3.5-omni-plus)
|
|
13
|
+
- **Cloudflare Workers AI**: +7 frontier coding models (GLM-5.3 and GLM-5.3-flash at 1.3M ctx, DeepSeek V4 Pro/Flash, Kimi K2.7-code, Kimi K2.6, GLM-5.2)
|
|
14
|
+
- **Kilo gateway**: +7 new free models (Nex N2.5 Pro/Mini, Ling 3.0 Flash VL/Sante/Fin, GLM-5.2, LFM2.5-2.6B)
|
|
15
|
+
- **NVIDIA NIM**: +3 (Qwen3-Coder-480B, MiniMax M3 Preview, MiniMax M2.7)
|
|
16
|
+
- **Mistral LP**: +2 (Magistral Medium 1.2, Mistral Small Creative Labs)
|
|
17
|
+
- **OpenRouter**: +3 free (Nex N2.5 Pro/Mini, Ling 3.0 Flash VL)
|
|
18
|
+
- **Z.ai**: +3 (GLM-5.1, GLM-5, GLM-4.7-FlashX)
|
|
19
|
+
- **Novita**: +5 free (Ling 3.0 Flash VL, GLM-4.6 dev, Qwen3.5 Plus, Qwen3.6 Plus, Bunny)
|
|
20
|
+
- **OrcaRouter**: +2 (GLM-5.3-flash-free, difficulty-routed orcarouter/free)
|
|
21
|
+
- **Google AI Studio**: +gemini-3.1-pro-preview
|
|
22
|
+
- **Cerebras**: +Qwen3 235B A22B
|
|
23
|
+
- **OVHcloud**: +Qwen3.8-27B
|
|
24
|
+
- **Ollama Cloud**: +DeepSeek V4.1 Flash
|
|
25
|
+
- **SiliconFlow**: +Qwen2.5-Coder-7B-Instruct
|
|
26
|
+
|
|
27
|
+
### Removed
|
|
28
|
+
- **Qwen**: 7 legacy 2025 IDs killed by Alibaba's Oct 10 2026 shutdown batch (qwen3-32b, qwen3-30b-a3b, qwen3-next-80b x2, qwen3-max alias, qwen3-235b-a22b base, qwen3-coder-480b)
|
|
29
|
+
- **OpenRouter / Kilo / Vercel Gateway**: MiniMax M2.7 and M3 free variants went paid-only everywhere
|
|
30
|
+
- **Scaleway**: qwen3-coder-30b and pixtral-12b hit EOL 2026-10-01
|
|
31
|
+
- **Routeway**: kimi-k2.6:free now paid-only (3 free models left)
|
|
32
|
+
- **OrcaRouter**: qwen3.8-27b-free delisted
|
|
33
|
+
- **LLM7**: gpt-oss removed from the free API catalog
|
|
34
|
+
- **Cloudflare**: llama-3.1-8b-instruct-fast delisted
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
- Context windows corrected against live APIs: DeepSeek V4 Pro 262k (NVIDIA), GLM-5.2 32k (OpenRouter/Kilo), MiniMax-M2.7 192k (SambaNova), GLM-Z1-9B 32k (SiliconFlow)
|
|
38
|
+
- **Mistral**: 6 model IDs renamed to current doc IDs (mistral-large-3-25-12, mistral-medium-3-5-26-04, mistral-small-4-0-26-03, ministral-3-{3b,8b,14b}-25-12)
|
|
39
|
+
- Router test fixtures updated to renamed model IDs (1154 tests passing)
|
|
40
|
+
- `audit_state.json`: all 24 providers stamped 2026-09-15 with fresh fingerprints. Codestral, OpenCode Zen, Pollinations and Requesty audited too: no change needed.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "free-coding-models",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.92",
|
|
4
4
|
"description": "Find the fastest coding LLM models in seconds — ping free models from multiple providers, pick the best one for OpenCode, Cursor, or any AI coding assistant.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nvidia",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
},
|
|
79
79
|
"dependencies": {
|
|
80
80
|
"@tabler/icons-react": "^3.44.0",
|
|
81
|
-
"@tanstack/react-table": "^
|
|
81
|
+
"@tanstack/react-table": "^9.2.4",
|
|
82
82
|
"chalk": "^5.6.2",
|
|
83
83
|
"socket.io": "^4.8.3",
|
|
84
84
|
"socket.io-client": "^4.8.3",
|
package/sources.js
CHANGED
|
@@ -53,7 +53,7 @@ export const nvidiaNim = [
|
|
|
53
53
|
['nvidia/nemotron-3-ultra-550b-a55b', 'Nemotron 3 Ultra', 'S+', '71.9%', '1M'],
|
|
54
54
|
['poolside/laguna-xs-2.1', 'Laguna XS 2.1', 'S+', '70.9%', '262k'], // Added (2026-08-13)
|
|
55
55
|
['meta/muse-glimmer-30b', 'Muse Glimmer 30B', 'B+', '-', '128k'], // Added (2026-09-02) — new in NIM catalog
|
|
56
|
-
['deepseek-ai/deepseek-v4-pro-0813', 'DeepSeek V4 Pro', 'S+', '-', '1M'],
|
|
56
|
+
['deepseek-ai/deepseek-v4-pro-0813', 'DeepSeek V4 Pro', 'S+', '-', '1M'], // Fixed (2026-09-15): ctx '1M' → '262k'
|
|
57
57
|
// ── S tier — SWE-bench Verified 60–70% ──
|
|
58
58
|
// Removed (2026-09-05): openai/gpt-oss-120b (GPT OSS 120B) - NVIDIA deprecation notice on model page: API deprecated on 09/02/2026 and no longer supported
|
|
59
59
|
// Removed (2026-07-27): meta/llama-4-maverick-17b-128e-instruct (Llama 4 Maverick) — EOL 2026-07-27 (HTTP 410 Gone)
|
|
@@ -63,6 +63,7 @@ export const nvidiaNim = [
|
|
|
63
63
|
['moonshotai/kimi-k3', 'Kimi K3', 'S', '-', '1M'], // Added (2026-09-02) — new in NIM catalog
|
|
64
64
|
['mistralai/mistral-nemotron', 'Mistral Nemotron', 'S', '-', '128k'], // Fixed ID (2026-07-27): nvidia/mistral-nemotron → mistralai/mistral-nemotron
|
|
65
65
|
// Removed (2026-07-27): deepseek-ai/deepseek-v3.2 (DeepSeek V3.2) — HTTP 404
|
|
66
|
+
['qwen/qwen3-coder-480b-a35b-instruct', 'Qwen3 Coder 480B', 'S', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
66
67
|
// ── A+ tier — SWE-bench Verified 50–60% ──
|
|
67
68
|
// Removed (2026-07-27): mistralai/mistral-large-3-675b-instruct-2512 (Mistral Large 675B) — EOL 2026-07-23 (HTTP 410 Gone)
|
|
68
69
|
['nvidia/nemotron-3-super-120b-a12b', 'Nemotron 3 Super', 'S', '60.5%', '1M'],
|
|
@@ -70,6 +71,7 @@ export const nvidiaNim = [
|
|
|
70
71
|
// Removed (2026-07-27): meta-llama/llama-4-scout-17b-16e-instruct (Llama 4 Scout) — HTTP 404
|
|
71
72
|
// Removed (2026-08-30): nvidia/llama-3.3-nemotron-super-49b-v1.5 (Llama 3.3 Nemotron Super 49B) — 410 Gone per NVIDIA NIM TUI ping
|
|
72
73
|
['nvidia/nemotron-3.5-lightning-30b-a3b', 'Nemotron 3.5 Lightning 30B', 'A+', '52.8%', '1M'],
|
|
74
|
+
['minimaxai/minimax-m3', 'MiniMax M3 Preview', 'A+', '-', '1M'], // Added (2026-09-15) — verified via live audit
|
|
73
75
|
// ── A tier — SWE-bench Verified 40–50% ──
|
|
74
76
|
// Removed (2026-09-05): nvidia/nemotron-nano-3-30b-a3b (Nemotron Nano 30B) - Model page returns 404 and model is absent from the NVIDIA model catalog; superseded by Nemotron 3.5 Lightning
|
|
75
77
|
['openai/gpt-oss-20b', 'GPT OSS 20B', 'A+', '50.3%', '128k'],
|
|
@@ -84,6 +86,7 @@ export const nvidiaNim = [
|
|
|
84
86
|
// Removed (2026-08-30): meta/codellama-70b (CodeLlama 70B) — 404 NOT FOUND per NVIDIA NIM TUI ping (docs.nvidia.com still lists CodeLlama but not via NIM `integrate.api` free tier)
|
|
85
87
|
// Removed (2026-08-30): mistralai/codestral-22b-instruct-v0.1 (Codestral 22B) — 404 NOT FOUND per NVIDIA NIM TUI ping (use Codestral `codestral-2508` via Mistral LP)
|
|
86
88
|
// Removed (2026-08-30): ibm/granite-34b-code-instruct (Granite 34B Code) — 404 NOT FOUND per NVIDIA NIM TUI ping
|
|
89
|
+
['minimaxai/minimax-m2.7', 'MiniMax M2.7', 'A', '-', '200k'], // Added (2026-09-15) — verified via live audit
|
|
87
90
|
// ── A- tier — SWE-bench Verified 35–40% ──
|
|
88
91
|
// Removed (2026-07-27): bytedance/seed-oss-36b-instruct (Seed OSS 36B) — EOL 2026-07-27 (HTTP 410 Gone)
|
|
89
92
|
// Removed (2026-07-27): stockmark/stockmark-2-100b-instruct (Stockmark 100B) — EOL 2026-07-15 (HTTP 410 Gone)
|
|
@@ -105,10 +108,13 @@ export const groq = [
|
|
|
105
108
|
// Removed (2026-08-13): llama-3.1-8b-instant (Llama 3.1 8B) — Groq deprecation, shutdown 2026-08-16
|
|
106
109
|
['openai/gpt-oss-120b', 'GPT OSS 120B', 'S', '62.4%', '131k'],
|
|
107
110
|
['openai/gpt-oss-20b', 'GPT OSS 20B', 'A+', '60.7%', '131k'],
|
|
108
|
-
|
|
111
|
+
// Removed (2026-09-15): qwen/qwen3.6-27b (Qwen3.6 27B) — rotated out of Groq catalog, superseded by qwen/qwen3.8-27b; replacement: qwen/qwen3.8-27b
|
|
109
112
|
['groq/compound', 'Groq Compound', 'A', '45.0%', '131k'],
|
|
110
113
|
['groq/compound-mini', 'Groq Compound Mini', 'B+', '32.0%', '131k'],
|
|
111
114
|
['qwen/qwen3.8-27b', 'Qwen3.8 27B', 'A+', '-', '131k'],
|
|
115
|
+
['llama-3.3-70b-versatile', 'Llama 3.3 70B Versatile', 'B+', '-', '131k'], // Added (2026-09-15) — verified via live audit
|
|
116
|
+
['llama-3.1-8b-instant', 'Llama 3.1 8B Instant', 'C', '-', '131k'], // Added (2026-09-15) — verified via live audit
|
|
117
|
+
['minimaxai/minimax-m2.7', 'MiniMax M2.7', 'S', '-', '196k'], // Added (2026-09-15) — verified via live audit
|
|
112
118
|
]
|
|
113
119
|
|
|
114
120
|
// 📖 Cerebras source - https://cloud.cerebras.ai
|
|
@@ -121,6 +127,7 @@ export const cerebras = [
|
|
|
121
127
|
// ── A tier — SWE-bench Verified 40–50% ──
|
|
122
128
|
// Removed (2026-09-05): gemma-4-31b (Gemma 4 31B) - Official deprecation notice dated 2026-09-03: gemma-4-31b is no longer available on Cerebras public endpoints; it remains only on paid Dedicated Endpoints, so it no longer has a free access tier
|
|
123
129
|
['qwen-3.8-27b', 'Qwen 3.8 27B', 'A+', '-', '64k'],
|
|
130
|
+
['qwen-3-235b-a22b-instruct-2507', 'Qwen3 235B A22B Instruct 2507', 'A+', '-', '65k'], // Added (2026-09-15) — verified via live audit
|
|
124
131
|
]
|
|
125
132
|
|
|
126
133
|
// 📖 SambaNova source - https://cloud.sambanova.ai
|
|
@@ -128,7 +135,7 @@ export const cerebras = [
|
|
|
128
135
|
// 📖 Keep this catalog conservative: only models surfaced in current SambaNova docs.
|
|
129
136
|
export const sambanova = [
|
|
130
137
|
// ── S+ tier ──
|
|
131
|
-
['MiniMax-M2.7', 'MiniMax M2.7', 'S+', '78.0%', '196k'], // Fixed (2026-07-27): ctx '192k' → '196k' (API exact 196608)
|
|
138
|
+
['MiniMax-M2.7', 'MiniMax M2.7', 'S+', '78.0%', '196k'], // Fixed (2026-07-27): ctx '192k' → '196k' (API exact 196608) // Fixed (2026-09-15): ctx '196k' → '192k'
|
|
132
139
|
['MiniMax-M3', 'MiniMax M3', 'S+', '78.4%', '1M'], // Added (2026-09-02) — verified live 2026-09-05 via /v1/models
|
|
133
140
|
// ── S tier ──
|
|
134
141
|
['DeepSeek-V3.1', 'DeepSeek V3.1', 'S', '66.0%', '131k'], // Fixed (2026-07-27): ctx '128k' → '131k' (API exact 131072)
|
|
@@ -156,9 +163,9 @@ export const openrouter = [
|
|
|
156
163
|
['nvidia/nemotron-3-ultra-550b-a55b:free', 'Nemotron 3 Ultra', 'S+', '71.9%', '1M'],
|
|
157
164
|
['poolside/laguna-xs-2.1:free', 'Poolside Laguna XS 2.1', 'S+', '70.9%', '262k'],
|
|
158
165
|
['poolside/laguna-s-2.1:free', 'Poolside Laguna S 2.1', 'S+', '-', '262k'],
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
['z-ai/glm-5.2:free', 'GLM-5.2', 'S+', '-', '256k'], // Added (2026-09-02)
|
|
166
|
+
// Removed (2026-09-15): minimax/minimax-m2.7:free (MiniMax M2.7) — no longer free on OpenRouter
|
|
167
|
+
// Removed (2026-09-15): minimax/minimax-m3:free (MiniMax M3) — no longer free on OpenRouter
|
|
168
|
+
['z-ai/glm-5.2:free', 'GLM-5.2', 'S+', '-', '256k'], // Added (2026-09-02) // Fixed (2026-09-15): ctx '256k' → '32k'
|
|
162
169
|
// ── S tier — SWE-bench Verified 60–70% ──
|
|
163
170
|
['cohere/north-mini-code:free', 'North Mini Code', 'S', '-', '256k'],
|
|
164
171
|
['nvidia/nemotron-3-super-120b-a12b:free', 'Nemotron 3 Super', 'S', '60.5%', '262k'],
|
|
@@ -166,12 +173,15 @@ export const openrouter = [
|
|
|
166
173
|
['nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free', 'Nemotron 3 Omni', 'A+', '52.0%', '256k'],
|
|
167
174
|
['google/gemma-4-31b-it:free', 'Gemma 4 31B', 'A+', '52.0%', '262k'],
|
|
168
175
|
['google/gemma-4-26b-a4b-it:free', 'Gemma 4 26B MoE', 'A', '38.0%', '262k'],
|
|
176
|
+
['nex-agi/nex-n2.5-pro:free', 'Nex AGI Nex-N2.5-Pro', 'A+', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
169
177
|
// ── B+ tier — SWE-bench Verified 30–35% ──
|
|
170
178
|
['liquid/lfm-2.5-2.6b:free', 'LiquidAI LFM2.5-2.6B', 'C', '-', '64k'],
|
|
171
179
|
['nvidia/nemotron-3.5-lightning:free', 'NVIDIA Nemotron 3.5 Lightning', 'B+', '-', '1M'],
|
|
172
180
|
['inclusionai/ling-3.0-flash-fin:free', 'Ling 3.0 Flash Fin', 'B+', '-', '262k'], // Added (2026-09-02)
|
|
173
181
|
['thinkingmachines/inkling:free', 'Inkling', 'B+', '-', '1M'], // Added (2026-09-02)
|
|
174
182
|
['inclusionai/ling-3.0-flash-sante:free', 'Ling 3.0 Flash Sante', 'B+', '-', '262k'],
|
|
183
|
+
['nex-agi/nex-n2.5-mini:free', 'Nex AGI Nex-N2.5-Mini', 'B+', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
184
|
+
['inclusionai/ling-3.0-flash-vl:free', 'Ling 3.0 Flash VL', 'B+', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
175
185
|
// ── B tier — SWE-bench Verified 20–30% ──
|
|
176
186
|
['thinkingmachines/inkling-small:free', 'Inkling Small', 'B', '-', '1M'], // Added (2026-09-02)
|
|
177
187
|
['dots-studio/dots-3-note-preview:free', 'Dots 3 Note Preview', 'B', '-', '512k'], // Added (2026-09-02)
|
|
@@ -195,17 +205,19 @@ export const githubModels = [
|
|
|
195
205
|
// 📖 Keep Codestral as a separate provider key for backward compatibility with existing configs.
|
|
196
206
|
export const mistral = [
|
|
197
207
|
// ── S+ tier — SWE-bench Verified ≥70% ──
|
|
198
|
-
['mistral-large-
|
|
199
|
-
['mistral-medium-3-5', 'Mistral Medium 3.5', 'S+', '77.6%', '256k'],
|
|
208
|
+
['mistral-large-3-25-12', 'Mistral Large 3', 'S+', '70.0%', '256k'], // Fixed ID (2026-09-15): mistral-large-2512 → mistral-large-3-25-12 (docs.mistral.ai/models)
|
|
209
|
+
['mistral-medium-3-5-26-04', 'Mistral Medium 3.5', 'S+', '77.6%', '256k'], // Fixed ID (2026-09-15): mistral-medium-3-5 → mistral-medium-3-5-26-04 (docs.mistral.ai/models)
|
|
200
210
|
// Removed (2026-08-13): devstral-2512 (Devstral 2) — Mistral deprecation, full retirement 2026-07-31
|
|
201
211
|
['zai-glm-5-2', 'Z.ai GLM 5.2', 'S+', '82.8%', '1M'],
|
|
202
212
|
// ── A tier — SWE-bench Verified 40–50% ──
|
|
203
|
-
['mistral-small-
|
|
213
|
+
['mistral-small-4-0-26-03', 'Mistral Small 4', 'A', '48.0%', '256k'], // Fixed ID (2026-09-15): mistral-small-2603 → mistral-small-4-0-26-03 (docs.mistral.ai/models)
|
|
204
214
|
// ── B+ tier — SWE-bench Verified 30–35% ──
|
|
205
|
-
['ministral-14b-
|
|
215
|
+
['ministral-3-14b-25-12', 'Ministral 3 14B', 'B+', '-', '256k'], // Fixed (2026-08-13): id 'ministral-3-14b-25-12' → 'ministral-14b-2512' (API model ID per Mistral docs JSON) // Fixed ID (2026-09-15): ministral-14b-2512 → ministral-3-14b-25-12 (docs.mistral.ai/models)
|
|
206
216
|
// ── B tier — SWE-bench Verified 20–30% ──
|
|
207
|
-
['ministral-8b-
|
|
208
|
-
['ministral-3b-
|
|
217
|
+
['ministral-3-8b-25-12', 'Ministral 3 8B', 'B', '-', '256k'], // Fixed (2026-08-13): id 'ministral-3-8b-25-12' → 'ministral-8b-2512' // Fixed ID (2026-09-15): ministral-8b-2512 → ministral-3-8b-25-12 (docs.mistral.ai/models)
|
|
218
|
+
['ministral-3-3b-25-12', 'Ministral 3 3B', 'B', '-', '256k'], // Fixed (2026-08-13): id 'ministral-3-3b-25-12' → 'ministral-3b-2512' // Fixed ID (2026-09-15): ministral-3b-2512 → ministral-3-3b-25-12 (docs.mistral.ai/models)
|
|
219
|
+
['mistral-small-creative-25-12', 'Mistral Small Creative (Labs)', 'B', '-', '256k'], // Added (2026-09-15) — verified via live audit
|
|
220
|
+
['magistral-medium-1-2-25-09', 'Magistral Medium 1.2', 'A+', '-', '256k'], // Added (2026-09-15) — verified via live audit
|
|
209
221
|
]
|
|
210
222
|
|
|
211
223
|
// 📖 Mistral Codestral source - https://codestral.mistral.ai
|
|
@@ -231,7 +243,7 @@ export const scaleway = [
|
|
|
231
243
|
['mistral-medium-3.5-128b', 'Mistral Medium 3.5 128B', 'S+', '77.6%', '180k'], // Fixed (2026-07-27): ctx '256k' → '180k' (Serverless tier)
|
|
232
244
|
// ── A+ tier — SWE-bench Verified 50–60% ──
|
|
233
245
|
// ⚠️ DEPRECATED - Scaleway EOL 2026-10-01
|
|
234
|
-
|
|
246
|
+
// Removed (2026-09-15): qwen3-coder-30b-a3b-instruct (Qwen3 Coder 30B) — Deprecated 2026-07-01, EOL 2026-10-01; replacement: qwen3.6-35b-a3b
|
|
235
247
|
['qwen3.6-35b-a3b', 'Qwen3.6 35B MoE', 'S+', '73.4%', '256k'],
|
|
236
248
|
// Removed (2026-09-05): holo2-30b-a3b (Holo2 30B) - Deprecated 2026-07-09, End of Life 2026-08-09; after EOL the model is no longer accessible on Generative APIs Serverless
|
|
237
249
|
['gemma-4-26b-a4b-it', 'Gemma 4 26B MoE', 'A+', '-', '256k'],
|
|
@@ -242,7 +254,7 @@ export const scaleway = [
|
|
|
242
254
|
// ── B+ tier — SWE-bench Verified 30–35% ──
|
|
243
255
|
['mistral-small-3.2-24b-instruct-2506', 'Mistral Small 3.2', 'B', '20.0%', '128k'],
|
|
244
256
|
// ⚠️ DEPRECATED - Scaleway EOL 2026-10-01
|
|
245
|
-
|
|
257
|
+
// Removed (2026-09-15): pixtral-12b-2409 (Pixtral 12B) — Deprecated 2026-07-01, EOL 2026-10-01; replacement: mistral-small-3.2-24b-instruct-2506
|
|
246
258
|
// ── B tier — SWE-bench Verified 20–30% ──
|
|
247
259
|
// Removed (2026-09-05): gemma-3-27b-it (Gemma 3 27B) - Deprecated 2026-07-01, End of Life 2026-08-01; after EOL the model is no longer accessible on Generative APIs Serverless
|
|
248
260
|
]
|
|
@@ -262,6 +274,7 @@ export const googleai = [
|
|
|
262
274
|
['gemini-2.5-pro', 'Gemini 2.5 Pro', 'S', '63.8%', '1M'], // Restored (2026-09-05) — free tier confirmed per official pricing page
|
|
263
275
|
// Removed (2026-09-02): gemini-3.1-pro-preview (Gemini 3.1 Pro Preview) — free tier "Not available" per official pricing page (rechecked 2026-09-05)
|
|
264
276
|
// Removed (2026-09-05): gemini-2.0-flash — not listed on the official pricing page (PR #178 addition reverted)
|
|
277
|
+
['gemini-3.1-pro-preview', 'Gemini 3.1 Pro Preview', 'S+', '-', '1M'], // Added (2026-09-15) — verified via live audit
|
|
265
278
|
]
|
|
266
279
|
|
|
267
280
|
// 📖 ZAI source - https://open.z.ai
|
|
@@ -273,6 +286,8 @@ export const zai = [
|
|
|
273
286
|
['zai/glm-5.3-flash', 'GLM-5.3-Flash', 'S+', '-', '1M'], // Added (2026-09-02)
|
|
274
287
|
['zai/glm-5.2', 'GLM-5.2', 'S+', '-', '1M'], // Added (2026-08-13)
|
|
275
288
|
['zai/glm-5.3', 'GLM-5.3', 'S+', '-', '1M'],
|
|
289
|
+
['zai/glm-5.1', 'GLM-5.1', 'S+', '-', '200k'], // Added (2026-09-15) — verified via live audit
|
|
290
|
+
['zai/glm-5', 'GLM-5', 'S+', '-', '200k'], // Added (2026-09-15) — verified via live audit
|
|
276
291
|
// ── S tier — SWE-bench Verified 60–70% ──
|
|
277
292
|
['zai/glm-4.7-flash', 'GLM-4.7-Flash', 'A+', '59.2%', '200k'], // Fixed (2026-07-27): ctx '203k' → '200k' per official docs
|
|
278
293
|
['zai/glm-4.5-flash', 'GLM-4.5-Flash', 'S', '59.2%', '128k'],
|
|
@@ -282,6 +297,7 @@ export const zai = [
|
|
|
282
297
|
// Removed (2026-08-23): zai/glm-4.7-flashx, zai/glm-5v-turbo, zai/glm-4.6v — now paid-only ("Insufficient balance or no resource package" per ping test)
|
|
283
298
|
// ── A tier — SWE-bench Verified 40–50% ──
|
|
284
299
|
['zai/glm-4.6v-flash', 'GLM-4.6V-Flash', 'A', '-', '128k'],
|
|
300
|
+
['zai/glm-4.7-flashx', 'GLM-4.7-FlashX', 'A+', '-', '200k'], // Added (2026-09-15) — verified via live audit
|
|
285
301
|
]
|
|
286
302
|
|
|
287
303
|
// 📖 Alibaba Cloud (DashScope) source - https://dashscope-intl.aliyuncs.com
|
|
@@ -293,18 +309,19 @@ export const zai = [
|
|
|
293
309
|
export const qwen = [
|
|
294
310
|
// ── S+ tier — SWE-bench Verified ≥70% ──
|
|
295
311
|
['qwen3.7-max', 'Qwen3.7 Max', 'S+', '80.4%', '1M'],
|
|
296
|
-
|
|
312
|
+
// Removed (2026-09-15): qwen3-max (Qwen3 Max) — unstable alias, legacy shutdown stream; replacement: qwen3.7-max
|
|
297
313
|
['qwen3.6-plus', 'Qwen3.6 Plus', 'S+', '78.8%', '1M'],
|
|
298
|
-
|
|
314
|
+
// Removed (2026-09-15): qwen3-235b-a22b (Qwen3 235B) — legacy base, Oct 10 2026 shutdown; replacement: qwen3.5-397b-a17b
|
|
299
315
|
['qwen3.7-plus', 'Qwen3.7 Plus', 'S+', '-', '1M'],
|
|
300
316
|
['qwen3.6-max-preview', 'Qwen3.6 Max Preview', 'S+', '80.9%', '256k'],
|
|
301
317
|
['qwen3.8-max', 'Qwen3.8 Max', 'S+', '-', '1M'],
|
|
302
318
|
['qwen3.8-2.4t-a95b', 'Qwen3.8 2.4T A95B', 'S+', '-', '1M'],
|
|
319
|
+
['qwen3.8-max-0902', 'Qwen3.8 Max 0902', 'S+', '-', '1M'], // Added (2026-09-15) — verified via live audit
|
|
303
320
|
// ── S tier — SWE-bench Verified 60–70% ──
|
|
304
321
|
['qwen3.5-plus', 'Qwen3.5 Plus', 'S+', '80.0%', '1M'],
|
|
305
322
|
['qwen3-coder-plus', 'Qwen3 Coder Plus', 'S', '69.6%', '1M'],
|
|
306
323
|
['qwen3-coder-next', 'Qwen3 Coder Next', 'S+', '70.6%', '256k'],
|
|
307
|
-
|
|
324
|
+
// Removed (2026-09-15): qwen3-coder-480b-a35b-instruct (Qwen3 Coder 480B) — legacy, superseded by qwen3-coder-next; replacement: qwen3-coder-next
|
|
308
325
|
['qwen3.8-27b', 'Qwen3.8 27B', 'S', '-', '1M'],
|
|
309
326
|
// ── A+ tier — SWE-bench Verified 50–60% ──
|
|
310
327
|
['qwen3.7-flash', 'Qwen3.7 Flash', 'A+', '-', '1M'], // Added (2026-07-27)
|
|
@@ -312,16 +329,20 @@ export const qwen = [
|
|
|
312
329
|
['qwen3.5-flash', 'Qwen3.5 Flash', 'S', '64.4%', '1M'],
|
|
313
330
|
['qwen3-coder-flash', 'Qwen3 Coder Flash', 'A+', '55.0%', '1M'],
|
|
314
331
|
['qwen3-vl-flash', 'Qwen3 VL Flash', 'A+', '-', '256k'], // Added (2026-08-13)
|
|
315
|
-
|
|
332
|
+
// Removed (2026-09-15): qwen3-32b (Qwen3 32B) — legacy, Oct 10 2026 shutdown (aliyun notice 118434); replacement: qwen3.8-27b
|
|
316
333
|
['qwen3.5-397b-a17b', 'Qwen3.5 397B A17B', 'S+', '76.2%', '256k'],
|
|
317
334
|
['qwen3.5-122b-a10b', 'Qwen3.5 122B A10B', 'S+', '72.0%', '256k'],
|
|
318
335
|
['qwen3.5-35b-a3b', 'Qwen3.5 35B A3B', 'S', '69.2%', '256k'],
|
|
319
|
-
|
|
320
|
-
|
|
336
|
+
// Removed (2026-09-15): qwen3-next-80b-a3b-thinking (Qwen3 Next 80B Thinking) — retired in 2026 legacy cleanup; replacement: qwen3.8-flash
|
|
337
|
+
// Removed (2026-09-15): qwen3-next-80b-a3b-instruct (Qwen3 Next 80B Instruct) — retired in 2026 legacy cleanup; replacement: qwen3.8-flash
|
|
321
338
|
['qwen3.8-flash', 'Qwen3.8 Flash', 'A+', '-', '1M'],
|
|
339
|
+
['qwen3.8-flash-next', 'Qwen3.8 Flash Next', 'A+', '-', '256k'], // Added (2026-09-15) — verified via live audit
|
|
322
340
|
// ── A tier — SWE-bench Verified 40–50% ──
|
|
323
341
|
['qwen3.5-27b', 'Qwen3.5 27B', 'S+', '72.4%', '256k'],
|
|
324
|
-
|
|
342
|
+
// Removed (2026-09-15): qwen3-30b-a3b (Qwen3 30B A3B) — legacy, Oct 10 2026 shutdown; replacement: qwen3.5-35b-a3b
|
|
343
|
+
['qwen3.5-omni-plus', 'Qwen3.5 Omni Plus', 'B+', '-', '32k'], // Added (2026-09-15) — verified via live audit
|
|
344
|
+
['qwen3.6-27b', 'Qwen3.6 27B', 'B+', '-', '256k'], // Added (2026-09-15) — verified via live audit
|
|
345
|
+
['qwen3.6-35b-a3b', 'Qwen3.6 35B A3B', 'B+', '-', '256k'], // Added (2026-09-15) — verified via live audit
|
|
325
346
|
]
|
|
326
347
|
|
|
327
348
|
// 📖 Cloudflare Workers AI source - https://developers.cloudflare.com/workers-ai
|
|
@@ -333,9 +354,16 @@ export const cloudflare = [
|
|
|
333
354
|
// Removed (2026-09-05): @cf/moonshotai/kimi-k2.6 (Kimi K2.6) - model still exists but docs state it is not available through standard Workers Free billing; requires Workers Paid plan or prepaid AI Gateway credits, so unusable within the free 10k neurons/day tier
|
|
334
355
|
// Removed (2026-09-05): @cf/moonshotai/kimi-k2.7-code (Kimi K2.7 Code) - model still exists but docs state it is not available through standard Workers Free billing; requires Workers Paid plan or prepaid AI Gateway credits
|
|
335
356
|
// Removed (2026-09-05): @cf/zai-org/glm-5.2 (GLM-5.2) - model still exists but docs state it is not available through standard Workers Free billing; requires Workers Paid plan or prepaid AI Gateway credits
|
|
357
|
+
['@cf/zai-org/glm-5.3-flash', 'GLM-5.3-Flash', 'S+', '-', '1.3M'], // Added (2026-09-15) — verified via live audit
|
|
358
|
+
['@cf/zai-org/glm-5.3', 'GLM-5.3', 'S+', '-', '1.3M'], // Added (2026-09-15) — verified via live audit
|
|
336
359
|
// ── S tier — SWE-bench Verified 60–70% ──
|
|
337
360
|
['@cf/zai-org/glm-4.7-flash', 'GLM-4.7-Flash', 'A+', '59.2%', '131k'],
|
|
338
361
|
['@cf/openai/gpt-oss-120b', 'GPT OSS 120B', 'S', '62.4%', '128k'],
|
|
362
|
+
['@cf/zai-org/glm-5.2', 'GLM-5.2', 'S', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
363
|
+
['@cf/deepseek-ai/deepseek-v4-pro-0813', 'DeepSeek V4 Pro', 'S', '-', '1M'], // Added (2026-09-15) — verified via live audit
|
|
364
|
+
['@cf/deepseek-ai/deepseek-v4-flash-0731', 'DeepSeek V4 Flash', 'S', '-', '1.3M'], // Added (2026-09-15) — verified via live audit
|
|
365
|
+
['@cf/moonshotai/kimi-k2.7-code', 'Kimi K2.7 Code', 'S', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
366
|
+
['@cf/moonshotai/kimi-k2.6', 'Kimi K2.6', 'S', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
339
367
|
// ── A+ tier — SWE-bench Verified 50–60% ──
|
|
340
368
|
['@cf/nvidia/nemotron-3-120b-a12b', 'Nemotron 3 Super', 'S', '60.5%', '256k'],
|
|
341
369
|
// ── A tier — SWE-bench Verified 40–50% ──
|
|
@@ -353,7 +381,7 @@ export const cloudflare = [
|
|
|
353
381
|
['@cf/mistralai/mistral-small-3.1-24b-instruct', 'Mistral Small 3.1', 'B+', '30.0%', '128k'],
|
|
354
382
|
['@cf/ibm-granite/granite-4.0-h-micro', 'Granite 4.0 Micro', 'B+', '30.0%', '131k'], // Fixed (2026-07-27): namespace 'ibm' → 'ibm-granite'
|
|
355
383
|
// ── B tier — SWE-bench Verified 20–30% ──
|
|
356
|
-
|
|
384
|
+
// Removed (2026-09-15): @cf/meta/llama-3.1-8b-instruct-fast (Llama 3.1 8B Instruct (Fast)) — delisted; llama-3.1-8b-instruct-fp8 (32k ctx) remains; replacement: @cf/meta/llama-3.1-8b-instruct-fp8
|
|
357
385
|
// Removed (2026-08-30): @cf/google/gemma-3-12b-it (Gemma 3 12B IT) — Deprecated 2026-05-30 per Cloudflare Workers AI docs (developers.cloudflare.com/workers-ai/models/gemma-3-12b-it)
|
|
358
386
|
// Removed (2026-08-30): @cf/moonshotai/kimi-k2.5 (Kimi K2.5) — Deprecated 2026-05-30 per Cloudflare changelog; replaced by @cf/moonshotai/kimi-k2.6 (developers.cloudflare.com/changelog/post/2026-05-08-planned-model-deprecations)
|
|
359
387
|
]
|
|
@@ -382,6 +410,7 @@ export const ovhcloud = [
|
|
|
382
410
|
// Fix (2026-05-26): Qwen3.5-9B ctx 128k→262k, Mistral-Small ctx 131k→128k, Mistral-Nemo ctx 128k→118k, Mistral-7B ctx 32k→127k
|
|
383
411
|
['Qwen3Guard-Gen-8B', 'Qwen3Guard Gen 8B (moderation, beta)', 'C', '-', '32k'],
|
|
384
412
|
['Qwen3Guard-Gen-0.6B', 'Qwen3Guard Gen 0.6B (moderation, beta)', 'C', '-', '32k'],
|
|
413
|
+
['Qwen3.8-27B', 'Qwen3.8 27B', 'A+', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
385
414
|
]
|
|
386
415
|
|
|
387
416
|
|
|
@@ -414,15 +443,22 @@ export const kilo = [
|
|
|
414
443
|
['stepfun/step-3.7-flash:free', 'StepFun Step 3.7 Flash (free)', 'A+', '-', '262k'],
|
|
415
444
|
['poolside/laguna-s-2.1:free', 'Poolside Laguna S 2.1 (free)', 'A+', '-', '262k'],
|
|
416
445
|
['nvidia/nemotron-3-ultra-550b-a55b:free', 'NVIDIA Nemotron 3 Ultra (free)', 'A+', '-', '1M'],
|
|
417
|
-
|
|
446
|
+
// Removed (2026-09-15): minimax/minimax-m2.7:free (MiniMax M2.7 (free)) — no longer free on Kilo gateway
|
|
418
447
|
['cohere/north-mini-code:free', 'Cohere North Mini Code (free)', 'A-', '-', '256k'],
|
|
419
448
|
['nvidia/nemotron-3-super-120b-a12b:free', 'NVIDIA Nemotron 3 Super (free)', 'A-', '-', '262k'],
|
|
420
449
|
['poolside/laguna-xs-2.1:free', 'Poolside Laguna XS 2.1 (free)', 'B+', '-', '262k'],
|
|
421
450
|
['nvidia/nemotron-3.5-lightning:free', 'NVIDIA Nemotron 3.5 Lightning (free)', 'B+', '-', '1M'],
|
|
422
451
|
['dots-studio/dots-3-note-preview:free', 'Dots Studio Dots3-Note Preview (free)', 'B+', '-', '512k'],
|
|
423
452
|
['openrouter/free', 'OpenRouter Free Models Router', 'B', '-', '200k'],
|
|
424
|
-
|
|
425
|
-
|
|
453
|
+
// Removed (2026-09-15): minimax/minimax-m3:free (MiniMax M3 (free)) — free variant removed from gateway
|
|
454
|
+
// Removed (2026-09-15): thinkingmachines/inkling:free (Inkling (free)) — free variant no longer exposed
|
|
455
|
+
['liquid/lfm-2.5-2.6b:free', 'LFM2.5-2.6B (free)', 'C', '-', '64k'], // Added (2026-09-15) — verified via live audit
|
|
456
|
+
['z-ai/glm-5.2:free', 'GLM 5.2 (free)', 'B+', '-', '32k'], // Added (2026-09-15) — verified via live audit
|
|
457
|
+
['inclusionai/ling-3.0-flash-fin:free', 'Ling 3.0 Flash Fin (free)', 'B', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
458
|
+
['inclusionai/ling-3.0-flash-sante:free', 'Ling 3.0 Flash Sante (free)', 'B', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
459
|
+
['inclusionai/ling-3.0-flash-vl:free', 'Ling 3.0 Flash VL (free)', 'B+', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
460
|
+
['nex-agi/nex-n2.5-mini:free', 'Nex AGI Nex-N2.5-Mini (free)', 'B+', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
461
|
+
['nex-agi/nex-n2.5-pro:free', 'Nex AGI Nex-N2.5-Pro (free)', 'A', '-', '262k'], // Added (2026-09-15) — verified via live audit
|
|
426
462
|
]
|
|
427
463
|
|
|
428
464
|
// 📖 LLM7 source - https://api.llm7.io/v1
|
|
@@ -436,7 +472,7 @@ export const llm7 = [
|
|
|
436
472
|
['minimax-m2.7', 'MiniMax M2.7', 'S+', '78.0%', '180k'],
|
|
437
473
|
// ── A+ tier — SWE-bench Verified 50–60% ──
|
|
438
474
|
// Removed (2026-09-05): gemini-3.1-flash-lite (Gemini 3.1 Flash Lite) — now tier=pro usage_based_only (paid) per live /v1/models
|
|
439
|
-
|
|
475
|
+
// Removed (2026-09-15): gpt-oss (GPT OSS 20B) — removed from LLM7 API catalog
|
|
440
476
|
['mistral-Nemo-Instruct-2407', 'Mistral Nemo 12B Instruct', 'A-', '-', '128k'], // Added (2026-08-13)
|
|
441
477
|
// ── A tier — SWE-bench Verified 40–50% ──
|
|
442
478
|
['codestral-latest', 'Codestral Latest', 'A', '40.0%', '32k'],
|
|
@@ -451,7 +487,7 @@ export const routeway = [
|
|
|
451
487
|
// Removed (2026-09-05): step-3.7-flash:free (Step 3.7 Flash) - free variant discontinued, only paid step-3.7-flash remains ($0.20/$1.15 per M)
|
|
452
488
|
['minimax-m2.7:free', 'MiniMax M2.7', 'S+', '78.0%', '42k'], // Added (2026-09-02)
|
|
453
489
|
['muse-glimmer-30b:free', 'Muse Glimmer 30B', 'B+', '-', '131k'], // Added (2026-09-02)
|
|
454
|
-
|
|
490
|
+
// Removed (2026-09-15): kimi-k2.6:free (Kimi K2.6) — free variant removed, now paid-only; replacement: minimax-m2.7:free
|
|
455
491
|
// ── S tier — SWE-bench Verified 60–70% ──
|
|
456
492
|
// Removed (2026-09-05): laguna-xs.2:free (Poolside Laguna XS.2) - laguna-xs.2 no longer offered in any form, superseded by paid laguna-s-2.1
|
|
457
493
|
// Removed (2026-09-05): gpt-oss-120b:free (GPT OSS 120B) - free variant discontinued, only paid gpt-oss-120b remains ($0.04/$0.30 per M)
|
|
@@ -480,6 +516,11 @@ export const novita = [
|
|
|
480
516
|
// Removed (2026-07-27): qwen/qwen3.5-plus (Qwen3.5 Plus) — no longer in novita catalog
|
|
481
517
|
['inclusionai/ling-3.0-flash-fin', 'Ling 3.0 Flash Fin', 'B+', '-', '256k'],
|
|
482
518
|
['inclusionai/ling-3.0-flash-sante', 'Ling 3.0 Flash Sante', 'B+', '-', '256k'],
|
|
519
|
+
['bunny', 'Bunny (free tier)', 'C', '-', '256k'], // Added (2026-09-15) — verified via live audit
|
|
520
|
+
['qwen/qwen3.6-plus', 'Qwen 3.6 Plus (free tier)', 'A', '-', '1M'], // Added (2026-09-15) — verified via live audit
|
|
521
|
+
['qwen/qwen3.5-plus', 'Qwen 3.5 Plus (free tier)', 'A-', '-', '1M'], // Added (2026-09-15) — verified via live audit
|
|
522
|
+
['dev/glm46', 'GLM 4.6 (dev, free)', 'A-', '-', '256k'], // Added (2026-09-15) — verified via live audit
|
|
523
|
+
['inclusionai/ling-3.0-flash-vl', 'Ling 3.0 Flash VL', 'B+', '-', '256k'], // Added (2026-09-15) — verified via live audit
|
|
483
524
|
]
|
|
484
525
|
|
|
485
526
|
// 📖 Pollinations AI source - https://gen.pollinations.ai
|
|
@@ -515,7 +556,7 @@ export const pollinations = [
|
|
|
515
556
|
// 📖 and still reachable with free-tier rate limits (1000 RPM). Keep only the chat text models here.
|
|
516
557
|
export const siliconflow = [
|
|
517
558
|
// ── A tier — SWE-bench Verified 40–50% ──
|
|
518
|
-
['THUDM/GLM-Z1-9B-0414', 'GLM-Z1 9B', 'A', '-', '131k'],
|
|
559
|
+
['THUDM/GLM-Z1-9B-0414', 'GLM-Z1 9B', 'A', '-', '131k'], // Fixed (2026-09-15): ctx '131k' → '32k'
|
|
519
560
|
['deepseek-ai/DeepSeek-R1-0528-Qwen3-8B', 'DeepSeek R1 0528 Qwen3 8B', 'A', '-', '131k'],
|
|
520
561
|
// ── B+ tier ──
|
|
521
562
|
['Qwen/Qwen3-8B', 'Qwen3 8B', 'B+', '30.0%', '131k'],
|
|
@@ -523,6 +564,7 @@ export const siliconflow = [
|
|
|
523
564
|
['Qwen/Qwen3.5-4B', 'Qwen3.5 4B', 'A-', '-', '262k'],
|
|
524
565
|
['THUDM/GLM-4-9B-0414', 'GLM-4 9B', 'B+', '-', '32k'],
|
|
525
566
|
['Qwen/Qwen2.5-7B-Instruct', 'Qwen2.5 7B Instruct', 'B', '-', '32k'],
|
|
567
|
+
['Qwen/Qwen2.5-Coder-7B-Instruct', 'Qwen2.5 Coder 7B Instruct', 'B+', '-', '32k'], // Added (2026-09-15) — verified via live audit
|
|
526
568
|
]
|
|
527
569
|
|
|
528
570
|
// 📖 Requesty source - https://router.requesty.ai/v1
|
|
@@ -563,8 +605,10 @@ export const orcarouter = [
|
|
|
563
605
|
['deepseek/deepseek-v4-flash-free', 'DeepSeek V4 Flash (Free)', 'S+', '79.0%', '1M'],
|
|
564
606
|
// ── S tier — SWE-bench Verified 60–70% ──
|
|
565
607
|
['tencent/hy3-free', 'Tencent Hy3 (Free)', 'S', '-', '256k'],
|
|
608
|
+
['orcarouter/free', 'OrcaRouter Free (difficulty-routed)', 'S', '-', '-'], // Added (2026-09-15) — verified via live audit
|
|
566
609
|
// ── A+ tier — SWE-bench Verified 50–60% ──
|
|
567
|
-
|
|
610
|
+
// Removed (2026-09-15): qwen/qwen3.8-27b-free (Qwen3.8 27B (Free)) — no longer in catalog; only paid variant remains; replacement: z-ai/glm-5.3-flash-free
|
|
611
|
+
['z-ai/glm-5.3-flash-free', 'GLM-5.3 Flash (Free)', 'A+', '-', '1M'], // Added (2026-09-15) — verified via live audit
|
|
568
612
|
]
|
|
569
613
|
|
|
570
614
|
// 📖 Vercel AI Gateway source - https://vercel.com/docs/ai-gateway
|
|
@@ -578,11 +622,13 @@ export const orcarouter = [
|
|
|
578
622
|
// 📖 which is why this provider is quotaCode 'limited'.
|
|
579
623
|
export const vercelGateway = [
|
|
580
624
|
// ── S+ tier — SWE-bench Verified ≥70% ──
|
|
581
|
-
|
|
582
|
-
|
|
625
|
+
// Removed (2026-09-15): minimax/minimax-m3-free (MiniMax M3 (Free)) — free variant removed, now paid-only
|
|
626
|
+
// Removed (2026-09-15): minimax/minimax-m2.7-free (MiniMax M2.7 (Free)) — free variant removed, now paid-only
|
|
583
627
|
['poolside/laguna-s-2.1-free', 'Laguna S 2.1 (Free)', 'S+', '-', '256k'], // tier follows family precedent: laguna-xs-2.1 ships S+ 70.9% via NVIDIA. Caution: models.dev flags laguna-s-2.1 deprecated (2026-09-05, Zen promo ended) but Vercel still serves the $0 variant live - re-verify at next audit
|
|
584
628
|
// ── B+ tier — vertical-tuned lightweight (coding secondary) ──
|
|
585
629
|
['inclusionai/ling-3.0-flash-fin-free', 'Ling 3.0 Flash Fin (Free)', 'B+', '-', '256k'], // 124B MoE (5.1B active), finance-tuned, retains coding + math
|
|
630
|
+
['inclusionai/ling-3.0-flash-sante-free', 'Ling 3.0 Flash Sante (Free)', 'B+', '-', '256k'], // Added (2026-09-15) — verified via live audit
|
|
631
|
+
['inclusionai/ling-3.0-flash-vl-free', 'Ling 3.0 Flash VL (Free)', 'C', '-', '256k'], // Added (2026-09-15) — verified via live audit
|
|
586
632
|
]
|
|
587
633
|
|
|
588
634
|
// 📖 Ollama Cloud source - https://ollama.com/pricing and https://ollama.com/search?c=cloud
|
|
@@ -600,6 +646,7 @@ export const ollamaCloud = [
|
|
|
600
646
|
['deepseek-v4-flash:0731', 'DeepSeek V4 Flash', 'S+', '79.0%', '1M'], // Fixed (2026-08-23): ID 'deepseek-v4-flash' → 'deepseek-v4-flash:0731' (renamed upstream)
|
|
601
647
|
['deepseek-v4-pro:0813', 'DeepSeek V4 Pro', 'S+', '80.6%', '1M'], // Fixed (2026-08-23): ID 'deepseek-v4-pro' → 'deepseek-v4-pro:0813' (renamed upstream)
|
|
602
648
|
['glm-5.3', 'GLM 5.3', 'S+', '-', '1M'],
|
|
649
|
+
['deepseek-v4.1-flash', 'DeepSeek V4.1 Flash', 'S+', '-', '1M'], // Added (2026-09-15) — verified via live audit
|
|
603
650
|
// ── S tier — SWE-bench Verified 60–70% ──
|
|
604
651
|
['kimi-k2.7-code', 'Kimi K2.7 Code', 'S', '60.4%', '256k'], // Fixed (2026-07-27): ctx '262k' → '256k'
|
|
605
652
|
['gpt-oss:120b', 'GPT OSS 120B', 'S', '62.4%', '128k'],
|
|
@@ -21,12 +21,16 @@
|
|
|
21
21
|
* 📖 Continue: writes ~/.continue/config.yaml with provider: openai + apiBase
|
|
22
22
|
* 📖 Cline: writes ~/.cline/globalState.json with openai-compatible provider config
|
|
23
23
|
* 📖 ForgeCode: writes [[providers]] TOML block into ~/.forge/.forge.toml + sets [session] defaults
|
|
24
|
+
* 📖 FCM Router: built-in target with nothing to install or spawn; starts the daemon,
|
|
25
|
+
* pushes the selected model + favorites as the `fast-coding` routing set and prints
|
|
26
|
+
* the /v1 endpoint + model + key trio (issue #184)
|
|
24
27
|
*
|
|
25
28
|
* @functions
|
|
26
29
|
* → `resolveLauncherModelId` — choose the provider-specific id for a launch
|
|
27
30
|
* → `writeGooseConfig` — install provider + set GOOSE_PROVIDER/GOOSE_MODEL in config.yaml
|
|
28
31
|
* → `writeCrushConfig` — write provider + models.large/small to crush.json
|
|
29
32
|
* → `prepareExternalToolLaunch` — persist selected-model defaults and compute the launch command
|
|
33
|
+
* → `startFcmRouterLaunch` — daemon lifecycle + routing-set push + connection instructions for fcm_router mode
|
|
30
34
|
* → `startExternalTool` — configure and launch the selected external tool mode
|
|
31
35
|
*
|
|
32
36
|
* @exports resolveLauncherModelId, buildToolEnv, prepareExternalToolLaunch, startExternalTool
|
|
@@ -1100,6 +1104,21 @@ export function prepareExternalToolLaunch(mode, model, config, options = {}) {
|
|
|
1100
1104
|
}
|
|
1101
1105
|
}
|
|
1102
1106
|
|
|
1107
|
+
if (mode === 'fcm_router') {
|
|
1108
|
+
// 📖 FCM Router is built into FCM: nothing to install and no external binary to
|
|
1109
|
+
// 📖 spawn. Enter in this mode starts the daemon and routes the selected model
|
|
1110
|
+
// 📖 through it (see startFcmRouterLaunch). Issue #184.
|
|
1111
|
+
return {
|
|
1112
|
+
command: null,
|
|
1113
|
+
args: [],
|
|
1114
|
+
env,
|
|
1115
|
+
apiKey,
|
|
1116
|
+
baseUrl,
|
|
1117
|
+
meta,
|
|
1118
|
+
configArtifacts: [],
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1103
1122
|
return {
|
|
1104
1123
|
blocked: true,
|
|
1105
1124
|
exitCode: 1,
|
|
@@ -1109,6 +1128,92 @@ export function prepareExternalToolLaunch(mode, model, config, options = {}) {
|
|
|
1109
1128
|
}
|
|
1110
1129
|
}
|
|
1111
1130
|
|
|
1131
|
+
// 📖 startFcmRouterLaunch: the "launch" flow for the FCM Router target in the Z cycle
|
|
1132
|
+
// 📖 (issue #184). The router ships inside FCM, so there is nothing to install and no
|
|
1133
|
+
// 📖 CLI to spawn. Instead: make sure the daemon is running, push the selected model
|
|
1134
|
+
// 📖 as primary with the user's favorites as failover into the active `fast-coding`
|
|
1135
|
+
// 📖 set, then print the endpoint + model + key trio any OpenAI-compatible tool needs.
|
|
1136
|
+
async function startFcmRouterLaunch(model, config) {
|
|
1137
|
+
const meta = getToolMeta('fcm_router')
|
|
1138
|
+
console.log(chalk.cyan(` ▶ Configuring ${meta.label} with ${chalk.bold(model.label)}...`))
|
|
1139
|
+
|
|
1140
|
+
let status = null
|
|
1141
|
+
try {
|
|
1142
|
+
// 📖 Lazy import: router-daemon.js is large and only needed in this mode.
|
|
1143
|
+
const { startRouterDaemonBackground } = await import('./router-daemon.js')
|
|
1144
|
+
status = await startRouterDaemonBackground()
|
|
1145
|
+
} catch (error) {
|
|
1146
|
+
status = { ok: false, error: error instanceof Error ? error.message : String(error) }
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
if (!status?.ok) {
|
|
1150
|
+
console.log(chalk.red(` X Could not start the FCM Router daemon${status?.error ? `: ${status.error}` : '.'}`))
|
|
1151
|
+
console.log(chalk.dim(' Run `free-coding-models --daemon` in another terminal to see the startup error.'))
|
|
1152
|
+
console.log()
|
|
1153
|
+
return 1
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1156
|
+
const routerBaseUrl = `http://localhost:${status.port}`
|
|
1157
|
+
|
|
1158
|
+
// 📖 Selected model first, favorites as failover. Mirrors syncFavoritesToRouter
|
|
1159
|
+
// 📖 in the TUI but without the router.enabled gate: choosing the FCM Router
|
|
1160
|
+
// 📖 target in the Z cycle IS the intent, no extra setting required.
|
|
1161
|
+
const favorites = Array.isArray(config?.favorites) ? config.favorites : []
|
|
1162
|
+
const selKey = `${model.providerKey}/${model.modelId}`
|
|
1163
|
+
const chain = [selKey, ...favorites.filter((f) => f !== selKey)]
|
|
1164
|
+
const routerModels = chain.map((key, index) => {
|
|
1165
|
+
const slashIdx = key.indexOf('/')
|
|
1166
|
+
return {
|
|
1167
|
+
provider: slashIdx >= 0 ? key.slice(0, slashIdx) : '?',
|
|
1168
|
+
model: slashIdx >= 0 ? key.slice(slashIdx + 1) : key,
|
|
1169
|
+
priority: index + 1,
|
|
1170
|
+
}
|
|
1171
|
+
})
|
|
1172
|
+
|
|
1173
|
+
// 📖 POST creates-or-replaces the set (PUT alone 404s when the set is missing),
|
|
1174
|
+
// 📖 then activate makes it the routing target. Best-effort: a failure here
|
|
1175
|
+
// 📖 leaves the daemon on its default set, which still works, so we warn
|
|
1176
|
+
// 📖 instead of failing the whole launch.
|
|
1177
|
+
let setSynced = false
|
|
1178
|
+
try {
|
|
1179
|
+
const payload = JSON.stringify({ name: 'fast-coding', models: routerModels, created: new Date().toISOString() })
|
|
1180
|
+
const createRes = await fetch(`${routerBaseUrl}/sets`, {
|
|
1181
|
+
method: 'POST',
|
|
1182
|
+
headers: { 'Content-Type': 'application/json' },
|
|
1183
|
+
body: payload,
|
|
1184
|
+
signal: AbortSignal.timeout(5000),
|
|
1185
|
+
})
|
|
1186
|
+
if (createRes.ok || (await fetch(`${routerBaseUrl}/sets/fast-coding`, {
|
|
1187
|
+
method: 'PUT',
|
|
1188
|
+
headers: { 'Content-Type': 'application/json' },
|
|
1189
|
+
body: payload,
|
|
1190
|
+
signal: AbortSignal.timeout(5000),
|
|
1191
|
+
})).ok) {
|
|
1192
|
+
await fetch(`${routerBaseUrl}/sets/fast-coding/activate`, {
|
|
1193
|
+
method: 'POST',
|
|
1194
|
+
signal: AbortSignal.timeout(5000),
|
|
1195
|
+
}).catch(() => {})
|
|
1196
|
+
setSynced = true
|
|
1197
|
+
}
|
|
1198
|
+
} catch {}
|
|
1199
|
+
|
|
1200
|
+
console.log(chalk.green(` ✓ FCM Router ${status.alreadyRunning ? 'is running' : 'started'} at ${chalk.bold(`${routerBaseUrl}/v1`)}`))
|
|
1201
|
+
console.log()
|
|
1202
|
+
console.log(chalk.bold(' Point any OpenAI-compatible coding tool at the router:'))
|
|
1203
|
+
console.log(` ${chalk.dim('Base URL:')} ${routerBaseUrl}/v1`)
|
|
1204
|
+
console.log(` ${chalk.dim('API key:')} fcm-local${process.env.FCM_ROUTER_TOKEN ? ' (or your FCM_ROUTER_TOKEN value)' : ''}`)
|
|
1205
|
+
console.log(` ${chalk.dim('Model:')} fcm`)
|
|
1206
|
+
console.log()
|
|
1207
|
+
if (setSynced) {
|
|
1208
|
+
console.log(chalk.dim(` 📖 Routing chain: ${model.label} first${favorites.length > 0 ? `, ${favorites.length} favorite${favorites.length === 1 ? '' : 's'} as failover` : ''}.`))
|
|
1209
|
+
} else {
|
|
1210
|
+
console.log(chalk.yellow(' ⚠ Could not update the routing set; the daemon keeps its default set, which still works.'))
|
|
1211
|
+
}
|
|
1212
|
+
console.log(chalk.dim(' 📖 Dashboard: `free-coding-models web` · Docs: docs/router.md'))
|
|
1213
|
+
console.log()
|
|
1214
|
+
return 0
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1112
1217
|
export async function startExternalTool(mode, model, config) {
|
|
1113
1218
|
const launchPlan = prepareExternalToolLaunch(mode, model, config)
|
|
1114
1219
|
const { meta } = launchPlan
|
|
@@ -1119,6 +1224,10 @@ export async function startExternalTool(mode, model, config) {
|
|
|
1119
1224
|
return launchPlan.exitCode || 1
|
|
1120
1225
|
}
|
|
1121
1226
|
|
|
1227
|
+
// 📖 fcm_router has no binary to spawn: the helper starts the daemon, pushes
|
|
1228
|
+
// 📖 the routing set and prints connection instructions instead. Issue #184.
|
|
1229
|
+
if (mode === 'fcm_router') return startFcmRouterLaunch(model, config)
|
|
1230
|
+
|
|
1122
1231
|
console.log(chalk.cyan(` ▶ Launching ${meta.label} with ${chalk.bold(model.label)}...`))
|
|
1123
1232
|
printConfigArtifacts(meta.label, launchPlan.configArtifacts)
|
|
1124
1233
|
|
package/src/tui/key-handler.js
CHANGED
|
@@ -242,12 +242,15 @@ export function createKeyHandler(ctx) {
|
|
|
242
242
|
state.toolInstallPromptErrorMsg = null
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
|
|
245
|
+
function shouldCheckMissingTool(mode) {
|
|
246
246
|
// 📖 opencode-desktop doesn't have a binary check (it uses 'open -a').
|
|
247
247
|
// 📖 opencode-web, opencode, and kilo manage their own ENOENT errors in spawn handlers.
|
|
248
248
|
// 📖 xcode uses 'open -a Xcode' which doesn't need a binary path resolution.
|
|
249
249
|
// 📖 zcode is a desktop app with no CLI binary — the launch handler prints setup instructions.
|
|
250
|
-
|
|
250
|
+
// 📖 fcm_router ships inside FCM (nothing to install) — the launch handler starts the
|
|
251
|
+
// 📖 daemon itself. Without this exclusion Enter showed a bogus "Missing Tool" prompt
|
|
252
|
+
// 📖 reading "Unknown tool mode: fcm_router" (issue #184).
|
|
253
|
+
return !['opencode-desktop', 'opencode-web', 'opencode', 'kilo', 'xcode', 'zcode', 'fcm_router'].includes(mode)
|
|
251
254
|
}
|
|
252
255
|
|
|
253
256
|
function getModelTelemetryFamily(providerKey) {
|