返回 CodeWhale
models_dev_seed.toml
根目录 / scripts / catalog / models_dev_seed.toml
1 # Offline Models.dev seed spec (#6396).
2 #
3 # This file says WHICH upstream rows the offline seed carries and how they map
4 # onto Codewhale provider ids. It never states a value that contradicts
5 # upstream: policy (a withheld price, a clamped limit) belongs in
6 # crates/config/assets/catalog_corrections.json, which applies online too.
7 #
8 # python3 scripts/catalog_models_dev.py seed lock --dry-run # review report
9 # python3 scripts/catalog_models_dev.py seed lock # pin upstream
10 # python3 scripts/catalog_models_dev.py seed render # write the seed
11 #
12 # Model entries: a bare id, or a table with
13 # id Codewhale wire id (the seed key, sent on the wire)
14 # upstream_id upstream id when it differs by more than letter case
15 # from a sibling upstream provider to take the row from
16 # base_model Codewhale's canonical join (upstream provider rows have none)
17 # curated true for a row upstream does not list; data in [[curated]]
18 # Exactly one model per provider is its `default`, matching the provider's
19 # built-in DEFAULT_*_MODEL.
20
21 [source]
22 url = "https://models.dev/catalog.json"
23
24 [meta]
25 about = "Offline fallback Models.dev-shaped catalog snapshot for Codewhale (#3385, demoted by #4188, generated since #6396)."
26 schema = "Matches crates/config/src/models_dev.rs ModelsDevCatalog ({ models, providers })."
27 role = "NOT a competing source of truth. Preferred metadata is the live Models.dev catalog published into ProviderLake (#4187). This asset is used only when live/cache rows are unavailable (offline startup, failed refresh, or empty cache)."
28 source = "Rows are projected unedited from Models.dev onto the fields models_dev.rs reads; provider headers, id mapping, defaults and canonical joins come from scripts/catalog/models_dev_seed.toml."
29 corrections = "Deliberate holds (withheld prices, clamped limits) are not in this file. They live in crates/config/assets/catalog_corrections.json and apply to this seed and to live refresh alike."
30 default_rows = "Each provider's `default: true` wire id equals that provider's built-in DEFAULT_*_MODEL so RouteResolver::new() and the descriptor stay in agreement when offline."
31 pending_release_metadata = "GLM-5.3 is live on the Z.ai Coding Plan (docs.z.ai/devpack/overview and docs.z.ai/devpack/latest-model, recorded 2026-08-13) and is the default direct Z.ai model (DEFAULT_ZAI_MODEL); explicit GLM-5.2 selections keep their own id. First-party wire id is GLM-5.3; OpenRouter mirror is z-ai/glm-5.3. Capability/limit/dialect values still inherit from GLM-5.2 until Z.ai publishes distinct 5.3 numbers. Pricing stays absent: Coding Plan publishes credit multipliers, not a USD PAYG row we can stand behind. Z.ai may auto-route GLM-5.2/GLM-5.1 requests to GLM-5.3 on their side; Codewhale still sends the selected picker id. Do not send a [1m] suffix. Scope stays first-party Z.ai plus the OpenRouter mirror; add third-party gateway rows only against that gateway's own published roster."
32
33 # Canonical `models` entries. The two bare DeepSeek keys are the canonical ids
34 # every hosted DeepSeek `base_model`, the route layer and pricing name;
35 # renaming them is a canonical-identity migration, not a seed refresh.
36
37 [[canonical]]
38 key = "deepseek-v4-pro"
39 upstream = "deepseek/deepseek-v4-pro"
40
41 [[canonical]]
42 key = "deepseek-v4-flash"
43 upstream = "deepseek/deepseek-v4-flash"
44
45 [[canonical]]
46 key = "xiaomi/mimo-v2.6-pro"
47
48 [[canonical]]
49 key = "xiaomi/mimo-v2.6-flash"
50
51 [[providers]]
52 id = "deepseek"
53 name = "DeepSeek"
54 api = "https://api.deepseek.com"
55 npm = "@ai-sdk/openai-compatible"
56 env = ["DEEPSEEK_API_KEY"]
57 default = "deepseek-flash"
58 models = [
59 { id = "deepseek-v4-pro", base_model = "deepseek-v4-pro" },
60 { id = "deepseek-v4-flash", base_model = "deepseek-v4-flash" },
61 { id = "deepseek-v4-flash-vision-exp", base_model = "deepseek-v4-flash" },
62 { id = "deepseek-flash", base_model = "deepseek-flash" },
63 ]
64
65 [[providers]]
66 id = "zai"
67 name = "Zhipu AI / Z.ai"
68 api = "https://api.z.ai/api/paas/v4"
69 npm = "@ai-sdk/openai-compatible"
70 env = ["ZAI_API_KEY", "ZHIPU_API_KEY", "GLM_API_KEY"]
71 default = "GLM-5.3"
72 models = [
73 "GLM-5.2",
74 "GLM-5.3",
75 "GLM-5.3-Flash",
76 "glm-5.1",
77 "GLM-5-Turbo",
78 ]
79
80 [[providers]]
81 id = "moonshot"
82 upstream = "moonshotai"
83 name = "Moonshot / Kimi"
84 api = "https://api.moonshot.ai/v1"
85 npm = "@ai-sdk/openai-compatible"
86 env = ["MOONSHOT_API_KEY", "KIMI_API_KEY"]
87 default = "kimi-k2.7-code"
88 models = [
89 "kimi-k3",
90 "kimi-k2.7-code",
91 "kimi-k2.7-code-highspeed",
92 "kimi-k2.6",
93 ]
94
95 [[providers]]
96 id = "minimax"
97 name = "MiniMax"
98 api = "https://api.minimax.io/v1"
99 npm = "@ai-sdk/openai-compatible"
100 env = ["MINIMAX_API_KEY"]
101 default = "MiniMax-M3"
102 models = [
103 "MiniMax-M3",
104 "MiniMax-M2.7",
105 "MiniMax-M2.7-highspeed",
106 ]
107
108 [[providers]]
109 id = "minimax-anthropic"
110 upstream = "minimax"
111 name = "MiniMax (Anthropic-compatible)"
112 api = "https://api.minimax.io/anthropic"
113 npm = "@ai-sdk/anthropic"
114 env = ["MINIMAX_API_KEY"]
115 default = "MiniMax-M3"
116 models = [
117 "MiniMax-M3",
118 "MiniMax-M2.7",
119 "MiniMax-M2.7-highspeed",
120 ]
121
122 [[providers]]
123 id = "modelstudio-token-plan"
124 upstream = "alibaba-token-plan"
125 name = "Alibaba Cloud Model Studio (Token Plan)"
126 api = "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
127 npm = "@ai-sdk/openai-compatible"
128 env = ["MODELSTUDIO_API_KEY", "DASHSCOPE_API_KEY"]
129 default = "qwen3.8-max"
130 models = [
131 "qwen3.8-max",
132 "qwen3.8-max-preview",
133 "qwen3.7-plus",
134 "qwen3.7-max",
135 "qwen3.6-flash",
136 "deepseek-v4-pro",
137 "deepseek-v4-flash-0731",
138 "glm-5.2",
139 ]
140
141 [[providers]]
142 id = "modelstudio-token-plan-anthropic"
143 upstream = "alibaba-token-plan"
144 name = "Alibaba Cloud Model Studio (Token Plan, Anthropic-compatible)"
145 api = "https://token-plan.ap-southeast-1.maas.aliyuncs.com/apps/anthropic"
146 npm = "@ai-sdk/anthropic"
147 env = ["MODELSTUDIO_API_KEY", "DASHSCOPE_API_KEY"]
148 default = "qwen3.8-max"
149 models = [
150 "qwen3.8-max",
151 "qwen3.8-max-preview",
152 "qwen3.7-plus",
153 "qwen3.7-max",
154 "qwen3.6-flash",
155 "deepseek-v4-pro",
156 "deepseek-v4-flash-0731",
157 "glm-5.2",
158 ]
159
160 [[providers]]
161 id = "modelstudio-coding-plan"
162 upstream = "alibaba-coding-plan"
163 name = "Alibaba Cloud Model Studio (Coding Plan)"
164 api = "https://coding-intl.dashscope.aliyuncs.com/v1"
165 npm = "@ai-sdk/openai-compatible"
166 env = ["MODELSTUDIO_API_KEY", "DASHSCOPE_API_KEY"]
167 default = "qwen3.8-max"
168 models = [
169 { id = "qwen3.8-max", from = "alibaba-token-plan" },
170 { id = "qwen3.8-max-preview", from = "alibaba-token-plan" },
171 "qwen3.7-plus",
172 "qwen3.7-max",
173 "qwen3.6-flash",
174 { id = "deepseek-v4-pro", from = "alibaba-token-plan" },
175 { id = "deepseek-v4-flash-0731", from = "alibaba-token-plan" },
176 { id = "glm-5.2", from = "alibaba-token-plan" },
177 ]
178
179 [[providers]]
180 id = "modelstudio-coding-plan-anthropic"
181 upstream = "alibaba-coding-plan"
182 name = "Alibaba Cloud Model Studio (Coding Plan, Anthropic-compatible)"
183 api = "https://coding-intl.dashscope.aliyuncs.com/apps/anthropic"
184 npm = "@ai-sdk/anthropic"
185 env = ["MODELSTUDIO_API_KEY", "DASHSCOPE_API_KEY"]
186 default = "qwen3.8-max"
187 models = [
188 { id = "qwen3.8-max", from = "alibaba-token-plan" },
189 { id = "qwen3.8-max-preview", from = "alibaba-token-plan" },
190 "qwen3.7-plus",
191 "qwen3.7-max",
192 "qwen3.6-flash",
193 { id = "deepseek-v4-pro", from = "alibaba-token-plan" },
194 { id = "deepseek-v4-flash-0731", from = "alibaba-token-plan" },
195 { id = "glm-5.2", from = "alibaba-token-plan" },
196 ]
197
198 [[providers]]
199 id = "meta"
200 name = "Meta Model API"
201 api = "https://api.meta.ai/v1"
202 npm = "@ai-sdk/openai"
203 env = ["META_MODEL_API_KEY", "MODEL_API_KEY"]
204 default = "muse-spark-1.2"
205 models = [
206 "muse-spark-1.1",
207 "muse-spark-1.2",
208 "muse-spark-1.2-contributor",
209 ]
210
211 [[providers]]
212 id = "openai"
213 name = "OpenAI-compatible"
214 api = "https://api.openai.com/v1"
215 npm = "@ai-sdk/openai"
216 env = ["OPENAI_API_KEY"]
217 default = "gpt-5.6"
218 models = [
219 "gpt-5.5",
220 "gpt-5.5-pro",
221 "gpt-5.6",
222 "gpt-5.6-sol",
223 "gpt-5.6-terra",
224 "gpt-5.6-luna",
225 "gpt-5.3-codex",
226 ]
227
228 [[providers]]
229 id = "anthropic"
230 name = "Anthropic"
231 api = "https://api.anthropic.com"
232 npm = "@ai-sdk/anthropic"
233 env = ["ANTHROPIC_API_KEY"]
234 default = "claude-sonnet-4-6"
235 models = [
236 "claude-sonnet-4-6",
237 "claude-opus-4-8",
238 "claude-haiku-4-5",
239 "claude-opus-5",
240 "claude-sonnet-5",
241 "claude-fable-5",
242 ]
243
244 [[providers]]
245 id = "openrouter"
246 name = "OpenRouter"
247 api = "https://openrouter.ai/api/v1"
248 npm = "@openrouter/ai-sdk-provider"
249 env = ["OPENROUTER_API_KEY"]
250 default = "deepseek/deepseek-v4-pro"
251 models = [
252 { id = "deepseek/deepseek-v4-pro", base_model = "deepseek-v4-pro" },
253 { id = "deepseek/deepseek-v4-flash", base_model = "deepseek-v4-flash" },
254 "qwen/qwen3.8-flash",
255 "qwen/qwen3.6-flash",
256 "qwen/qwen3.6-plus",
257 "qwen/qwen3.6-35b-a3b",
258 "qwen/qwen3.7-plus",
259 "minimax/minimax-m3",
260 "z-ai/glm-5.2",
261 "z-ai/glm-5.3",
262 "z-ai/glm-5.3-flash",
263 "dots-studio/dots-3-note-preview:free",
264 ]
265
266 [[providers]]
267 id = "together"
268 upstream = "togetherai"
269 name = "Together AI"
270 api = "https://api.together.xyz/v1"
271 npm = "@ai-sdk/openai-compatible"
272 env = ["TOGETHER_API_KEY"]
273 default = "deepseek-ai/DeepSeek-V4-Pro"
274 models = [
275 { id = "deepseek-ai/DeepSeek-V4-Pro", base_model = "deepseek-v4-pro" },
276 { id = "deepseek-ai/DeepSeek-V4-Flash", base_model = "deepseek-v4-flash", curated = true },
277 ]
278
279 [[providers]]
280 id = "fireworks"
281 upstream = "fireworks-ai"
282 name = "Fireworks AI"
283 api = "https://api.fireworks.ai/inference/v1"
284 npm = "@ai-sdk/openai-compatible"
285 env = ["FIREWORKS_API_KEY"]
286 default = "accounts/fireworks/models/deepseek-v4-pro"
287 models = [
288 { id = "accounts/fireworks/models/deepseek-v4-pro", base_model = "deepseek-v4-pro" },
289 ]
290
291 [[providers]]
292 id = "novita"
293 upstream = "novita-ai"
294 name = "Novita AI"
295 api = "https://api.novita.ai/openai/v1"
296 npm = "@ai-sdk/openai-compatible"
297 env = ["NOVITA_API_KEY"]
298 default = "deepseek/deepseek-v4-pro"
299 models = [
300 { id = "deepseek/deepseek-v4-pro", base_model = "deepseek-v4-pro" },
301 { id = "deepseek/deepseek-v4-flash", base_model = "deepseek-v4-flash" },
302 ]
303
304 [[providers]]
305 id = "siliconflow"
306 name = "SiliconFlow"
307 api = "https://api.siliconflow.com/v1"
308 npm = "@ai-sdk/openai-compatible"
309 env = ["SILICONFLOW_API_KEY"]
310 default = "deepseek-ai/DeepSeek-V4-Pro"
311 models = [
312 { id = "deepseek-ai/DeepSeek-V4-Pro", base_model = "deepseek-v4-pro" },
313 { id = "deepseek-ai/DeepSeek-V4-Flash", base_model = "deepseek-v4-flash" },
314 ]
315
316 [[providers]]
317 id = "arcee"
318 name = "Arcee AI"
319 api = "https://api.arcee.ai/v1"
320 npm = "@ai-sdk/openai-compatible"
321 env = ["ARCEE_API_KEY"]
322 default = "trinity-large-thinking"
323 models = [
324 "trinity-large-thinking",
325 { id = "trinity-mini", curated = true },
326 ]
327
328 [[providers]]
329 id = "xai"
330 name = "xAI"
331 api = "https://api.x.ai/v1"
332 npm = "@ai-sdk/xai"
333 env = ["XAI_API_KEY"]
334 default = "grok-4.6"
335 models = [
336 "grok-4.7",
337 "grok-4.6",
338 "grok-4.5",
339 "grok-4.3",
340 ]
341
342 [[providers]]
343 id = "xiaomi-mimo"
344 upstream = "xiaomi"
345 name = "Xiaomi MiMo"
346 api = "https://api-mimo.xiaomi.com/v1"
347 npm = "@ai-sdk/openai-compatible"
348 env = ["XIAOMI_MIMO_API_KEY", "MIMO_API_KEY"]
349 default = "mimo-v2.5-pro"
350 models = [
351 "mimo-v2.5-pro",
352 "mimo-v2.5",
353 "mimo-v2.6-pro",
354 "mimo-v2.6-flash",
355 ]
356
357 [[providers]]
358 id = "stepfun"
359 name = "StepFun / StepFlash"
360 api = "https://api.stepfun.ai/v1"
361 npm = "@ai-sdk/openai-compatible"
362 env = ["STEPFUN_API_KEY", "STEP_API_KEY"]
363 default = "step-3.7-flash"
364 models = [
365 "step-3.5-flash",
366 "step-3.5-flash-2603",
367 "step-3.7-flash",
368 "step-5-preview",
369 ]
370
371 [[curated]]
372 provider = "together"
373 id = "deepseek-ai/DeepSeek-V4-Flash"
374 reason = "Carried since #3385. Models.dev togetherai lists DeepSeek-V4-Flash-0731 and DeepSeek-V4.1-Flash but not this id (checked 2026-09-26); confirm Together still serves it or remove the row."
375
376 [curated.row]
377 name = "DeepSeek V4 Flash (Together)"
378 family = "deepseek"
379 reasoning = true
380 tool_call = true
381 modalities = { input = ["text"], output = ["text"] }
382 limit = { context = 1000000, output = 384000 }
383
384 [[curated]]
385 provider = "arcee"
386 id = "trinity-mini"
387 reason = "Carried since 0.8.68. Models.dev arcee lists only trinity-large-thinking among Arcee's own models (checked 2026-09-26); confirm Arcee still serves it or remove the row."
388
389 [curated.row]
390 name = "Trinity Mini"
391 family = "trinity"
392 reasoning = true
393 tool_call = true
394 modalities = { input = ["text"], output = ["text"] }
395 limit = { context = 128000 }
396
396 lines TOML