@yanlinglabs/winter-provider-catalog 0.0.1

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,600 @@
1
+ {
2
+ "$comment": "HAND-AUTHORED overlay FAMILIES — WS-13c §9's default slot table, the reviewed third layer beside overlay/providers.json and overlay/models.json. Generated into `catalog.families` by `bun run provider:catalog`, sorted by `id`, and never edited under generated/. EVERY description and reason is §9's own sentence, verbatim: a slot's text is the thing a user reads in the model switcher, so paraphrasing it here would silently replace a reviewed statement with an unreviewed one. `basis` records where that TEXT came from — `user-ruling` where §9's bracket names the user's own framing unqualified, `winter-curated` where §9 says the ORDER or the NAME is the user's but the sentence is Winter's, `vendor-doc` where the claim is the vendor's documentation. EVERY slot is `status: \"candidate\"`, including claude's and gpt's: promotion is a later, reviewed commit (§9, and WS-13c §12 item 1 leaves the candidate text with the user to review). MATCHERS ARE AUTHORED DISJOINT — `^gpt-(?!oss)` beside `^gpt-oss-` — so the pipeline's sort-by-id can never change a row's stamp; catalog-integrity.test.ts asserts that over all 604 rows rather than trusting this note. Task 1b (P6.6) verified `claude/fable` (→ `claude-fable-5.1`) against its vendor page and repointed it to the newly-authored owed row. `gemini/flash` and `gemini/lite` also found and authored their owed rows (`gemini-3.8-flash`, `gemini-3.5-flash-lite`) but STAY on `gemini-3.7-flash`/`gemini-3.1-flash-lite` (fix r1, I-4, controller-ruled): the allowed vendor page states no per-model context-window number for either new id, and the ruling's fallback for that case is to leave the slot on the old row rather than ship one whose window would have to be inferred — the new rows remain in the catalog, servable outside these slots, each carrying its own inferred `contextWindow`. `grok/grok-4.6` gained a second servable row (the token-priced `xai` provider) with no repoint needed, since its canonicalModelId already matched. `glm/flash` alone still points at the NEAREST EXISTING ROW (`glm-4.7-flash`): the allowed `docs.z.ai/guides/llm/glm-5` page is a single-model guide and names no `glm-5.3-flash`. Each of these slots' own citation records the check and its date, and the integrity suite refuses a slot whose row does not exist, so none is an invented id.",
3
+ "families": [
4
+ {
5
+ "id": "claude",
6
+ "displayName": "Claude",
7
+ "vendor": "Anthropic",
8
+ "vendorProviders": [
9
+ "anthropic"
10
+ ],
11
+ "$comment": "D25: the ONE family whose slot names are a compat contract. `fable`/`opus`/`sonnet`/`haiku` are the Claude Agent SDK's own enum and are reserved to this family by the validator — a Claude session advertises exactly these four whether it runs on the official SDK or inside Winter, and custom slots are ignored there. §9's ordering (strength = price) is the user's ruling; the sentences are Winter's.",
12
+ "matchers": [
13
+ {
14
+ "pattern": "^claude-",
15
+ "note": "every Anthropic lineup id, after the normaliser strips Bedrock's `us.`/`anthropic.` prefixes and `-v1:0` suffix"
16
+ }
17
+ ],
18
+ "slots": [
19
+ {
20
+ "name": "fable",
21
+ "canonicalModelId": "claude-fable-5.1",
22
+ "description": "the most capable Claude model, for the hardest reasoning and the most open-ended agentic work; the highest price.",
23
+ "reason": "First because it is the strongest.",
24
+ "basis": "winter-curated",
25
+ "citation": "spec:WS-13c §9 (user-ruling ORDER, winter-curated text); VERIFIED on https://docs.anthropic.com/en/docs/about-claude/models (redirects to https://platform.claude.com/docs/en/docs/about-claude/models, retrieved 2026-09-07) — repointed from `claude-fable-5` to the owed `anthropic/claude-fable-5-1` row (P6.6 Task 1b), whose own canonicalModelId post-normaliser is `claude-fable-5.1`, not the un-normalised `claude-fable-5-1`",
26
+ "status": "candidate"
27
+ },
28
+ {
29
+ "name": "opus",
30
+ "canonicalModelId": "claude-opus-5",
31
+ "description": "very capable on complex, multi-step engineering; the demanding-work default.",
32
+ "reason": "Second: near the top on capability at a lower price.",
33
+ "basis": "winter-curated",
34
+ "citation": "spec:WS-13c §9",
35
+ "status": "candidate"
36
+ },
37
+ {
38
+ "name": "sonnet",
39
+ "canonicalModelId": "claude-sonnet-5",
40
+ "description": "fast, capable everyday coding; the default worker.",
41
+ "reason": "Third: the balance of speed, capability and price.",
42
+ "basis": "winter-curated",
43
+ "citation": "spec:WS-13c §9",
44
+ "status": "candidate"
45
+ },
46
+ {
47
+ "name": "haiku",
48
+ "canonicalModelId": "claude-haiku-4.5",
49
+ "description": "the fastest and cheapest; simple, well-specified tasks.",
50
+ "reason": "Fourth: cost.",
51
+ "basis": "winter-curated",
52
+ "citation": "spec:WS-13c §9",
53
+ "status": "candidate"
54
+ }
55
+ ],
56
+ "status": "candidate",
57
+ "citation": "spec:WS-13c §9 — order = strength = price (user-ruling)"
58
+ },
59
+ {
60
+ "id": "deepseek",
61
+ "displayName": "DeepSeek",
62
+ "vendor": "DeepSeek",
63
+ "vendorProviders": [
64
+ "deepseek",
65
+ "deepseek-anthropic"
66
+ ],
67
+ "matchers": [
68
+ {
69
+ "pattern": "^deepseek",
70
+ "note": "unanchored tail on purpose: the lineup ships as `deepseek-v4-pro` and as `deepseek-reasoner`-style ids alike"
71
+ }
72
+ ],
73
+ "slots": [
74
+ {
75
+ "name": "pro",
76
+ "canonicalModelId": "deepseek-v4-pro",
77
+ "description": "the strongest DeepSeek; long reasoning and hard coding at a low price.",
78
+ "reason": "First: strength.",
79
+ "basis": "winter-curated",
80
+ "citation": "spec:WS-13c §9",
81
+ "status": "candidate"
82
+ },
83
+ {
84
+ "name": "flash",
85
+ "canonicalModelId": "deepseek-v4-flash",
86
+ "description": "the fast, cheap implementer of the same lineup.",
87
+ "reason": "Second: cost and speed.",
88
+ "basis": "winter-curated",
89
+ "citation": "spec:WS-13c §9",
90
+ "status": "candidate"
91
+ }
92
+ ],
93
+ "status": "candidate",
94
+ "citation": "spec:WS-13c §9"
95
+ },
96
+ {
97
+ "id": "gemini",
98
+ "displayName": "Gemini",
99
+ "vendor": "Google",
100
+ "vendorProviders": [
101
+ "google",
102
+ "vertex"
103
+ ],
104
+ "$comment": "The family §9 uses to make D26's point: position is NOT a strength claim. Flash is documented as the stronger model and Pro still leads the list, because the user's framing is that Pro is described by what it is GOOD AT rather than by rank.",
105
+ "matchers": [
106
+ {
107
+ "pattern": "^gemini-",
108
+ "note": "after the normaliser strips the `models/` namespace Google AI Studio uses"
109
+ }
110
+ ],
111
+ "slots": [
112
+ {
113
+ "name": "pro",
114
+ "canonicalModelId": "gemini-3.1-pro-preview",
115
+ "description": "described by what it is good at — long-context analysis, multimodal understanding and careful, deliberate reasoning; the community still favours it for those.",
116
+ "reason": "First by breadth, not by the vendor's strength ranking.",
117
+ "basis": "winter-curated",
118
+ "citation": "spec:WS-13c §9 (user-ruling FRAMING, winter-curated text)",
119
+ "status": "candidate"
120
+ },
121
+ {
122
+ "name": "flash",
123
+ "canonicalModelId": "gemini-3.7-flash",
124
+ "description": "Google's strongest current model by its own documentation; fast agentic coding.",
125
+ "reason": "Second: strength.",
126
+ "basis": "vendor-doc",
127
+ "citation": "spec:WS-13c §9 — vendor-doc basis; the id IS verified on https://ai.google.dev/gemini-api/docs/models (retrieved 2026-09-07), which lists `gemini-3.8-flash` as \"New Stable\" and \"Our most intelligent Flash model\" ahead of `gemini-3.7-flash`, and the owed `google/gemini-3.8-flash` row is authored — but per task-1b review r1's I-4 and the controller's binding ruling, the page states NO per-model context-window number (it is an index that links to a page outside this task's allowed set), so the slot stays on `gemini-3.7-flash` rather than repoint to a row whose context window would have to be inferred. `google/gemini-3.8-flash` remains in the catalog, servable outside this slot, with an inferred `contextWindow` disclosed on the row itself; repointing here is a one-line change if a future ruling accepts that inference for the slot",
128
+ "status": "candidate"
129
+ },
130
+ {
131
+ "name": "lite",
132
+ "canonicalModelId": "gemini-3.1-flash-lite",
133
+ "description": "the cheap implementer.",
134
+ "reason": "Third: cost.",
135
+ "basis": "winter-curated",
136
+ "citation": "spec:WS-13c §9 (user-ruling FRAMING — user: \"lite as the cheap implementer\", §0 2026-09-06 — winter-curated text; R-6c-11 applied mechanically, fix r1 I-1); a newer id IS found and verified on https://ai.google.dev/gemini-api/docs/models (retrieved 2026-09-07) per the spine review's addendum (controller item 2) — `gemini-3.5-flash-lite` sits ahead of `gemini-3.1-flash-lite` in the page's own newest-first listing order and carries the higher minor version number, both Stable (page states no release dates or supersession; softened per task-1b review r1 M-3) — and the owed `google/gemini-3.5-flash-lite` row is authored, but per review r1's I-4 and the controller's binding ruling the page states NO per-model context-window number for it, so the slot stays on `gemini-3.1-flash-lite` rather than repoint to a row whose context window would have to be inferred. `google/gemini-3.5-flash-lite` remains in the catalog, servable outside this slot, with an inferred `contextWindow` disclosed on the row itself; repointing here is a one-line change if a future ruling accepts that inference for the slot",
137
+ "status": "candidate"
138
+ }
139
+ ],
140
+ "status": "candidate",
141
+ "citation": "spec:WS-13c §9"
142
+ },
143
+ {
144
+ "id": "gemma",
145
+ "displayName": "Gemma",
146
+ "vendor": "Google",
147
+ "vendorProviders": [
148
+ "vertex"
149
+ ],
150
+ "matchers": [
151
+ {
152
+ "pattern": "^gemma-",
153
+ "note": "Google's open-weight lineup; served by many providers, one vendor identity"
154
+ }
155
+ ],
156
+ "slots": [
157
+ {
158
+ "name": "gemma-4",
159
+ "canonicalModelId": "gemma-4-31b-it",
160
+ "description": "Google's open-weight model.",
161
+ "reason": "Single slot.",
162
+ "basis": "winter-curated",
163
+ "citation": "spec:WS-13c §9",
164
+ "status": "candidate"
165
+ }
166
+ ],
167
+ "status": "candidate",
168
+ "citation": "spec:WS-13c §9"
169
+ },
170
+ {
171
+ "id": "glm",
172
+ "displayName": "GLM",
173
+ "vendor": "Z.AI",
174
+ "vendorProviders": [
175
+ "zai",
176
+ "zai-anthropic"
177
+ ],
178
+ "matchers": [
179
+ {
180
+ "pattern": "^glm-",
181
+ "note": "after the normaliser strips the `zai-` prefix some providers put on GLM ids"
182
+ }
183
+ ],
184
+ "slots": [
185
+ {
186
+ "name": "strong",
187
+ "canonicalModelId": "glm-5.3",
188
+ "description": "the strongest GLM; agentic coding on the GLM Coding plan.",
189
+ "reason": "First: strength.",
190
+ "basis": "winter-curated",
191
+ "citation": "spec:WS-13c §9 (user-ruling NAME, winter-curated text)",
192
+ "status": "candidate"
193
+ },
194
+ {
195
+ "name": "flash",
196
+ "canonicalModelId": "glm-4.7-flash",
197
+ "description": "the fast, cheap implementer.",
198
+ "reason": "Second: cost.",
199
+ "basis": "winter-curated",
200
+ "citation": "spec:WS-13c §9 (user-ruling NAME — user: \"5.3 and 5.3 flash … strong/flash\", §0 2026-09-06 — winter-curated text, same provenance as the sibling `strong` slot; R-6c-11, fix r1 I-1); points at `glm-4.7-flash` until the owed `zai/glm-5.3-flash` row is verified (P6.6 Task 1b)",
201
+ "status": "candidate"
202
+ }
203
+ ],
204
+ "status": "candidate",
205
+ "citation": "spec:WS-13c §9"
206
+ },
207
+ {
208
+ "id": "gpt",
209
+ "displayName": "GPT",
210
+ "vendor": "OpenAI",
211
+ "vendorProviders": [
212
+ "codex-oauth",
213
+ "openai"
214
+ ],
215
+ "$comment": "Every sentence here is the user's own framing (§0 D25's OpenAI paragraph), condensed to one line each and keeping the user's key phrases — 'seemingly impossible', 'very complex novelty', 'framed as sol currently', 'best cheap implementer on the market'. Codex's own picker text was named explicitly as NOT a good description, so none of it is reused. `codex-oauth` leads `vendorProviders`: a configured subscription's marginal cost is zero (WS-13c §4 step 3-i).",
216
+ "matchers": [
217
+ {
218
+ "pattern": "^gpt-(?!oss)",
219
+ "note": "DISJOINT from `gpt-oss` by the negative lookahead, so the two never both match and family order never matters"
220
+ }
221
+ ],
222
+ "slots": [
223
+ {
224
+ "name": "astra",
225
+ "canonicalModelId": "gpt-6-astra",
226
+ "description": "for seemingly impossible, novelty-like tasks that involve lots of abstract reasoning; substantially above Sol.",
227
+ "reason": "First: nothing else reaches it.",
228
+ "basis": "user-ruling",
229
+ "citation": "spec:WS-13c §0 (user rulings D25–D28, 2026-09-06) via §9",
230
+ "status": "candidate"
231
+ },
232
+ {
233
+ "name": "sol",
234
+ "canonicalModelId": "gpt-5.6-sol",
235
+ "description": "a highly capable model for VERY complex novelty tasks; already overkill for most work.",
236
+ "reason": "Second: the ceiling before Astra.",
237
+ "basis": "user-ruling",
238
+ "citation": "spec:WS-13c §0 (user rulings D25–D28, 2026-09-06) via §9",
239
+ "status": "candidate"
240
+ },
241
+ {
242
+ "name": "terra",
243
+ "canonicalModelId": "gpt-5.6-terra",
244
+ "description": "a highly reliable and capable model for demanding work — framed as Sol was.",
245
+ "reason": "Third: the demanding-work default.",
246
+ "basis": "user-ruling",
247
+ "citation": "spec:WS-13c §0 (user rulings D25–D28, 2026-09-06) via §9",
248
+ "status": "candidate"
249
+ },
250
+ {
251
+ "name": "luna",
252
+ "canonicalModelId": "gpt-5.6-luna",
253
+ "description": "not far from Terra on implementation capability, and probably the best cheap implementer on the market.",
254
+ "reason": "Fourth: cost.",
255
+ "basis": "user-ruling",
256
+ "citation": "spec:WS-13c §0 (user rulings D25–D28, 2026-09-06) via §9",
257
+ "status": "candidate"
258
+ }
259
+ ],
260
+ "status": "candidate",
261
+ "citation": "spec:WS-13c §9 — user-ruling"
262
+ },
263
+ {
264
+ "id": "gpt-oss",
265
+ "displayName": "GPT-OSS",
266
+ "vendor": "OpenAI",
267
+ "vendorProviders": [
268
+ "groq",
269
+ "cerebras"
270
+ ],
271
+ "matchers": [
272
+ {
273
+ "pattern": "^gpt-oss-",
274
+ "note": "OpenAI's OPEN-WEIGHT lineup — a separate vendor identity from `gpt`, and disjoint from it by that family's lookahead"
275
+ }
276
+ ],
277
+ "slots": [
278
+ {
279
+ "name": "120b",
280
+ "canonicalModelId": "gpt-oss-120b",
281
+ "description": "OpenAI's large open-weight model.",
282
+ "reason": "First: strength.",
283
+ "basis": "winter-curated",
284
+ "citation": "spec:WS-13c §9",
285
+ "status": "candidate"
286
+ },
287
+ {
288
+ "name": "20b",
289
+ "canonicalModelId": "gpt-oss-20b",
290
+ "description": "the small, cheap one.",
291
+ "reason": "Second: cost.",
292
+ "basis": "winter-curated",
293
+ "citation": "spec:WS-13c §9",
294
+ "status": "candidate"
295
+ }
296
+ ],
297
+ "status": "candidate",
298
+ "citation": "spec:WS-13c §9"
299
+ },
300
+ {
301
+ "id": "grok",
302
+ "displayName": "Grok",
303
+ "vendor": "xAI",
304
+ "vendorProviders": [
305
+ "xai-oauth",
306
+ "xai"
307
+ ],
308
+ "matchers": [
309
+ {
310
+ "pattern": "^grok-",
311
+ "note": "xAI's lineup, including the coding-tuned `grok-build-*` ids"
312
+ }
313
+ ],
314
+ "slots": [
315
+ {
316
+ "name": "grok-4.6",
317
+ "canonicalModelId": "grok-4.6",
318
+ "description": "the stronger Grok, for reasoning-heavy work.",
319
+ "reason": "First: strength.",
320
+ "basis": "user-ruling",
321
+ "citation": "spec:WS-13c §0 D-Grok (user: \"grok 4.6 and grok build 01 as like stronger/implementer\") via §9; served by `xai-oauth` from the start, and now also by the token-priced `xai` provider — VERIFIED on https://docs.x.ai/docs/models (retrieved 2026-09-07), which lists `grok-4.6` in its plain Text API pricing table (P6.6 Task 1b's owed `xai/grok-4.6` row). The canonicalModelId does not change — both rows already shared `grok-4.6` — so this is a servability widening, not a repoint. NOT pinned to a provider — §4's ordering decides.",
322
+ "status": "candidate"
323
+ },
324
+ {
325
+ "name": "grok-build",
326
+ "canonicalModelId": "grok-build-0.1",
327
+ "description": "the implementer — xAI's coding-tuned build model.",
328
+ "reason": "Second: implementation.",
329
+ "basis": "user-ruling",
330
+ "citation": "spec:WS-13c §0 D-Grok (user: \"grok 4.6 and grok build 01 as like stronger/implementer\") via §9",
331
+ "status": "candidate"
332
+ }
333
+ ],
334
+ "status": "candidate",
335
+ "citation": "spec:WS-13c §9"
336
+ },
337
+ {
338
+ "id": "kimi",
339
+ "displayName": "Kimi",
340
+ "vendor": "Moonshot AI",
341
+ "vendorProviders": [
342
+ "kimi-coding",
343
+ "moonshot"
344
+ ],
345
+ "$comment": "The coding plan spells its ids differently from the platform (`k3`, not `kimi-k3`), which is what the per-row `canonicalModelId` override in overlay/models.json exists for — without it `kimi-coding/k3` would be its own canonical model and the `k3` slot would not see it. VENDORPROVIDERS DIVERGE FROM §9's PRINTED LIST, deliberately (controller ruling R-6c-15, fix r1): §9 prints `moonshot, kimi-coding`, but §4 step 3-i requires a configured SUBSCRIPTION row before a token row of the same vendor, and in this catalog `kimi-coding` is `pricingBasis: subscription` while `moonshot` is `token` — kimi was the only family where the two disagreed (`gpt` and `grok` already put the subscription first). §9 is amended by the controller; a §9<->overlay diff must read this row as the ruling, not as drift.",
346
+ "matchers": [
347
+ {
348
+ "pattern": "^kimi-|^k[0-9](?:\\.|$)",
349
+ "note": "the platform ids plus the coding plan's bare `k<n>` spelling"
350
+ }
351
+ ],
352
+ "slots": [
353
+ {
354
+ "name": "k3",
355
+ "canonicalModelId": "kimi-k3",
356
+ "description": "the strongest Kimi.",
357
+ "reason": "First: strength.",
358
+ "basis": "winter-curated",
359
+ "citation": "spec:WS-13c §9",
360
+ "status": "candidate"
361
+ },
362
+ {
363
+ "name": "code",
364
+ "canonicalModelId": "kimi-k2.7-code",
365
+ "description": "the coding-tuned model.",
366
+ "reason": "Second: implementation.",
367
+ "basis": "winter-curated",
368
+ "citation": "spec:WS-13c §9",
369
+ "status": "candidate"
370
+ },
371
+ {
372
+ "name": "fast",
373
+ "canonicalModelId": "kimi-k2.7-code-highspeed",
374
+ "description": "the same model on the high-speed tier.",
375
+ "reason": "Third: speed.",
376
+ "basis": "winter-curated",
377
+ "citation": "spec:WS-13c §9",
378
+ "status": "candidate"
379
+ }
380
+ ],
381
+ "status": "candidate",
382
+ "citation": "spec:WS-13c §9"
383
+ },
384
+ {
385
+ "id": "llama",
386
+ "displayName": "Llama",
387
+ "vendor": "Meta",
388
+ "vendorProviders": [
389
+ "groq"
390
+ ],
391
+ "matchers": [
392
+ {
393
+ "pattern": "^llama-",
394
+ "note": "after the normaliser strips the `meta-llama/` namespace"
395
+ }
396
+ ],
397
+ "slots": [
398
+ {
399
+ "name": "scout",
400
+ "canonicalModelId": "llama-4-scout-17b-16e-instruct",
401
+ "description": "the current open-weight Llama, fast on Groq.",
402
+ "reason": "First: recency.",
403
+ "basis": "winter-curated",
404
+ "citation": "spec:WS-13c §9",
405
+ "status": "candidate"
406
+ },
407
+ {
408
+ "name": "3.3",
409
+ "canonicalModelId": "llama-3.3-70b-versatile",
410
+ "description": "the proven 70B generalist.",
411
+ "reason": "Second: reliability.",
412
+ "basis": "winter-curated",
413
+ "citation": "spec:WS-13c §9",
414
+ "status": "candidate"
415
+ }
416
+ ],
417
+ "status": "candidate",
418
+ "citation": "spec:WS-13c §9"
419
+ },
420
+ {
421
+ "id": "minimax",
422
+ "displayName": "MiniMax",
423
+ "vendor": "MiniMax",
424
+ "vendorProviders": [
425
+ "minimax",
426
+ "minimax-anthropic"
427
+ ],
428
+ "matchers": [
429
+ {
430
+ "pattern": "^minimax-",
431
+ "note": "after the normaliser lowercases `MiniMax-M3` and strips the `minimax/` namespace"
432
+ }
433
+ ],
434
+ "slots": [
435
+ {
436
+ "name": "m3",
437
+ "canonicalModelId": "minimax-m3",
438
+ "description": "the strongest MiniMax.",
439
+ "reason": "First: strength.",
440
+ "basis": "winter-curated",
441
+ "citation": "spec:WS-13c §9",
442
+ "status": "candidate"
443
+ },
444
+ {
445
+ "name": "m2.7",
446
+ "canonicalModelId": "minimax-m2.7",
447
+ "description": "the previous flagship; the cheaper implementer.",
448
+ "reason": "Second: cost.",
449
+ "basis": "winter-curated",
450
+ "citation": "spec:WS-13c §9",
451
+ "status": "candidate"
452
+ },
453
+ {
454
+ "name": "fast",
455
+ "canonicalModelId": "minimax-m2.7-highspeed",
456
+ "description": "the high-speed tier.",
457
+ "reason": "Third: speed.",
458
+ "basis": "winter-curated",
459
+ "citation": "spec:WS-13c §9",
460
+ "status": "candidate"
461
+ }
462
+ ],
463
+ "status": "candidate",
464
+ "citation": "spec:WS-13c §9"
465
+ },
466
+ {
467
+ "id": "mistral",
468
+ "displayName": "Mistral",
469
+ "vendor": "Mistral AI",
470
+ "vendorProviders": [
471
+ "mistral"
472
+ ],
473
+ "matchers": [
474
+ {
475
+ "pattern": "^mistral-|^codestral|^devstral|^magistral|^ministral|^pixtral",
476
+ "note": "the vendor ships one lineup under several `-stral` names; all of them are Mistral models"
477
+ }
478
+ ],
479
+ "slots": [
480
+ {
481
+ "name": "large",
482
+ "canonicalModelId": "mistral-large-latest",
483
+ "description": "the strongest Mistral.",
484
+ "reason": "First: strength.",
485
+ "basis": "winter-curated",
486
+ "citation": "spec:WS-13c §9",
487
+ "status": "candidate"
488
+ },
489
+ {
490
+ "name": "medium",
491
+ "canonicalModelId": "mistral-medium-3.5",
492
+ "description": "the balanced model.",
493
+ "reason": "Second: balance.",
494
+ "basis": "winter-curated",
495
+ "citation": "spec:WS-13c §9",
496
+ "status": "candidate"
497
+ },
498
+ {
499
+ "name": "devstral",
500
+ "canonicalModelId": "devstral-latest",
501
+ "description": "the agentic-coding model.",
502
+ "reason": "Third: implementation.",
503
+ "basis": "winter-curated",
504
+ "citation": "spec:WS-13c §9",
505
+ "status": "candidate"
506
+ },
507
+ {
508
+ "name": "small",
509
+ "canonicalModelId": "mistral-small-latest",
510
+ "description": "the cheap implementer.",
511
+ "reason": "Fourth: cost.",
512
+ "basis": "winter-curated",
513
+ "citation": "spec:WS-13c §9",
514
+ "status": "candidate"
515
+ }
516
+ ],
517
+ "status": "candidate",
518
+ "citation": "spec:WS-13c §9"
519
+ },
520
+ {
521
+ "id": "o-series",
522
+ "displayName": "o-series",
523
+ "vendor": "OpenAI",
524
+ "vendorProviders": [
525
+ "openai"
526
+ ],
527
+ "matchers": [
528
+ {
529
+ "pattern": "^o[1-9](?:-|$)",
530
+ "note": "`o1`, `o3-mini`, `o4-mini` — bounded so it cannot swallow an unrelated id that merely starts with `o`"
531
+ }
532
+ ],
533
+ "slots": [],
534
+ "status": "candidate",
535
+ "citation": "spec:WS-13c §9 — no slots; listed under \"more options\" only"
536
+ },
537
+ {
538
+ "id": "other",
539
+ "displayName": "Other",
540
+ "vendor": "(various)",
541
+ "vendorProviders": [],
542
+ "$comment": "The fallback id `familyIdOf` returns when no matcher claims a row. Its matcher NEVER matches by construction — `(?!)` is an empty negative lookahead — so this row exists to be listed and described, not to claim anything. A session on such a model renders its own model as the single slot (WS-13c §3).",
543
+ "matchers": [
544
+ {
545
+ "pattern": "(?!)",
546
+ "note": "never matches; listed for the record — `familyIdOf` returns `other` as its FALLBACK, not through this pattern"
547
+ }
548
+ ],
549
+ "slots": [],
550
+ "status": "candidate",
551
+ "citation": "spec:WS-13c §1/§9 — the reserved fallback id"
552
+ },
553
+ {
554
+ "id": "qwen",
555
+ "displayName": "Qwen",
556
+ "vendor": "Alibaba",
557
+ "vendorProviders": [
558
+ "qwen-cloud",
559
+ "alibaba"
560
+ ],
561
+ "matchers": [
562
+ {
563
+ "pattern": "^qwen",
564
+ "note": "unanchored tail: the lineup ships as `qwen3.8-max` and `qwen-…` alike, after the `qwen/` namespace is stripped"
565
+ }
566
+ ],
567
+ "slots": [
568
+ {
569
+ "name": "max",
570
+ "canonicalModelId": "qwen3.8-max",
571
+ "description": "the strongest Qwen; complex reasoning and agentic coding.",
572
+ "reason": "First: strength.",
573
+ "basis": "winter-curated",
574
+ "citation": "spec:WS-13c §9",
575
+ "status": "candidate"
576
+ },
577
+ {
578
+ "name": "plus",
579
+ "canonicalModelId": "qwen3.7-plus",
580
+ "description": "the balanced everyday model.",
581
+ "reason": "Second: balance.",
582
+ "basis": "winter-curated",
583
+ "citation": "spec:WS-13c §9",
584
+ "status": "candidate"
585
+ },
586
+ {
587
+ "name": "small",
588
+ "canonicalModelId": "qwen3.6-27b",
589
+ "description": "a small open-weight implementer, cheap and widely served.",
590
+ "reason": "Third: cost.",
591
+ "basis": "winter-curated",
592
+ "citation": "spec:WS-13c §9",
593
+ "status": "candidate"
594
+ }
595
+ ],
596
+ "status": "candidate",
597
+ "citation": "spec:WS-13c §9"
598
+ }
599
+ ]
600
+ }