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.
@@ -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.90",
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": "^8.21.3",
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
- ['qwen/qwen3.6-27b', 'Qwen3.6 27B', 'S+', '77.2%', '131k'],
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
- ['minimax/minimax-m2.7:free', 'MiniMax M2.7', 'S+', '56.2%', '192k'], // Added (2026-09-02)
160
- ['minimax/minimax-m3:free', 'MiniMax M3', 'S+', '78.4%', '1M'], // Added (2026-09-02)
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-2512', 'Mistral Large 3', 'S+', '70.0%', '256k'],
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-2603', 'Mistral Small 4', 'A', '48.0%', '256k'],
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-2512', '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)
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-2512', 'Ministral 3 8B', 'B', '-', '256k'], // Fixed (2026-08-13): id 'ministral-3-8b-25-12' → 'ministral-8b-2512'
208
- ['ministral-3b-2512', 'Ministral 3 3B', 'B', '-', '256k'], // Fixed (2026-08-13): id 'ministral-3-3b-25-12' → 'ministral-3b-2512'
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
- ['qwen3-coder-30b-a3b-instruct', 'Qwen3 Coder 30B', 'A+', '51.6%', '128k'],
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
- ['pixtral-12b-2409', 'Pixtral 12B', 'B+', '-', '128k'], // Restored (2026-09-05) — still Serverless per official docs; PR #178 EOL claim not confirmed
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
- ['qwen3-max', 'Qwen3 Max', 'S+', '78.8%', '256k'],
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
- ['qwen3-235b-a22b', 'Qwen3 235B', 'S+', '70.0%', '128k'],
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
- ['qwen3-coder-480b-a35b-instruct', 'Qwen3 Coder 480B', 'S', '69.6%', '256k'],
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
- ['qwen3-32b', 'Qwen3 32B', 'B+', '30.0%', '128k'],
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
- ['qwen3-next-80b-a3b-thinking', 'Qwen3 Next 80B Thinking', 'S+', '70.6%', '128k'],
320
- ['qwen3-next-80b-a3b-instruct', 'Qwen3 Next 80B Instruct', 'S+', '70.6%', '128k'],
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
- ['qwen3-30b-a3b', 'Qwen3 30B A3B', 'B', '25.2%', '128k'],
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
- ['@cf/meta/llama-3.1-8b-instruct-fast', 'Llama 3.1 8B Instruct (Fast)', 'C', '18.0%', '128k'],
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
- ['minimax/minimax-m2.7:free', 'MiniMax M2.7 (free)', 'A-', '-', '192k'],
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
- ['minimax/minimax-m3:free', 'MiniMax M3 (free)', 'S+', '80.5%', '1M'], // tier fixed: 80.5% >= 70% is S+ on the documented scale
425
- ['thinkingmachines/inkling:free', 'Thinking Machines Inkling (free)', 'S+', '80.2%', '1M'], // tier fixed: 80.2% >= 70% is S+ on the documented scale
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
- ['gpt-oss', 'GPT OSS 20B', 'A+', '50.3%', '131k'], // Fixed (2026-09-05): id 'gpt-oss:20b' 'gpt-oss', ctx '128k' '131k' (live 131072)
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
- ['kimi-k2.6:free', 'Kimi K2.6', 'S+', '-', '42k'],
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
- ['qwen/qwen3.8-27b-free', 'Qwen3.8 27B (Free)', 'A+', '-', '64k'],
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
- ['minimax/minimax-m3-free', 'MiniMax M3 (Free)', 'S+', '78.4%', '1M'], // score mirrors minimax-m3 (ollama-cloud, measured 2026-07-27)
582
- ['minimax/minimax-m2.7-free', 'MiniMax M2.7 (Free)', 'S+', '78.0%', '196k'], // score mirrors minimax-m2.7 (ollama-cloud, measured 2026-07-27)
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
 
@@ -242,12 +242,15 @@ export function createKeyHandler(ctx) {
242
242
  state.toolInstallPromptErrorMsg = null
243
243
  }
244
244
 
245
- function shouldCheckMissingTool(mode) {
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
- return !['opencode-desktop', 'opencode-web', 'opencode', 'kilo', 'xcode', 'zcode'].includes(mode)
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) {