free-coding-models 0.5.80 → 0.5.83

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/sources.js CHANGED
@@ -29,7 +29,7 @@
29
29
  * 📖 Secondary: https://swe-rebench.com (independent evals, scores are lower)
30
30
  * 📖 Leaderboard tracker: https://www.marc0.dev/en/leaderboard
31
31
  *
32
- * @exports nvidiaNim, groq, cerebras, sambanova, openrouter, githubModels, mistral, codestral, scaleway, googleai, zai, qwen, cloudflare, ovhcloud, opencodeZen, kilo, llm7, routeway, novita, ollamaCloud — model arrays per active provider
32
+ * @exports nvidiaNim, groq, cerebras, sambanova, openrouter, githubModels, mistral, codestral, scaleway, googleai, zai, qwen, cloudflare, ovhcloud, opencodeZen, kilo, llm7, routeway, novita, ollamaCloud, pollinations, siliconflow, requesty, orcarouter — model arrays per active provider
33
33
  * @exports sources — map of active free/free-limited providers, each with { name, url, models }
34
34
 
35
35
  * @exports MODELS — flat array of [modelId, label, tier, sweScore, ctx, providerKey]
@@ -43,17 +43,19 @@ export const nvidiaNim = [
43
43
  // ── S+ tier — SWE-bench Verified ≥70% ──
44
44
  // Removed (2026-08-23): z-ai/glm-5.2 (GLM 5.1) — no longer in integrate.api.nvidia.com/v1/models (102 models live)
45
45
  ['moonshotai/kimi-k2.6', 'Kimi K2.6', 'S+', '80.2%', '262k'],
46
- ['deepseek-ai/deepseek-v4-pro', 'DeepSeek V4 Pro', 'S+', '80.6%', '1M'], // ⚠️ Page-only / partner-routed (2026-08-13): listed on build.nvidia.com but NOT in integrate.api.nvidia.com/v1/models; served via Fireworks/DeepInfra/Together/OpenRouter
46
+ // Removed (2026-08-30): deepseek-ai/deepseek-v4-pro (DeepSeek V4 Pro) 410 Gone per NVIDIA NIM forum; replaced by deepseek-v4-flash:0731 (forums.developer.nvidia.com/t/deepseek-v4-pro-flash-removed/379558)
47
47
  ['deepseek-ai/deepseek-v4-flash-0731', 'DeepSeek V4 Flash', 'S+', '79.0%', '1M'], // Fixed (2026-08-13): id 'deepseek-ai/deepseek-v4-flash' → 'deepseek-ai/deepseek-v4-flash-0731' (NIM /v1/models only exposes the -0731 suffix)
48
- ['stepfun-ai/step-3.7-flash', 'Step 3.7 Flash', 'S+', '74.4%', '256k'],
48
+ // Removed (2026-08-30): stepfun-ai/step-3.7-flash (Step 3.7 Flash) 410 Gone per NVIDIA NIM TUI ping (no replacement listed; superseded by step-3.7-flash via Routeway `step-3.7-flash:free`)
49
49
  ['nvidia/nemotron-3-ultra-550b-a55b', 'Nemotron 3 Ultra', 'S+', '71.9%', '1M'],
50
50
  ['poolside/laguna-xs-2.1', 'Laguna XS 2.1', 'S+', '70.9%', '262k'], // Added (2026-08-13)
51
+ ['meta/muse-glimmer-30b', 'Muse Glimmer 30B', 'B+', '-', '128k'], // Added (2026-09-02) — new in NIM catalog
51
52
  // ── S tier — SWE-bench Verified 60–70% ──
52
53
  ['openai/gpt-oss-120b', 'GPT OSS 120B', 'S', '62.4%', '128k'],
53
54
  // Removed (2026-07-27): meta/llama-4-maverick-17b-128e-instruct (Llama 4 Maverick) — EOL 2026-07-27 (HTTP 410 Gone)
54
55
  // Removed (2026-08-23): mistralai/mistral-medium-3.5-128b (Mistral Medium 3.5) — no longer in integrate.api.nvidia.com/v1/models (still on Mistral LP directly)
55
56
  // Removed (2026-07-27): mistralai/mistral-small-4-119b-2603 (Mistral Small 4) — EOL 2026-07-27 (HTTP 410 Gone)
56
57
  ['minimaxai/minimax-m3', 'MiniMax M3', 'S+', '78.4%', '1M'],
58
+ ['moonshotai/kimi-k3', 'Kimi K3', 'S', '-', '262k'], // Added (2026-09-02) — new in NIM catalog
57
59
  ['mistralai/mistral-nemotron', 'Mistral Nemotron', 'S', '-', '128k'], // Fixed ID (2026-07-27): nvidia/mistral-nemotron → mistralai/mistral-nemotron
58
60
  // Removed (2026-07-27): deepseek-ai/deepseek-v3.2 (DeepSeek V3.2) — HTTP 404
59
61
  // ── A+ tier — SWE-bench Verified 50–60% ──
@@ -61,30 +63,30 @@ export const nvidiaNim = [
61
63
  ['nvidia/nemotron-3-super-120b-a12b', 'Nemotron 3 Super', 'S', '60.5%', '128k'],
62
64
  ['nvidia/nemotron-3-nano-omni-30b-a3b-reasoning', 'Nemotron 3 Omni', 'A+', '52.0%', '256k'],
63
65
  // Removed (2026-07-27): meta-llama/llama-4-scout-17b-16e-instruct (Llama 4 Scout) — HTTP 404
64
- ['nvidia/llama-3.3-nemotron-super-49b-v1.5', 'Llama 3.3 Nemotron Super 49B v1.5', 'A+', '-', '128k'],
66
+ // 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
65
67
  // ── A tier — SWE-bench Verified 40–50% ──
66
- ['nvidia/nemotron-3-nano-30b-a3b', 'Nemotron Nano 30B', 'A-', '38.8%', '1M'],
68
+ ['nvidia/nemotron-nano-3-30b-a3b', 'Nemotron Nano 30B', 'A-', '38.8%', '1M'],
67
69
  ['openai/gpt-oss-20b', 'GPT OSS 20B', 'A+', '50.3%', '128k'],
68
70
  ['google/gemma-4-31b-it', 'Gemma 4 31B', 'A+', '52.0%', '256k'],
69
- ['mistralai/mistral-large-2-instruct', 'Mistral Large 2', 'A+', '-', '128k'], // Added (2026-08-13)
71
+ // Removed (2026-08-30): mistralai/mistral-large-2-instruct (Mistral Large 2) 404 NOT FOUND per NVIDIA NIM TUI ping (model not in NIM catalog; use Mistral LP `mistral-large-2512`)
70
72
  // Removed (2026-07-27): qwen/qwen2.5-coder-32b-instruct (Qwen2.5 Coder 32B) — EOL 2026-05-12 (HTTP 410 Gone)
71
73
  // Removed (2026-07-27): deepseek-ai/deepseek-r1 (DeepSeek R1) — HTTP 404
72
74
  // Removed (2026-07-27): nvidia/nemotron-3-nano (Nemotron 3 Nano) — HTTP 404 (replaced by nvidia/nvidia-nemotron-nano-9b-v2)
73
- ['nvidia/nvidia-nemotron-nano-9b-v2', 'Nemotron Nano 9B v2', 'A-', '-', '128k'], // Added (2026-07-27)
74
- ['meta/llama-3.3-70b-instruct', 'Llama 3.3 70B', 'A+', '-', '128k'], // Added (2026-08-13)
75
- ['deepseek-ai/deepseek-coder-6.7b-instruct', 'DeepSeek Coder 6.7B', 'A-', '-', '128k'], // Added (2026-07-27)
76
- ['meta/codellama-70b', 'CodeLlama 70B', 'A', '-', '100k'], // Added (2026-08-13)
77
- ['mistralai/codestral-22b-instruct-v0.1', 'Codestral 22B', 'A', '-', '32k'], // Added (2026-07-27)
78
- ['ibm/granite-34b-code-instruct', 'Granite 34B Code', 'A-', '-', '128k'], // Added (2026-08-13)
75
+ // Removed (2026-08-30): nvidia/nvidia-nemotron-nano-9b-v2 (Nemotron Nano 9B v2) 410 Gone per NVIDIA NIM TUI ping (superseded by nvidia/nemotron-nano-3-30b-a3b)
76
+ // Removed (2026-08-30): meta/llama-3.3-70b-instruct (Llama 3.3 70B) 410 Gone per NVIDIA NIM TUI ping (no longer in NIM catalog)
77
+ // Removed (2026-08-30): deepseek-ai/deepseek-coder-6.7b-instruct (DeepSeek Coder 6.7B) 404 NOT FOUND per NVIDIA NIM TUI ping
78
+ // 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)
79
+ // 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)
80
+ // Removed (2026-08-30): ibm/granite-34b-code-instruct (Granite 34B Code) 404 NOT FOUND per NVIDIA NIM TUI ping
79
81
  // ── A- tier — SWE-bench Verified 35–40% ──
80
82
  // Removed (2026-07-27): bytedance/seed-oss-36b-instruct (Seed OSS 36B) — EOL 2026-07-27 (HTTP 410 Gone)
81
83
  // Removed (2026-07-27): stockmark/stockmark-2-100b-instruct (Stockmark 100B) — EOL 2026-07-15 (HTTP 410 Gone)
82
84
  // ── B+ tier — SWE-bench Verified 30–35% ──
83
85
  // Removed (2026-07-27): mistralai/ministral-14b-instruct-2512 (Ministral 14B) — EOL 2026-07-27 (HTTP 410 Gone)
84
- ['thinkingmachines/inkling', 'Inkling', 'B+', '-', '32k'], // Added (2026-07-27)
86
+ // Removed (2026-08-30): thinkingmachines/inkling (Inkling) 410 Gone per NVIDIA NIM TUI ping (per Model Deprecation Request 378412)
85
87
  // ── B tier — SWE-bench Verified 20–30% ──
86
88
  ['meta/llama-3.2-11b-vision-instruct', 'Llama 3.2 11B Vision', 'B', '28.0%', '128k'],
87
- ['nvidia/nemotron-mini-4b-instruct', 'Nemotron Mini 4B', 'B', '-', '32k'], // Added (2026-07-27)
89
+ // Removed (2026-08-30): nvidia/nemotron-mini-4b-instruct (Nemotron Mini 4B) 410 Gone per NVIDIA NIM TUI ping
88
90
  // ── C tier — lightweight/edge models ──
89
91
  // Removed (2026-07-27): microsoft/phi-4-mini-instruct (Phi 4 Mini) — EOL 2026-07-15 (HTTP 410 Gone)
90
92
  ]
@@ -107,6 +109,7 @@ export const cerebras = [
107
109
  // Removed (2026-08-23): zai-glm-4.7 (GLM 4.7) — shutdown 2026-08-17 per Cerebras official notice
108
110
  // ── S tier — SWE-bench Verified 60–70% ──
109
111
  ['gpt-oss-120b', 'GPT OSS 120B', 'S', '62.4%', '65k'], // Fixed (2026-07-27): ctx '128k' → '65k' (free tier per official docs)
112
+ // Removed (2026-09-05): MiniMax-M3 (MiniMax M3) — HTTP 404 "Model does not exist" per live API ping (PR #178 addition reverted)
110
113
  // ── A tier — SWE-bench Verified 40–50% ──
111
114
  ['gemma-4-31b', 'Gemma 4 31B', 'A+', '52.0%', '65k'], // Fixed (2026-07-27): ctx '128k' → '65k' (free tier per official docs)
112
115
  ]
@@ -117,6 +120,7 @@ export const cerebras = [
117
120
  export const sambanova = [
118
121
  // ── S+ tier ──
119
122
  ['MiniMax-M2.7', 'MiniMax M2.7', 'S+', '78.0%', '196k'], // Fixed (2026-07-27): ctx '192k' → '196k' (API exact 196608)
123
+ ['MiniMax-M3', 'MiniMax M3', 'S+', '78.4%', '196k'], // Added (2026-09-02) — verified live 2026-09-05 via /v1/models
120
124
  // ── S tier ──
121
125
  ['DeepSeek-V3.1', 'DeepSeek V3.1', 'S', '66.0%', '131k'], // Fixed (2026-07-27): ctx '128k' → '131k' (API exact 131072)
122
126
  ['DeepSeek-V3.2', 'DeepSeek V3.2', 'S+', '70.0%', '32k'],
@@ -141,39 +145,28 @@ export const sambanova = [
141
145
  export const openrouter = [
142
146
  // ── S+ tier — SWE-bench Verified ≥70% ──
143
147
  ['nvidia/nemotron-3-ultra-550b-a55b:free', 'Nemotron 3 Ultra', 'S+', '71.9%', '1M'],
144
- // Removed (2026-08-13): poolside/laguna-m.1:free (Poolside Laguna M.1) — no longer in OpenRouter catalog (neither :free nor paid)
145
148
  ['poolside/laguna-xs-2.1:free', 'Poolside Laguna XS 2.1', 'S+', '70.9%', '262k'],
146
- // Removed (2026-07-27): poolside/laguna-xs.2:free (Poolside Laguna XS.2) superseded by poolside/laguna-xs-2.1:free
149
+ ['poolside/laguna-s-2.1:free', 'Poolside Laguna S 2.1', 'S+', '-', '262k'],
150
+ ['minimax/minimax-m2.7:free', 'MiniMax M2.7', 'S+', '56.2%', '262k'], // Added (2026-09-02)
151
+ ['minimax/minimax-m3:free', 'MiniMax M3', 'S+', '78.4%', '1M'], // Added (2026-09-02)
152
+ ['z-ai/glm-5.2:free', 'GLM-5.2', 'S+', '-', '1M'], // Added (2026-09-02)
147
153
  // ── S tier — SWE-bench Verified 60–70% ──
148
154
  ['cohere/north-mini-code:free', 'North Mini Code', 'S', '-', '256k'],
149
- // Removed (2026-07-27): tencent/hy3:free (Tencent Hy3) no longer on OpenRouter free tier
150
- // Removed (2026-07-27): qwen/qwen3-coder:free (Qwen3 Coder) — no longer on OpenRouter free tier
151
- ['poolside/laguna-s-2.1:free', 'Poolside Laguna S 2.1', 'S+', '-', '262k'], // Added (2026-07-27)
155
+ ['nvidia/nemotron-3-super-120b-a12b:free', 'Nemotron 3 Super', 'S', '60.5%', '262k'],
152
156
  // ── A+ tier — SWE-bench Verified 50–60% ──
153
- ['nvidia/nemotron-3-super-120b-a12b:free', 'Nemotron 3 Super', 'S', '60.5%', '262k'], // Fixed (2026-08-13): ctx '1M' → '262k' (real API ctx)
154
157
  ['nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free', 'Nemotron 3 Omni', 'A+', '52.0%', '256k'],
155
- // Removed (2026-08-13): inclusionai/ling-3.0-flash:free (Ling-3.0 Flash) — :free variant removed, now paid-only
156
- ['liquid/lfm-2.5-2.6b:free', 'LiquidAI LFM2.5-2.6B', 'C', '-', '128k'], // Added (2026-08-13)
157
- ['nvidia/nemotron-3.5-lightning:free', 'NVIDIA Nemotron 3.5 Lightning', 'B+', '-', '1M'], // Added (2026-08-13)
158
- // ── A tier — SWE-bench Verified 40–50% ──
159
- ['nvidia/nemotron-3-nano-30b-a3b:free', 'Nemotron Nano 30B', 'A-', '38.8%', '256k'],
160
- ['nvidia/nemotron-nano-12b-v2-vl:free', 'Nemotron Nano 12B VL', 'A', '20.0%', '128k'],
161
158
  ['google/gemma-4-31b-it:free', 'Gemma 4 31B', 'A+', '52.0%', '262k'],
162
159
  ['google/gemma-4-26b-a4b-it:free', 'Gemma 4 26B MoE', 'A', '38.0%', '262k'],
163
- // Removed (2026-07-27): meta-llama/llama-3.3-70b-instruct:free (Llama 3.3 70B Instruct) — no longer on free tier
164
- // Removed (2026-07-27): nousresearch/hermes-3-llama-3.1-405b:free (Hermes 3 Llama 3.1 405B) — no longer on free tier
165
- // Removed (2026-07-27): qwen/qwen3-next-80b-a3b-instruct:free (Qwen3 Next 80B A3B) — no longer on free tier
166
160
  // ── B+ tier — SWE-bench Verified 30–35% ──
167
- ['nvidia/nemotron-nano-9b-v2:free', 'Nemotron Nano 9B', 'B+', '18.0%', '128k'],
168
- // Removed (2026-08-23): openai/gpt-oss-20b:free (GPT OSS 20B) :free variant removed from OpenRouter catalog; only paid variant remains ($0.03/$0.13)
161
+ ['liquid/lfm-2.5-2.6b:free', 'LiquidAI LFM2.5-2.6B', 'C', '-', '128k'],
162
+ ['nvidia/nemotron-3.5-lightning:free', 'NVIDIA Nemotron 3.5 Lightning', 'B+', '-', '1M'],
163
+ ['inclusionai/ling-3.0-flash-fin:free', 'Ling 3.0 Flash Fin', 'B+', '-', '128k'], // Added (2026-09-02)
164
+ ['thinkingmachines/inkling:free', 'Inkling', 'B+', '-', '262k'], // Added (2026-09-02)
169
165
  // ── B tier — SWE-bench Verified 20–30% ──
170
- // Removed (2026-07-27): openrouter/free (OpenRouter Free) no longer on free tier
171
- // Removed (2026-07-27): meta-llama/llama-3.2-3b-instruct:free (Llama 3.2 3B Instruct) no longer on free tier
172
- // Removed (2026-07-27): cognitivecomputations/dolphin-mistral-24b-venice-edition:free (Dolphin Mistral 24B Venice) — no longer on free tier
166
+ ['thinkingmachines/inkling-small:free', 'Inkling Small', 'B', '-', '128k'], // Added (2026-09-02)
167
+ ['dots-studio/dots-3-note-preview:free', 'Dots 3 Note Preview', 'B', '-', '128k'], // Added (2026-09-02)
173
168
  // ── C tier — lightweight/edge models ──
174
169
  ['nvidia/nemotron-3.5-content-safety:free', 'Nemotron 3.5 Content Safety', 'C', '-', '128k'],
175
- // Removed (2026-07-27): liquid/lfm-2.5-1.2b-instruct:free (LFM 2.5 1.2B Instruct) — no longer on free tier
176
- // Removed (2026-07-27): liquid/lfm-2.5-1.2b-thinking:free (LFM 2.5 1.2B Thinking) — no longer on free tier
177
170
  ]
178
171
 
179
172
  // 📖 GitHub Models source - https://models.github.ai
@@ -218,26 +211,25 @@ export const codestral = [
218
211
  // 📖 1M free tokens — API keys at https://console.scaleway.com/iam/api-keys
219
212
  export const scaleway = [
220
213
  // ── S+ tier — SWE-bench Verified ≥70% ──
221
- ['devstral-2-123b-instruct-2512', 'Devstral 2 123B', 'S+', '72.2%', '200k'], // Fixed (2026-08-13): ctx '260k' → '200k' (Serverless tier per official Scaleway catalog)
222
- ['qwen3-235b-a22b-instruct-2507', 'Qwen3 235B', 'A', '45.2%', '250k'],
223
214
  ['glm-5.2', 'GLM 5.2', 'S+', '82.8%', '256k'], // Fixed (2026-08-13): ctx '1M' → '256k' (Serverless tier per official catalog)
224
215
  ['deepseek-v4-flash-0731', 'DeepSeek V4 Flash', 'S+', '-', '256k'], // Added (2026-08-13)
216
+ ['devstral-2-123b-instruct-2512', 'Devstral 2 123B', 'S+', '72.2%', '200k'], // Restored (2026-09-05) — still Serverless per official docs; PR #178 EOL claim not confirmed
225
217
  // ── S tier — SWE-bench Verified 60–70% ──
226
218
  ['qwen3.5-397b-a17b', 'Qwen3.5 400B VLM', 'S+', '76.2%', '250k'],
227
219
  ['gpt-oss-120b', 'GPT OSS 120B', 'S', '62.4%', '128k'],
228
220
  ['mistral-medium-3.5-128b', 'Mistral Medium 3.5 128B', 'S+', '77.6%', '180k'], // Fixed (2026-07-27): ctx '256k' → '180k' (Serverless tier)
229
221
  // ── A+ tier — SWE-bench Verified 50–60% ──
230
- // Removed (2026-08-13): mistral-large-3-675b-instruct-2512 (Mistral Large 675B) — Dedicated tier only, not available on Serverless
231
222
  ['qwen3-coder-30b-a3b-instruct', 'Qwen3 Coder 30B', 'A+', '51.6%', '128k'],
232
223
  ['qwen3.6-35b-a3b', 'Qwen3.6 35B MoE', 'S+', '73.4%', '256k'],
233
- ['holo2-30b-a3b', 'Holo2 30B', 'A+', '52.0%', '22k'],
224
+ ['holo2-30b-a3b', 'Holo2 30B', 'A+', '52.0%', '22k'], // Added (2026-08-13)
234
225
  ['gemma-4-26b-a4b-it', 'Gemma 4 26B MoE', 'A+', '-', '256k'],
235
- // Removed (2026-08-13): gemma-4-31b-it (Gemma 4 31B IT) — Dedicated tier only, not available on Serverless
226
+ // Removed (2026-09-02): gemma-4-31b-it (Gemma 4 31B IT) — Dedicated tier only, not available on Serverless
227
+ ['qwen3-235b-a22b-instruct-2507', 'Qwen3 235B', 'A', '45.2%', '250k'], // Restored (2026-09-05) — still Serverless per official docs (silently dropped by PR #178)
236
228
  // ── A- tier — SWE-bench Verified 35–40% ──
237
229
  ['llama-3.3-70b-instruct', 'Llama 3.3 70B', 'B', '22.0%', '100k'], // Fixed (2026-08-13): ctx '128k' → '100k' (Serverless tier per official catalog)
238
230
  // ── B+ tier — SWE-bench Verified 30–35% ──
239
231
  ['mistral-small-3.2-24b-instruct-2506', 'Mistral Small 3.2', 'B', '20.0%', '128k'],
240
- ['pixtral-12b-2409', 'Pixtral 12B', 'B+', '-', '128k'],
232
+ ['pixtral-12b-2409', 'Pixtral 12B', 'B+', '-', '128k'], // Restored (2026-09-05) — still Serverless per official docs; PR #178 EOL claim not confirmed
241
233
  // ── B tier — SWE-bench Verified 20–30% ──
242
234
  ['gemma-3-27b-it', 'Gemma 3 27B', 'B', '22.0%', '40k'],
243
235
  ]
@@ -245,16 +237,18 @@ export const scaleway = [
245
237
  // 📖 Google AI Studio source - https://aistudio.google.com
246
238
  // 📖 OpenAI-compatible endpoint exposes Gemini models; free quotas vary by model and region.
247
239
  export const googleai = [
240
+ ['gemini-3.8-flash', 'Gemini 3.8 Flash', 'S+', '-', '1M'], // Added (2026-09-02) — free tier per official pricing page
248
241
  ['gemini-3.7-flash', 'Gemini 3.7 Flash', 'S+', '-', '1M'], // Added (2026-08-13)
249
242
  ['gemini-3.6-flash', 'Gemini 3.6 Flash', 'S+', '-', '1M'], // Added (2026-07-27)
250
- ['gemini-3.5-flash', 'Gemini 3.5 Flash', 'S+', '78.0%', '1M'],
251
- ['gemini-3.1-pro-preview', 'Gemini 3.1 Pro Preview', 'S+', '80.6%', '1M'],
252
- ['gemini-3-flash-preview', 'Gemini 3 Flash Preview', 'S+', '78.0%', '1M'],
243
+ ['gemini-3.5-flash', 'Gemini 3.5 Flash', 'S+', '78.0%', '1M'], // Added (2026-09-02)
253
244
  ['gemini-3.5-flash-lite', 'Gemini 3.5 Flash Lite', 'S', '-', '1M'], // Added (2026-07-27)
254
245
  ['gemini-3.1-flash-lite', 'Gemini 3.1 Flash Lite', 'S', '62.8%', '1M'],
255
- ['gemini-2.5-pro', 'Gemini 2.5 Pro', 'S', '63.8%', '1M'],
256
246
  ['gemini-2.5-flash', 'Gemini 2.5 Flash', 'A+', '54.0%', '1M'],
257
247
  ['gemini-2.5-flash-lite', 'Gemini 2.5 Flash Lite', 'A', '42.6%', '1M'],
248
+ ['gemini-3-flash-preview', 'Gemini 3 Flash Preview', 'S+', '78.0%', '1M'], // Restored (2026-09-05) — free tier confirmed per official pricing page
249
+ ['gemini-2.5-pro', 'Gemini 2.5 Pro', 'S', '63.8%', '1M'], // Restored (2026-09-05) — free tier confirmed per official pricing page
250
+ // 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)
251
+ // Removed (2026-09-05): gemini-2.0-flash — not listed on the official pricing page (PR #178 addition reverted)
258
252
  ]
259
253
 
260
254
  // 📖 ZAI source - https://open.z.ai
@@ -263,6 +257,7 @@ export const googleai = [
263
257
  // 📖 glm-4.7-flash is free but was returning "overloaded" 429s; API /models lists only 9 text models.
264
258
  export const zai = [
265
259
  // ── S+ tier — SWE-bench Verified ≥70% ──
260
+ ['zai/glm-5.3-flash', 'GLM-5.3-Flash', 'S+', '-', '1M'], // Added (2026-09-02)
266
261
  ['zai/glm-5.2', 'GLM-5.2', 'S+', '-', '1M'], // Added (2026-08-13)
267
262
  // ── S tier — SWE-bench Verified 60–70% ──
268
263
  ['zai/glm-4.7-flash', 'GLM-4.7-Flash', 'A+', '59.2%', '200k'], // Fixed (2026-07-27): ctx '203k' → '200k' per official docs
@@ -340,8 +335,8 @@ export const cloudflare = [
340
335
  ['@cf/ibm-granite/granite-4.0-h-micro', 'Granite 4.0 Micro', 'B+', '30.0%', '128k'], // Fixed (2026-07-27): namespace 'ibm' → 'ibm-granite'
341
336
  // ── B tier — SWE-bench Verified 20–30% ──
342
337
  ['@cf/meta/llama-3.1-8b-instruct-fast', 'Llama 3.1 8B Instruct (Fast)', 'C', '18.0%', '128k'],
343
- ['@cf/google/gemma-3-12b-it', 'Gemma 3 12B IT', 'A', '-', '128k'], // Added (2026-08-13)
344
- ['@cf/moonshotai/kimi-k2.5', 'Kimi K2.5', 'S+', '-', '256k'], // Added (2026-08-13)
338
+ // 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)
339
+ // 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)
345
340
  ]
346
341
 
347
342
  // 📖 OVHcloud AI Endpoints - https://endpoints.ai.cloud.ovh.net
@@ -377,15 +372,13 @@ export const ovhcloud = [
377
372
  // 📖 Config: set provider to opencode/<model-id> in OpenCode config
378
373
  export const opencodeZen = [
379
374
  ['big-pickle', 'Big Pickle', 'S+', '72.0%', '200k'],
380
- // Removed (2026-08-23): deepseek-v4-flash-free (DeepSeek V4 Flash Free) dropped from Zen free-tier docs/pricing; only paid DeepSeek V4 Flash remains
375
+ ['deepseek-v4-flash-free', 'DeepSeek V4 Flash Free', 'S+', '79.0%', '200k'], // Restored (2026-09-02) still in /v1/models live
381
376
  ['mimo-v2.5-free', 'MiMo-V2.5 Free', 'S+', '-', '200k'],
382
377
  ['nemotron-3-ultra-free', 'Nemotron 3 Ultra Free', 'S+', '71.9%', '200k'],
383
- // Removed (2026-08-13): north-mini-code-free (North Mini Code Free) — no longer in OpenCode Zen free-tier API
384
- // Removed (2026-08-23): laguna-s-2.1-free (Laguna S 2.1 Free) — dropped from Zen free-tier docs/pricing (still on /models but no longer free)
385
- // Removed (2026-08-13): ling-3.0-flash-free (Ling-3.0-flash Free) — no longer in OpenCode Zen free-tier API
386
- ['hy3-free', 'Tencent Hy3 Free', 'S', '-', '200k'], // Added (2026-08-13) — brought back after July removal
378
+ // Removed (2026-09-05): hy3-free (Tencent Hy3 Free) — absent from live /v1/models (66 models checked)
387
379
  ['nemotron-3.5-lightning-free', 'Nemotron 3.5 Lightning Free','S+','-', '200k'], // Added (2026-08-13)
388
- // Removed (2026-07-27): hy3-free (Tencent Hy3 Free) — no longer on OpenCode Zen
380
+ ['laguna-s-2.1-free', 'Laguna S 2.1 Free', 'S+', '-', '200k'], // Restored (2026-09-05) — back in live /v1/models
381
+ ['ling-3.0-flash-fin-free', 'Ling 3.0 Flash Fin Free', 'B+', '-', '200k'], // Added (2026-09-05) — new id in live /v1/models (was ling-3.0-flash-free)
389
382
  ]
390
383
 
391
384
  // 📖 Kilo source - https://api.kilo.ai/api/gateway
@@ -401,11 +394,13 @@ export const kilo = [
401
394
  // 📖 Pro-tagged models from /v1/models are intentionally excluded.
402
395
  export const llm7 = [
403
396
  // 📖 LLM7 live /v1/models: only `turbo` tier is free (noKeyNeeded). All `pro` models are usage-based paid.
397
+ // 📖 Verified live 2026-09-05: turbo tier = minimax-m2.7, gpt-oss, mistral-Nemo-Instruct-2407, codestral-latest.
398
+ // Removed (2026-09-05): glm-5.3, glm-5.3-flash, gemini-3.5-flash-low, gpt-5.4, gpt-5.4-mini, gpt-5.5, gpt-5.6-sol, grok-4.5, grok-4.6 — tier=pro usage_based_only (paid) or nonexistent on /v1/models (PR #178 additions reverted)
404
399
  // ── S+ tier — SWE-bench Verified ≥70% ──
405
400
  ['minimax-m2.7', 'MiniMax M2.7', 'S+', '78.0%', '180k'],
406
401
  // ── A+ tier — SWE-bench Verified 50–60% ──
407
- ['gemini-3.1-flash-lite', 'Gemini 3.1 Flash Lite', 'A+', '-', '256k'], // Fixed (2026-08-13): ctx '1M' → '256k' (real LLM7 ctx limit)
408
- ['gpt-oss:20b', 'GPT OSS 20B', 'A+', '50.3%', '128k'],
402
+ // 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
403
+ ['gpt-oss', 'GPT OSS 20B', 'A+', '50.3%', '131k'], // Fixed (2026-09-05): id 'gpt-oss:20b' → 'gpt-oss', ctx '128k' → '131k' (live 131072)
409
404
  ['mistral-Nemo-Instruct-2407', 'Mistral Nemo 12B Instruct', 'A-', '-', '128k'], // Added (2026-08-13)
410
405
  // ── A tier — SWE-bench Verified 40–50% ──
411
406
  ['codestral-latest', 'Codestral Latest', 'A', '40.0%', '32k'],
@@ -416,14 +411,12 @@ export const llm7 = [
416
411
  // 📖 Live catalog checked 2026-06-11; only chat-completions models with free pricing are listed.
417
412
  export const routeway = [
418
413
  // ── S+ tier — SWE-bench Verified ≥70% ──
419
- // Removed (2026-08-13): deepseek-v4-flash:free (DeepSeek V4 Flash) — no longer in zero-price catalog (only paid DeepSeek V4 Pro 0813 remains)
420
- // Removed (2026-08-13): step-3.5-flash:free (Step 3.5 Flash) — superseded by step-3.7-flash:free
421
- // Removed (2026-07-27): laguna-m.1:free (Poolside Laguna M.1) — unavailable on Routeway
422
- ['laguna-xs.2:free', 'Poolside Laguna XS.2', 'S', '68.2%', '131k'],
414
+ ['deepseek-v4-flash:free', 'DeepSeek V4 Flash', 'S+', '79.0%', '256k'], // Restored (2026-09-02) — back in zero-price catalog
423
415
  ['step-3.7-flash:free', 'Step 3.7 Flash', 'S+', '74.4%', '256k'], // Added (2026-07-27)
416
+ ['minimax-m2.7:free', 'MiniMax M2.7', 'S+', '78.0%', '256k'], // Added (2026-09-02)
417
+ ['muse-glimmer-30b:free', 'Muse Glimmer 30B', 'B+', '-', '256k'], // Added (2026-09-02)
424
418
  // ── S tier — SWE-bench Verified 60–70% ──
425
- // Removed (2026-08-13): ling-3.0-flash:free (Ling 3.0 Flash) no longer in zero-price catalog
426
- // Removed (2026-08-13): ling-2.6-flash:free (Ling 2.6 Flash) — no longer in zero-price catalog
419
+ ['laguna-xs.2:free', 'Poolside Laguna XS.2', 'S', '68.2%', '131k'],
427
420
  ['gpt-oss-120b:free', 'GPT OSS 120B', 'S', '60.0%', '131k'],
428
421
  // ── A tier — SWE-bench Verified 40–50% ──
429
422
  ['gemma-4-31b-it:free', 'Gemma 4 31B', 'A+', '52.0%', '262k'],
@@ -450,6 +443,84 @@ export const novita = [
450
443
  // Removed (2026-07-27): qwen/qwen3.5-plus (Qwen3.5 Plus) — no longer in novita catalog
451
444
  ]
452
445
 
446
+ // 📖 Pollinations AI source - https://gen.pollinations.ai
447
+ // 📖 OpenAI-compatible endpoint: https://gen.pollinations.ai/v1/chat/completions
448
+ // 📖 Free tier: anonymous without key or free API key from https://enter.pollinations.ai
449
+ // 📖 Daily Pollen grants per tier (seed/flower/nectar) — free models cost Pollen but grants renew daily; anonymous tier has rate limits.
450
+ // 📖 Verified live 2026-08-23 via GET /v1/models (319 models); IDs below are live and coding-relevant.
451
+ export const pollinations = [
452
+ // ── S+ tier — SWE-bench Verified ≥70% ──
453
+ ['laguna', 'Laguna XS.2', 'S+', '70.9%', '1M'],
454
+ ['minimax-m2.7', 'MiniMax M2.7', 'S+', '78.0%', '200k'],
455
+ // ── S tier — SWE-bench Verified 60–70% ──
456
+ ['qwen-coder', 'Qwen3 Coder', 'S', '69.6%', '262k'],
457
+ ['deepseek', 'DeepSeek V3', 'S', '66.0%', '1M'],
458
+ ['kimi-code', 'Kimi K2 Code', 'S', '60.4%', '262k'],
459
+ ['openai', 'OpenAI GPT', 'S', '62.4%', '400k'],
460
+ // ── A+ tier — SWE-bench Verified 50–60% ──
461
+ ['gemma-4-31b', 'Gemma 4 31B', 'A+', '52.0%', '262k'],
462
+ ['gpt-oss', 'GPT OSS 20B', 'A+', '50.3%', '131k'],
463
+ ['qwen3.7-flash', 'Qwen3.7 Flash', 'A+', '-', '1M'],
464
+ // ── B+ tier ──
465
+ ['nemotron-3.5-lightning', 'Nemotron 3.5 Lightning', 'B+', '-', '262k'],
466
+ ]
467
+
468
+ // 📖 SiliconFlow source - https://api.siliconflow.cn/v1/chat/completions
469
+ // 📖 OpenAI-compatible endpoint: https://api.siliconflow.cn/v1
470
+ // 📖 Free tier: permanently free models at $0 (no card needed beyond phone SMS verification).
471
+ // 📖 Verified 2026-08-23 via pricing page + docs: THUDM/GLM-Z1-9B-0414 is 免费; Qwen3-8B and DeepSeek-R1-Distill-Qwen-7B
472
+ // 📖 documented as free in SiliconFlow guide 2026-06-05 ("Three models are completely free: Qwen3-8B, DeepSeek-R1-Distill-Qwen-7B, DeepSeek-OCR")
473
+ // 📖 and still reachable with free-tier rate limits (1000 RPM). Keep only the chat text models here.
474
+ export const siliconflow = [
475
+ // ── A tier — SWE-bench Verified 40–50% ──
476
+ ['THUDM/GLM-Z1-9B-0414', 'GLM-Z1 9B', 'A', '-', '32k'],
477
+ // ── B+ tier ──
478
+ ['Qwen/Qwen3-8B', 'Qwen3 8B', 'B+', '30.0%', '32k'],
479
+ ['deepseek-ai/DeepSeek-R1-Distill-Qwen-7B', 'DeepSeek R1 Distill Qwen 7B', 'A', '-', '32k'],
480
+ ]
481
+
482
+ // 📖 Requesty source - https://router.requesty.ai/v1
483
+ // 📖 OpenAI-compatible gateway: https://router.requesty.ai/v1/chat/completions
484
+ // 📖 Free tier: 200 req/day on zero-price free models (4× OpenRouter), no card, EU residency, routing/caching included.
485
+ // 📖 Verified live 2026-08-23 via GET /v1/models (676 models, 12 with input_price=0 & output_price=0).
486
+ export const requesty = [
487
+ // ── S+ tier — SWE-bench Verified ≥70% ──
488
+ ['nvidia/nemotron-3-ultra-550b-a55b', 'Nemotron 3 Ultra', 'S+', '71.9%', '1M'],
489
+ ['poolside/laguna-xs.2', 'Laguna XS.2', 'S+', '70.9%', '32k'],
490
+ // ── S tier — SWE-bench Verified 60–70% ──
491
+ ['nvidia/nemotron-3-super-120b-a12b', 'Nemotron 3 Super', 'S', '60.5%', '1M'],
492
+ ['poolside/laguna-m.1', 'Laguna M.1', 'S', '-', '32k'],
493
+ // ── A+ tier — SWE-bench Verified 50–60% ──
494
+ ['google/gemma-4-31b-it', 'Gemma 4 31B', 'A+', '52.0%', '262k'],
495
+ ['nvidia/nemotron-3-nano-omni-30b-a3b-reasoning', 'Nemotron 3 Omni', 'A+', '52.0%', '131k'],
496
+ // ── A tier — SWE-bench Verified 40–50% ──
497
+ ['nvidia/nemotron-nano-3-30b-a3b', 'Nemotron Nano 30B', 'A-', '38.8%', '262k'],
498
+ // ── B+ tier — SWE-bench Verified 30–35% ──
499
+ ['nvidia/nemotron-3.5-lightning-30b-a3b', 'Nemotron 3.5 Lightning', 'B+', '-', '1M'],
500
+ // ── B tier — SWE-bench Verified 20–30% ──
501
+ ['mistral/leanstral-1-5', 'Leanstral 1.5', 'B', '-', '262k'],
502
+ ['novita/inclusionai/ling-3.0-tiny', 'Ling 3.0 Tiny', 'B', '-', '262k'],
503
+ // ── C tier — other zero-price models (kept for breadth) ──
504
+ ['nvidia/nemotron-3.5-content-safety', 'Nemotron Content Safety', 'C', '-', '131k'],
505
+ ['nvidia/muse-glimmer-30b', 'Muse Glimmer 30B', 'C', '-', '131k'],
506
+ ]
507
+
508
+ // 📖 OrcaRouter source - https://api.orcarouter.ai/v1
509
+ // 📖 OpenAI-compatible gateway: https://api.orcarouter.ai/v1/chat/completions
510
+ // 📖 Zero-markup AI gateway: token prices are passed through at provider rates, so only
511
+ // 📖 the explicitly $-0 models are listed here. Verified live 2026-08-30 via GET /v1/models
512
+ // 📖 (204 models, 3 with pricing.request=0). The orcarouter/fusion + orcarouter/free
513
+ // 📖 adaptive-routing models are reachable through the same endpoint for users who opt
514
+ // 📖 into pay-as-you-go billing, but are not free so they stay out of this catalog.
515
+ export const orcarouter = [
516
+ // ── S+ tier — SWE-bench Verified ≥70% ──
517
+ ['deepseek/deepseek-v4-flash-free', 'DeepSeek V4 Flash (Free)', 'S+', '79.0%', '1M'],
518
+ // ── S tier — SWE-bench Verified 60–70% ──
519
+ ['tencent/hy3-free', 'Tencent Hy3 (Free)', 'S', '-', '256k'],
520
+ // ── A+ tier — SWE-bench Verified 50–60% ──
521
+ ['qwen/qwen3.8-27b-free', 'Qwen3.8 27B (Free)', 'A+', '-', '64k'],
522
+ ]
523
+
453
524
  // 📖 Ollama Cloud source - https://ollama.com/pricing and https://ollama.com/search?c=cloud
454
525
  // 📖 Free plan includes cloud model access with session/weekly limits. This list keeps coding-relevant cloud models only.
455
526
  // 📖 Catalog verified 2026-07-18 against official Ollama cloud model search page.
@@ -536,7 +607,7 @@ export const sources = {
536
607
  },
537
608
  cloudflare: {
538
609
  name: 'Cloudflare AI',
539
- url: 'https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/v1/chat/completions',
610
+ url: 'https://api.cloudflare.com/client/v4/accounts/{$CLOUDFLARE_ACCOUNT_ID}/ai/v1/chat/completions',
540
611
  quota: 'Free · 10k neurons/day',
541
612
  quotaCode: 'limited',
542
613
  models: cloudflare,
@@ -592,7 +663,7 @@ export const sources = {
592
663
  },
593
664
 
594
665
  'opencode-zen': {
595
- name: 'OpenCode Zen',
666
+ name: 'OpencodeZen',
596
667
  url: 'https://opencode.ai/zen/v1/chat/completions',
597
668
  quota: 'Free · Zen key required',
598
669
  quotaCode: 'free',
@@ -629,6 +700,34 @@ export const sources = {
629
700
  quotaCode: 'limited',
630
701
  models: novita, // Empty — kept for backward compat in user configs
631
702
  },
703
+ pollinations: {
704
+ name: 'Pollinations AI',
705
+ url: 'https://gen.pollinations.ai/v1/chat/completions',
706
+ quota: 'Free · daily Pollen grants · key at enter.pollinations.ai',
707
+ quotaCode: 'free',
708
+ models: pollinations,
709
+ },
710
+ siliconflow: {
711
+ name: 'SiliconFlow',
712
+ url: 'https://api.siliconflow.cn/v1/chat/completions',
713
+ quota: 'Free · 3 models @ $0 · 1000 RPM',
714
+ quotaCode: 'free',
715
+ models: siliconflow,
716
+ },
717
+ requesty: {
718
+ name: 'Requesty',
719
+ url: 'https://router.requesty.ai/v1/chat/completions',
720
+ quota: 'Free · 200 req/day · no card',
721
+ quotaCode: 'free',
722
+ models: requesty,
723
+ },
724
+ orcarouter: {
725
+ name: 'OrcaRouter',
726
+ url: 'https://api.orcarouter.ai/v1/chat/completions',
727
+ quota: 'Free · 3 $-0 models · zero markup',
728
+ quotaCode: 'free',
729
+ models: orcarouter,
730
+ },
632
731
  'ollama-cloud': {
633
732
  name: 'Ollama Cloud',
634
733
  url: 'https://ollama.com/v1/chat/completions',
@@ -141,7 +141,7 @@ export function buildBenchmarkRequest(apiKey, modelId, providerKey, url) {
141
141
 
142
142
  const headers = { 'Content-Type': 'application/json' }
143
143
  if (apiKey) headers.Authorization = `Bearer ${apiKey}`
144
- if (providerKey === 'openrouter') {
144
+ if (providerKey === 'openrouter' || providerKey === 'orcarouter') {
145
145
  headers['HTTP-Referer'] = 'https://github.com/vava-nessa/free-coding-models'
146
146
  headers['X-Title'] = 'free-coding-models'
147
147
  }
@@ -183,6 +183,10 @@ const ENV_VARS = {
183
183
  routeway: 'ROUTEWAY_API_KEY',
184
184
  novita: 'NOVITA_API_KEY',
185
185
  'ollama-cloud': 'OLLAMA_API_KEY',
186
+ pollinations: ['POLLINATIONS_API_KEY', 'POLLINATIONS_TOKEN'],
187
+ siliconflow: 'SILICONFLOW_API_KEY',
188
+ requesty: 'REQUESTY_API_KEY',
189
+ orcarouter: 'ORCAROUTER_API_KEY',
186
190
  }
187
191
 
188
192
  // 📖 Smart Router defaults are intentionally conservative: balanced probing,
@@ -171,7 +171,10 @@ function resolveProviderBaseUrl(providerKey) {
171
171
  if (providerKey === 'cloudflare') {
172
172
  const accountId = (process.env.CLOUDFLARE_ACCOUNT_ID || '').trim()
173
173
  if (!accountId) return null
174
- return providerUrl.replace('{account_id}', accountId).replace(/\/chat\/completions$/i, '')
174
+ return providerUrl
175
+ .replace(/\{\$CLOUDFLARE_ACCOUNT_ID\}/g, encodeURIComponent(accountId))
176
+ .replace(/\{account_id\}/g, encodeURIComponent(accountId))
177
+ .replace(/\/chat\/completions$/i, '')
175
178
  }
176
179
 
177
180
  return providerUrl
@@ -189,7 +192,9 @@ function resolveGooseBaseUrl(providerKey) {
189
192
  if (providerKey === 'cloudflare') {
190
193
  const accountId = (process.env.CLOUDFLARE_ACCOUNT_ID || '').trim()
191
194
  if (!accountId) return null
192
- return providerUrl.replace('{account_id}', accountId)
195
+ return providerUrl
196
+ .replace(/\{\$CLOUDFLARE_ACCOUNT_ID\}/g, encodeURIComponent(accountId))
197
+ .replace(/\{account_id\}/g, encodeURIComponent(accountId))
193
198
  }
194
199
  return providerUrl
195
200
  }
package/src/core/kilo.js CHANGED
@@ -110,6 +110,13 @@ export async function startKilo(model, fcmConfig) {
110
110
  options: { baseURL: 'https://openrouter.ai/api/v1', apiKey: '{env:OPENROUTER_API_KEY}' },
111
111
  models: {}
112
112
  }
113
+ } else if (providerKey === 'orcarouter') {
114
+ config.provider.orcarouter = {
115
+ npm: '@ai-sdk/openai-compatible',
116
+ name: 'OrcaRouter',
117
+ options: { baseURL: 'https://api.orcarouter.ai/v1', apiKey: '{env:ORCAROUTER_API_KEY}' },
118
+ models: {}
119
+ }
113
120
  } else if (providerKey === 'huggingface') {
114
121
  config.provider.huggingface = {
115
122
  npm: '@ai-sdk/openai-compatible',
@@ -163,7 +170,7 @@ export async function startKilo(model, fcmConfig) {
163
170
  config.provider.siliconflow = {
164
171
  npm: '@ai-sdk/openai-compatible',
165
172
  name: 'SiliconFlow',
166
- options: { baseURL: 'https://api.siliconflow.com/v1', apiKey: '{env:SILICONFLOW_API_KEY}' },
173
+ options: { baseURL: 'https://api.siliconflow.cn/v1', apiKey: '{env:SILICONFLOW_API_KEY}' },
167
174
  models: {}
168
175
  }
169
176
  } else if (providerKey === 'together') {
@@ -44,6 +44,7 @@ export const PROVIDER_ALIASES = {
44
44
  nvidiaNim: 'nvidia',
45
45
  nvidia: 'nvidia',
46
46
  openrouter: 'openrouter',
47
+ orcarouter: 'orcarouter',
47
48
  groq: 'groq',
48
49
  cerebras: 'cerebras',
49
50
  github: 'github-models',
@@ -425,6 +425,13 @@ export async function startOpenCode(model, fcmConfig) {
425
425
  options: { baseURL: 'https://openrouter.ai/api/v1', apiKey: '{env:OPENROUTER_API_KEY}' },
426
426
  models: {}
427
427
  }
428
+ } else if (providerKey === 'orcarouter') {
429
+ config.provider.orcarouter = {
430
+ npm: '@ai-sdk/openai-compatible',
431
+ name: 'OrcaRouter',
432
+ options: { baseURL: 'https://api.orcarouter.ai/v1', apiKey: '{env:ORCAROUTER_API_KEY}' },
433
+ models: {}
434
+ }
428
435
  } else if (providerKey === 'huggingface') {
429
436
  config.provider.huggingface = {
430
437
  npm: '@ai-sdk/openai-compatible',
@@ -478,7 +485,7 @@ export async function startOpenCode(model, fcmConfig) {
478
485
  config.provider.siliconflow = {
479
486
  npm: '@ai-sdk/openai-compatible',
480
487
  name: 'SiliconFlow',
481
- options: { baseURL: 'https://api.siliconflow.com/v1', apiKey: '{env:SILICONFLOW_API_KEY}' },
488
+ options: { baseURL: 'https://api.siliconflow.cn/v1', apiKey: '{env:SILICONFLOW_API_KEY}' },
482
489
  models: {}
483
490
  }
484
491
  } else if (providerKey === 'together') {
@@ -793,6 +800,13 @@ export async function startOpenCodeDesktop(model, fcmConfig) {
793
800
  options: { baseURL: 'https://openrouter.ai/api/v1', apiKey: '{env:OPENROUTER_API_KEY}' },
794
801
  models: {}
795
802
  }
803
+ } else if (providerKey === 'orcarouter') {
804
+ config.provider.orcarouter = {
805
+ npm: '@ai-sdk/openai-compatible',
806
+ name: 'OrcaRouter',
807
+ options: { baseURL: 'https://api.orcarouter.ai/v1', apiKey: '{env:ORCAROUTER_API_KEY}' },
808
+ models: {}
809
+ }
796
810
  } else if (providerKey === 'huggingface') {
797
811
  config.provider.huggingface = {
798
812
  npm: '@ai-sdk/openai-compatible',
@@ -846,7 +860,7 @@ export async function startOpenCodeDesktop(model, fcmConfig) {
846
860
  config.provider.siliconflow = {
847
861
  npm: '@ai-sdk/openai-compatible',
848
862
  name: 'SiliconFlow',
849
- options: { baseURL: 'https://api.siliconflow.com/v1', apiKey: '{env:SILICONFLOW_API_KEY}' },
863
+ options: { baseURL: 'https://api.siliconflow.cn/v1', apiKey: '{env:SILICONFLOW_API_KEY}' },
850
864
  models: {}
851
865
  }
852
866
  } else if (providerKey === 'together') {
package/src/core/ping.js CHANGED
@@ -56,12 +56,17 @@ const DISABLED_THINKING_RETRY_STATUSES = new Set([400, 422])
56
56
  const disabledThinkingUnsupportedProviders = new Set()
57
57
 
58
58
  // 📖 resolveCloudflareUrl: Cloudflare's OpenAI-compatible endpoint is account-scoped.
59
- // 📖 We resolve {account_id} from env so provider setup can stay simple in config.
59
+ // 📖 We resolve the placeholder from the CLOUDFLARE_ACCOUNT_ID env var so provider
60
+ // 📖 setup can stay simple in config. Supports both the `{account_id}` placeholder
61
+ // 📖 and the explicit `{$CLOUDFLARE_ACCOUNT_ID}` form used in sources.js.
60
62
  export function resolveCloudflareUrl(url) {
61
63
  const accountId = (process.env.CLOUDFLARE_ACCOUNT_ID || '').trim()
62
- if (!url.includes('{account_id}')) return url
63
- if (!accountId) return url.replace('{account_id}', 'missing-account-id')
64
- return url.replace('{account_id}', encodeURIComponent(accountId))
64
+ const hasPlaceholder = url.includes('{$CLOUDFLARE_ACCOUNT_ID}') || url.includes('{account_id}')
65
+ if (!hasPlaceholder) return url
66
+ const replacement = accountId ? encodeURIComponent(accountId) : 'missing-account-id'
67
+ return url
68
+ .replace(/\{\$CLOUDFLARE_ACCOUNT_ID\}/g, replacement)
69
+ .replace(/\{account_id\}/g, replacement)
65
70
  }
66
71
 
67
72
  // 📖 buildChatCompletionPingBody: Use the smallest useful chat-completion probe.
@@ -130,6 +135,11 @@ export function buildPingRequest(apiKey, modelId, providerKey, url, options = {}
130
135
  headers['HTTP-Referer'] = 'https://github.com/vava-nessa/free-coding-models'
131
136
  headers['X-Title'] = 'free-coding-models'
132
137
  }
138
+ if (providerKey === 'orcarouter') {
139
+ // 📖 OrcaRouter uses the same app-identification convention as OpenRouter.
140
+ headers['HTTP-Referer'] = 'https://github.com/vava-nessa/free-coding-models'
141
+ headers['X-Title'] = 'free-coding-models'
142
+ }
133
143
 
134
144
  return {
135
145
  url,
@@ -65,7 +65,10 @@ export const PROVIDER_AUTH_ENDPOINTS = {
65
65
  fireworks: { url: 'https://api.fireworks.ai/v1/models', method: 'GET' },
66
66
  hyperbolic: { url: 'https://api.hyperbolic.xyz/v1/models', method: 'GET' },
67
67
  scaleway: { url: 'https://api.scaleway.ai/v1/models', method: 'GET' },
68
- siliconflow: { url: 'https://api.siliconflow.com/v1/models', method: 'GET' },
68
+ siliconflow: { url: 'https://api.siliconflow.cn/v1/models', method: 'GET' },
69
+ pollinations: null,
70
+ requesty: null,
71
+ orcarouter: { url: 'https://api.orcarouter.ai/v1/models', method: 'GET' },
69
72
  together: { url: 'https://api.together.xyz/v1/models', method: 'GET' },
70
73
  perplexity: { url: 'https://api.perplexity.ai/v1/models', method: 'GET' },
71
74
  chutes: { url: 'https://chutes.ai/v1/models', method: 'GET' },
@@ -101,7 +104,7 @@ export async function testProviderKeyDirect(apiKey, providerKey) {
101
104
 
102
105
  const { url, method } = authConfig
103
106
  const headers = { Authorization: `Bearer ${apiKey}` }
104
- if (providerKey === 'openrouter') {
107
+ if (providerKey === 'openrouter' || providerKey === 'orcarouter') {
105
108
  headers['HTTP-Referer'] = 'https://github.com/vava-nessa/free-coding-models'
106
109
  headers['X-Title'] = 'free-coding-models'
107
110
  }