@oh-my-pi/pi-catalog 18.4.4 → 18.4.6

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.
Files changed (61) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/types/compat/auth-ids.d.ts +2 -2
  3. package/dist/types/compat/axes.d.ts +3 -1
  4. package/dist/types/compat/factory-droid.d.ts +65 -0
  5. package/dist/types/compat/provider-ids.d.ts +1 -1
  6. package/dist/types/compat/resolve.d.ts +8 -2
  7. package/dist/types/compat/types.d.ts +26 -1
  8. package/dist/types/discovery/cursor-proto.d.ts +284 -0
  9. package/dist/types/discovery/cursor.d.ts +12 -6
  10. package/dist/types/discovery/factory-droid.d.ts +28 -0
  11. package/dist/types/discovery/index.d.ts +1 -0
  12. package/dist/types/discovery/protobuf.d.ts +3 -3
  13. package/dist/types/model-manager.d.ts +10 -0
  14. package/dist/types/models.d.ts +5 -1
  15. package/dist/types/provider-models/cache-provider-id.d.ts +2 -1
  16. package/dist/types/provider-models/descriptor-types.d.ts +2 -1
  17. package/dist/types/provider-models/openai-compat.d.ts +21 -0
  18. package/dist/types/provider-models/special.d.ts +2 -0
  19. package/dist/types/types.d.ts +100 -3
  20. package/dist/types/wire/cursor.d.ts +20 -0
  21. package/dist/types/wire/factory-droid.d.ts +45 -0
  22. package/package.json +4 -4
  23. package/src/build.ts +21 -0
  24. package/src/compat/auth-ids.ts +4 -0
  25. package/src/compat/axes.ts +113 -2
  26. package/src/compat/cascade.ts +8 -1
  27. package/src/compat/collapse.ts +3 -0
  28. package/src/compat/factory-droid.ts +170 -0
  29. package/src/compat/provider-ids.ts +2 -0
  30. package/src/compat/resolve.ts +47 -5
  31. package/src/compat/rules/README.md +18 -8
  32. package/src/compat/rules/auth/_order.kdl +2 -2
  33. package/src/compat/rules/auth/factory-droid.kdl +28 -0
  34. package/src/compat/rules/auth/helmcode.kdl +9 -0
  35. package/src/compat/rules/classes/anthropic.kdl +195 -80
  36. package/src/compat/rules/providers/commandcode.kdl +21 -5
  37. package/src/compat/rules/providers/cursor.kdl +29 -17
  38. package/src/compat/rules/providers/factory-droid.kdl +1166 -0
  39. package/src/compat/rules/providers/helmcode.kdl +120 -0
  40. package/src/compat/rules/runtime/behavior.kdl +65 -4
  41. package/src/compat/rules/taxonomy/_collapse.kdl +36 -14
  42. package/src/compat/rules.json +1 -1
  43. package/src/compat/types.ts +27 -1
  44. package/src/discovery/cursor-models.proto +261 -0
  45. package/src/discovery/cursor-proto.ts +471 -0
  46. package/src/discovery/cursor.ts +817 -88
  47. package/src/discovery/devin.ts +1 -3
  48. package/src/discovery/factory-droid.ts +296 -0
  49. package/src/discovery/index.ts +1 -0
  50. package/src/discovery/protobuf.ts +16 -7
  51. package/src/model-manager.ts +13 -0
  52. package/src/models.json +1 -1
  53. package/src/models.ts +13 -0
  54. package/src/provider-models/cache-provider-id.ts +37 -6
  55. package/src/provider-models/descriptor-types.ts +2 -1
  56. package/src/provider-models/descriptors.ts +4 -0
  57. package/src/provider-models/openai-compat.ts +83 -17
  58. package/src/provider-models/special.ts +26 -2
  59. package/src/types.ts +112 -1
  60. package/src/wire/cursor.ts +32 -0
  61. package/src/wire/factory-droid.ts +130 -0
@@ -0,0 +1,1166 @@
1
+ // Factory Droid: the native CLI's model registry plus the request dialect each
2
+ // selected upstream speaks. These are Factory contracts, NOT direct-host
3
+ // inheritance. Registry facts are reviewed against the CLI version pinned by
4
+ // FACTORY_DROID_CLIENT_VERSION (wire/factory-droid.ts); request ground truth is
5
+ // the native CLI's own traffic: packages/ai/test/fixtures/
6
+ // factory-droid-native-requests.json, checked by factory-droid-native-parity.test.ts.
7
+ // Each model's wire and billing pool live in runtime/behavior.kdl
8
+ // (`api-routes` / `quota-tiers provider="factory-droid"`).
9
+ provider "factory-droid" {
10
+ default-model "kimi-k3"
11
+ allow-unauthenticated #true
12
+ dynamic-models-authoritative #true
13
+ // Native subscription limits are not direct-host price-tier or capacity heuristics.
14
+ context-window-authoritative #true
15
+
16
+ // The registry roster. Factory has no model-listing endpoint, so first-party
17
+ // clients ship this list and narrow it per account with feature flags, org
18
+ // policy and live routing (discovery/factory-droid.ts). The rows never enter
19
+ // models.json: gated models must stay hidden until live flags prove access,
20
+ // and each account rebuilds them on its residency host and wire path. Cost is
21
+ // zero here because Factory bills credits; `list-price-from` supplies the
22
+ // upstream list price shown beside the credit rate.
23
+ seed api="factory-droid-agent" base-url="https://api.factory.ai" bundle="never" {
24
+ model "claude-fable-5.1" name="Fable 5.1" {
25
+ reasoning #true
26
+ input "text" "image"
27
+ cost input=0 output=0 cache-read=0 cache-write=0
28
+ limits context=867000 max-tokens=128000
29
+ }
30
+ model "claude-fable-5" name="Fable 5" {
31
+ reasoning #true
32
+ input "text" "image"
33
+ cost input=0 output=0 cache-read=0 cache-write=0
34
+ limits context=867000 max-tokens=128000
35
+ }
36
+ model "claude-opus-5-5" name="Opus 5.5" {
37
+ reasoning #true
38
+ input "text" "image"
39
+ cost input=0 output=0 cache-read=0 cache-write=0
40
+ limits context=872000 max-tokens=128000
41
+ }
42
+ model "claude-opus-5-5-fast" name="Opus 5.5 Fast Mode" {
43
+ reasoning #true
44
+ input "text" "image"
45
+ cost input=0 output=0 cache-read=0 cache-write=0
46
+ limits context=872000 max-tokens=128000
47
+ }
48
+ model "claude-opus-5" name="Opus 5" {
49
+ reasoning #true
50
+ input "text" "image"
51
+ cost input=0 output=0 cache-read=0 cache-write=0
52
+ limits context=867000 max-tokens=128000
53
+ }
54
+ model "claude-opus-5-fast" name="Opus 5 Fast Mode" {
55
+ reasoning #true
56
+ input "text" "image"
57
+ cost input=0 output=0 cache-read=0 cache-write=0
58
+ limits context=867000 max-tokens=128000
59
+ }
60
+ model "claude-opus-4-8" name="Opus 4.8" {
61
+ reasoning #true
62
+ input "text" "image"
63
+ cost input=0 output=0 cache-read=0 cache-write=0
64
+ limits context=867000 max-tokens=128000
65
+ }
66
+ model "claude-opus-4-8-fast" name="Opus 4.8 Fast Mode" {
67
+ reasoning #true
68
+ input "text" "image"
69
+ cost input=0 output=0 cache-read=0 cache-write=0
70
+ limits context=867000 max-tokens=128000
71
+ }
72
+ model "claude-opus-4-7" name="Opus 4.7" {
73
+ reasoning #true
74
+ input "text" "image"
75
+ cost input=0 output=0 cache-read=0 cache-write=0
76
+ limits context=867000 max-tokens=128000
77
+ }
78
+ model "claude-opus-4-6" name="Opus 4.6" {
79
+ reasoning #true
80
+ input "text" "image"
81
+ cost input=0 output=0 cache-read=0 cache-write=0
82
+ limits context=867000 max-tokens=128000
83
+ }
84
+ model "claude-opus-4-5-20251101" name="Opus 4.5" {
85
+ reasoning #true
86
+ input "text" "image"
87
+ cost input=0 output=0 cache-read=0 cache-write=0
88
+ limits context=180000 max-tokens=64000
89
+ }
90
+ model "claude-sonnet-5-5" name="Sonnet 5.5" {
91
+ reasoning #true
92
+ input "text" "image"
93
+ cost input=0 output=0 cache-read=0 cache-write=0
94
+ limits context=872000 max-tokens=128000
95
+ }
96
+ model "claude-sonnet-5" name="Sonnet 5" {
97
+ reasoning #true
98
+ input "text" "image"
99
+ cost input=0 output=0 cache-read=0 cache-write=0
100
+ limits context=872000 max-tokens=128000
101
+ }
102
+ model "claude-sonnet-4-6" name="Sonnet 4.6" {
103
+ reasoning #true
104
+ input "text" "image"
105
+ cost input=0 output=0 cache-read=0 cache-write=0
106
+ limits context=931000 max-tokens=64000
107
+ }
108
+ model "claude-sonnet-4-5-20250929" name="Sonnet 4.5" {
109
+ reasoning #true
110
+ input "text" "image"
111
+ cost input=0 output=0 cache-read=0 cache-write=0
112
+ limits context=180000 max-tokens=32000
113
+ }
114
+ model "claude-haiku-4-5-20251001" name="Haiku 4.5" {
115
+ reasoning #true
116
+ input "text" "image"
117
+ cost input=0 output=0 cache-read=0 cache-write=0
118
+ limits context=180000 max-tokens=32000
119
+ }
120
+ model "gpt-6-astra" name="GPT-6 Astra" {
121
+ reasoning #true
122
+ input "text" "image"
123
+ cost input=0 output=0 cache-read=0 cache-write=0
124
+ limits context=922000 max-tokens=128000
125
+ }
126
+ model "gpt-6.1-sol" name="GPT-6.1 Sol" {
127
+ reasoning #true
128
+ input "text" "image"
129
+ cost input=0 output=0 cache-read=0 cache-write=0
130
+ limits context=922000 max-tokens=128000
131
+ }
132
+ model "gpt-6-sol" name="GPT-6 Sol" {
133
+ reasoning #true
134
+ input "text" "image"
135
+ cost input=0 output=0 cache-read=0 cache-write=0
136
+ limits context=922000 max-tokens=128000
137
+ }
138
+ model "gpt-6-luna" name="GPT-6 Luna" {
139
+ reasoning #true
140
+ input "text" "image"
141
+ cost input=0 output=0 cache-read=0 cache-write=0
142
+ limits context=922000 max-tokens=128000
143
+ }
144
+ model "gpt-5.6-sol" name="GPT-5.6 Sol" {
145
+ reasoning #true
146
+ input "text" "image"
147
+ cost input=0 output=0 cache-read=0 cache-write=0
148
+ limits context=922000 max-tokens=128000
149
+ }
150
+ model "gpt-5.6-sol-fast" name="GPT-5.6 Sol Fast Mode" {
151
+ reasoning #true
152
+ input "text" "image"
153
+ cost input=0 output=0 cache-read=0 cache-write=0
154
+ limits context=922000 max-tokens=128000
155
+ }
156
+ model "gpt-5.6-terra" name="GPT-5.6 Terra" {
157
+ reasoning #true
158
+ input "text" "image"
159
+ cost input=0 output=0 cache-read=0 cache-write=0
160
+ limits context=922000 max-tokens=128000
161
+ }
162
+ model "gpt-5.6-luna" name="GPT-5.6 Luna" {
163
+ reasoning #true
164
+ input "text" "image"
165
+ cost input=0 output=0 cache-read=0 cache-write=0
166
+ limits context=922000 max-tokens=128000
167
+ }
168
+ model "gpt-5.5" name="GPT-5.5" {
169
+ reasoning #true
170
+ input "text" "image"
171
+ cost input=0 output=0 cache-read=0 cache-write=0
172
+ limits context=922000 max-tokens=128000
173
+ }
174
+ model "gpt-5.5-fast" name="GPT-5.5 Fast Mode" {
175
+ reasoning #true
176
+ input "text" "image"
177
+ cost input=0 output=0 cache-read=0 cache-write=0
178
+ limits context=922000 max-tokens=128000
179
+ }
180
+ model "gpt-5.5-pro" name="GPT-5.5 Pro" {
181
+ reasoning #true
182
+ input "text" "image"
183
+ cost input=0 output=0 cache-read=0 cache-write=0
184
+ limits context=922000 max-tokens=128000
185
+ }
186
+ model "gpt-5.4" name="GPT-5.4" {
187
+ reasoning #true
188
+ input "text" "image"
189
+ cost input=0 output=0 cache-read=0 cache-write=0
190
+ limits context=922000 max-tokens=128000
191
+ }
192
+ model "gpt-5.4-fast" name="GPT-5.4 Fast Mode" {
193
+ reasoning #true
194
+ input "text" "image"
195
+ cost input=0 output=0 cache-read=0 cache-write=0
196
+ limits context=922000 max-tokens=128000
197
+ }
198
+ model "gpt-5.4-mini" name="GPT-5.4 Mini" {
199
+ reasoning #true
200
+ input "text" "image"
201
+ cost input=0 output=0 cache-read=0 cache-write=0
202
+ limits context=272000 max-tokens=128000
203
+ }
204
+ model "gpt-5.4-mini-fast" name="GPT-5.4 Mini Fast Mode" {
205
+ reasoning #true
206
+ input "text" "image"
207
+ cost input=0 output=0 cache-read=0 cache-write=0
208
+ limits context=272000 max-tokens=128000
209
+ }
210
+ model "gpt-5.3-codex" name="GPT-5.3-Codex" {
211
+ reasoning #true
212
+ input "text" "image"
213
+ cost input=0 output=0 cache-read=0 cache-write=0
214
+ limits context=272000 max-tokens=128000
215
+ }
216
+ model "gpt-5.3-codex-fast" name="GPT-5.3-Codex Fast Mode" {
217
+ reasoning #true
218
+ input "text" "image"
219
+ cost input=0 output=0 cache-read=0 cache-write=0
220
+ limits context=272000 max-tokens=128000
221
+ }
222
+ model "gpt-5.2" name="GPT-5.2" {
223
+ reasoning #true
224
+ input "text" "image"
225
+ cost input=0 output=0 cache-read=0 cache-write=0
226
+ limits context=272000 max-tokens=128000
227
+ }
228
+ model "garnet-07-15" name="Garnet 07/15 (Preview)" {
229
+ reasoning #true
230
+ input "text" "image"
231
+ cost input=0 output=0 cache-read=0 cache-write=0
232
+ limits context=1000000 max-tokens=65536
233
+ }
234
+ model "gemini-3.1-pro-preview" name="Gemini 3.1 Pro" {
235
+ reasoning #true
236
+ input "text" "image"
237
+ cost input=0 output=0 cache-read=0 cache-write=0
238
+ limits context=1000000 max-tokens=65536
239
+ }
240
+ model "gemini-3.8-flash" name="Gemini 3.8 Flash" {
241
+ reasoning #true
242
+ input "text" "image"
243
+ cost input=0 output=0 cache-read=0 cache-write=0
244
+ limits context=1000000 max-tokens=65536
245
+ }
246
+ model "gemini-3.7-flash" name="Gemini 3.7 Flash" {
247
+ reasoning #true
248
+ input "text" "image"
249
+ cost input=0 output=0 cache-read=0 cache-write=0
250
+ limits context=1000000 max-tokens=65536
251
+ }
252
+ model "gemini-3.6-flash" name="Gemini 3.6 Flash" {
253
+ reasoning #true
254
+ input "text" "image"
255
+ cost input=0 output=0 cache-read=0 cache-write=0
256
+ limits context=1000000 max-tokens=65536
257
+ }
258
+ model "gemini-3.5-flash" name="Gemini 3.5 Flash" {
259
+ reasoning #true
260
+ input "text" "image"
261
+ cost input=0 output=0 cache-read=0 cache-write=0
262
+ limits context=1000000 max-tokens=65536
263
+ }
264
+ model "gemini-3-flash-preview" name="Gemini 3 Flash" {
265
+ reasoning #true
266
+ input "text" "image"
267
+ cost input=0 output=0 cache-read=0 cache-write=0
268
+ limits context=1000000 max-tokens=65536
269
+ }
270
+ model "inkling" name="Inkling" {
271
+ reasoning #true
272
+ input "text" "image"
273
+ cost input=0 output=0 cache-read=0 cache-write=0
274
+ limits context=1007232 max-tokens=32768
275
+ }
276
+ model "mistral-medium-3.5" name="Mistral Medium 3.5" {
277
+ reasoning #true
278
+ input "text" "image"
279
+ cost input=0 output=0 cache-read=0 cache-write=0
280
+ limits context=192000 max-tokens=64000
281
+ }
282
+ model "glm-5.3-flash" name="GLM-5.3-Flash" {
283
+ reasoning #true
284
+ input "text" "image"
285
+ cost input=0 output=0 cache-read=0 cache-write=0
286
+ limits context=917504 max-tokens=131072
287
+ }
288
+ model "glm-5.3" name="GLM-5.3" {
289
+ reasoning #true
290
+ input "text"
291
+ cost input=0 output=0 cache-read=0 cache-write=0
292
+ limits context=908928 max-tokens=131072
293
+ }
294
+ model "glm-5.2" name="GLM-5.2" {
295
+ reasoning #true
296
+ input "text"
297
+ cost input=0 output=0 cache-read=0 cache-write=0
298
+ limits context=908928 max-tokens=131072
299
+ }
300
+ model "glm-5.2-fast" name="GLM-5.2 Fast" {
301
+ reasoning #true
302
+ input "text"
303
+ cost input=0 output=0 cache-read=0 cache-write=0
304
+ limits context=393216 max-tokens=131072
305
+ }
306
+ model "kimi-k3" name="Kimi K3" {
307
+ reasoning #true
308
+ input "text" "image"
309
+ cost input=0 output=0 cache-read=0 cache-write=0
310
+ limits context=196608 max-tokens=65536
311
+ }
312
+ model "qwen3.8-max" name="Qwen3.8 Max" {
313
+ reasoning #true
314
+ input "text"
315
+ cost input=0 output=0 cache-read=0 cache-write=0
316
+ limits context=131072 max-tokens=131072
317
+ }
318
+ model "nemotron-3-ultra" name="Nemotron 3 Ultra" {
319
+ reasoning #true
320
+ input "text"
321
+ cost input=0 output=0 cache-read=0 cache-write=0
322
+ limits context=136464 max-tokens=65536
323
+ }
324
+ model "deepseek-v4.1-flash" name="DeepSeek V4.1 Flash" {
325
+ reasoning #true
326
+ input "text" "image"
327
+ cost input=0 output=0 cache-read=0 cache-write=0
328
+ limits context=908928 max-tokens=131072
329
+ }
330
+ model "deepseek-v4-flash-0731" name="DeepSeek V4 Flash 0731" {
331
+ reasoning #true
332
+ input "text"
333
+ cost input=0 output=0 cache-read=0 cache-write=0
334
+ limits context=908928 max-tokens=131072
335
+ }
336
+ model "deepseek-v4-pro" name="DeepSeek V4 Pro" {
337
+ reasoning #true
338
+ input "text"
339
+ cost input=0 output=0 cache-read=0 cache-write=0
340
+ limits context=908928 max-tokens=131072
341
+ }
342
+ model "minimax-m3" name="MiniMax M3" {
343
+ reasoning #true
344
+ input "text" "image"
345
+ cost input=0 output=0 cache-read=0 cache-write=0
346
+ limits context=448000 max-tokens=64000
347
+ }
348
+ model "grok-4.7" name="Grok 4.7" {
349
+ reasoning #true
350
+ input "text" "image"
351
+ cost input=0 output=0 cache-read=0 cache-write=0
352
+ limits context=436644 max-tokens=63356
353
+ }
354
+ model "grok-4.6" name="Grok 4.6" {
355
+ reasoning #true
356
+ input "text" "image"
357
+ cost input=0 output=0 cache-read=0 cache-write=0
358
+ limits context=200000 max-tokens=63356
359
+ }
360
+ model "grok-4.5" name="Grok 4.5" {
361
+ reasoning #true
362
+ input "text" "image"
363
+ cost input=0 output=0 cache-read=0 cache-write=0
364
+ limits context=200000 max-tokens=63356
365
+ }
366
+ model "atlas-07-21" name="Atlas 07/21 (Preview)" {
367
+ reasoning #true
368
+ input "text" "image"
369
+ cost input=0 output=0 cache-read=0 cache-write=0
370
+ limits context=867000 max-tokens=128000
371
+ }
372
+ model "aster-07-15" name="Aster 07/15 (Preview)" {
373
+ reasoning #true
374
+ input "text" "image"
375
+ cost input=0 output=0 cache-read=0 cache-write=0
376
+ limits context=867000 max-tokens=128000
377
+ }
378
+ model "minimax-m2.7" name="MiniMax M2.7" {
379
+ reasoning #true
380
+ input "text"
381
+ cost input=0 output=0 cache-read=0 cache-write=0
382
+ limits context=196600 max-tokens=64000
383
+ }
384
+ }
385
+
386
+ // Upstream serving regions (the CLI's upstream region table). A model's own
387
+ // `region-upstreams-*` rule replaces its region's set (the CLI's
388
+ // regionOverrides): it may enable an upstream this table omits (EU Mistral),
389
+ // and a bare directive means the region does not serve the model.
390
+ region-upstreams-global "fireworks" "baseten" "mistral" "anthropic" "azure_anthropic" "vertex_anthropic" \
391
+ "bedrock_anthropic" "openai" "azure_openai" "bedrock_openai" "google" "xai" "snowflake" "databricks"
392
+ region-upstreams-us "baseten" "anthropic" "vertex_anthropic" "bedrock_anthropic" "openai" "bedrock_openai" \
393
+ "google" "xai"
394
+ region-upstreams-eu "vertex_anthropic" "bedrock_anthropic" "openai" "bedrock_openai"
395
+
396
+ // Per-model registry entries: live-routing family, upstream rotation (first
397
+ // entry is the default `x-api-provider`), region overrides, Standard Credits
398
+ // rates, list-price source, org-policy aliases, the effort ladder (an off/none
399
+ // rung means `thinking-requires-effort #false`), and account gates.
400
+ models "claude-fable-5.1" {
401
+ routing-family "anthropic"
402
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic"
403
+ region-upstreams-eu
404
+ credit-rates { input 4; output 5; cache-read 0.025 }
405
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
406
+ thinking-requires-effort #false
407
+ thinking-default-level "high"
408
+ entitlement { requires-explicit-opt-in #true }
409
+ }
410
+ models "claude-fable-5" {
411
+ routing-family "anthropic"
412
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic"
413
+ region-upstreams-eu
414
+ credit-rates { input 4; output 5 }
415
+ list-price-from "anthropic"
416
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
417
+ thinking-requires-effort #false
418
+ thinking-default-level "high"
419
+ entitlement { requires-explicit-opt-in #true }
420
+ }
421
+ models "claude-opus-5-5" {
422
+ routing-family "anthropic"
423
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic" "azure_anthropic" "snowflake"
424
+ credit-rates { input 1.6; output 5; cache-read 0.05 }
425
+ list-price-from "anthropic"
426
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
427
+ thinking-requires-effort #true
428
+ thinking-default-level "medium"
429
+ }
430
+ models "claude-opus-5-5-fast" {
431
+ routing-family "anthropic"
432
+ upstream-rotation "anthropic"
433
+ credit-rates { input 3.2; output 5; cache-read 0.05 }
434
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
435
+ thinking-requires-effort #true
436
+ thinking-default-level "medium"
437
+ entitlement { feature-flag "claude_opus_5_5_fast"; base-variant "claude-opus-5-5" }
438
+ }
439
+ models "claude-opus-5" {
440
+ routing-family "anthropic"
441
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic" "azure_anthropic" "snowflake"
442
+ region-upstreams-eu "bedrock_anthropic"
443
+ credit-rates { input 2 }
444
+ list-price-from "anthropic"
445
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
446
+ thinking-requires-effort #false
447
+ thinking-default-level "high"
448
+ }
449
+ models "claude-opus-5-fast" {
450
+ routing-family "anthropic"
451
+ upstream-rotation "anthropic"
452
+ credit-rates { input 4 }
453
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
454
+ thinking-requires-effort #false
455
+ thinking-default-level "high"
456
+ entitlement { base-variant "claude-opus-5" }
457
+ }
458
+ models "claude-opus-4-8" {
459
+ routing-family "anthropic"
460
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic" "azure_anthropic" "snowflake"
461
+ region-upstreams-eu "bedrock_anthropic"
462
+ credit-rates { input 2 }
463
+ list-price-from "anthropic"
464
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
465
+ thinking-requires-effort #false
466
+ thinking-default-level "high"
467
+ }
468
+ models "claude-opus-4-8-fast" {
469
+ routing-family "anthropic"
470
+ upstream-rotation "anthropic"
471
+ credit-rates { input 4 }
472
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
473
+ thinking-requires-effort #false
474
+ thinking-default-level "high"
475
+ entitlement { base-variant "claude-opus-4-8" }
476
+ }
477
+ models "claude-opus-4-7" {
478
+ routing-family "anthropic"
479
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic"
480
+ region-upstreams-eu "bedrock_anthropic"
481
+ credit-rates { input 2 }
482
+ list-price-from "anthropic"
483
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
484
+ thinking-requires-effort #false
485
+ thinking-default-level "high"
486
+ }
487
+ models "claude-opus-4-6" {
488
+ routing-family "anthropic"
489
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic" "azure_anthropic" "snowflake"
490
+ credit-rates { input 2 }
491
+ list-price-from "anthropic"
492
+ thinking-efforts "low" "medium" "high" "max"
493
+ thinking-requires-effort #false
494
+ thinking-default-level "high"
495
+ }
496
+ models "claude-opus-4-5-20251101" {
497
+ routing-family "anthropic"
498
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic"
499
+ region-upstreams-us "vertex_anthropic" "bedrock_anthropic"
500
+ credit-rates { input 2 }
501
+ list-price-from "anthropic"
502
+ thinking-efforts "low" "medium" "high"
503
+ thinking-requires-effort #false
504
+ default-reasoning-off #true
505
+ }
506
+ models "claude-sonnet-5-5" {
507
+ routing-family "anthropic"
508
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic" "azure_anthropic"
509
+ credit-rates { input 0.8; output 5 }
510
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
511
+ thinking-requires-effort #true
512
+ thinking-default-level "high"
513
+ entitlement { feature-flag "claude_sonnet_5_5" }
514
+ }
515
+ models "claude-sonnet-5" {
516
+ routing-family "anthropic"
517
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic" "azure_anthropic"
518
+ credit-rates { input 0.8; output 5 }
519
+ list-price-from "anthropic"
520
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
521
+ thinking-requires-effort #false
522
+ thinking-default-level "high"
523
+ }
524
+ models "claude-sonnet-4-6" {
525
+ routing-family "anthropic"
526
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic"
527
+ credit-rates { input 1.2 }
528
+ list-price-from "anthropic"
529
+ thinking-efforts "low" "medium" "high" "max"
530
+ thinking-requires-effort #false
531
+ thinking-default-level "high"
532
+ }
533
+ models "claude-sonnet-4-5-20250929" {
534
+ routing-family "anthropic"
535
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic"
536
+ region-upstreams-us "vertex_anthropic" "bedrock_anthropic"
537
+ credit-rates { input 1.2 }
538
+ list-price-from "anthropic"
539
+ thinking-efforts "low" "medium" "high"
540
+ thinking-requires-effort #false
541
+ default-reasoning-off #true
542
+ }
543
+ models "claude-haiku-4-5-20251001" {
544
+ routing-family "anthropic"
545
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic"
546
+ region-upstreams-us "vertex_anthropic" "bedrock_anthropic"
547
+ credit-rates { input 0.4 }
548
+ list-price-from "anthropic"
549
+ thinking-efforts "low" "medium" "high"
550
+ thinking-requires-effort #false
551
+ default-reasoning-off #true
552
+ }
553
+ models "gpt-6-astra" {
554
+ routing-family "openai"
555
+ upstream-rotation "openai" "bedrock_openai" "snowflake" "azure_openai"
556
+ region-upstreams-eu
557
+ credit-rates { input 4; output 5 }
558
+ list-price-from "openai"
559
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
560
+ thinking-requires-effort #true
561
+ thinking-default-level "medium"
562
+ }
563
+ models "gpt-6.1-sol" {
564
+ routing-family "openai"
565
+ upstream-rotation "openai"
566
+ region-upstreams-eu "openai"
567
+ credit-rates { input 0.8; output 5; cache-read 0.05 }
568
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
569
+ thinking-requires-effort #true
570
+ thinking-default-level "medium"
571
+ entitlement { feature-flag "gpt_6_1_sol" }
572
+ }
573
+ models "gpt-6-sol" {
574
+ routing-family "openai"
575
+ upstream-rotation "openai" "bedrock_openai" "azure_openai"
576
+ region-upstreams-eu "openai"
577
+ credit-rates { input 0.8; output 5 }
578
+ list-price-from "openai"
579
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
580
+ thinking-requires-effort #false
581
+ thinking-default-level "medium"
582
+ }
583
+ models "gpt-6-luna" {
584
+ routing-family "openai"
585
+ upstream-rotation "openai" "bedrock_openai" "azure_openai"
586
+ region-upstreams-eu "openai"
587
+ credit-rates { input 0.04; output 5 }
588
+ list-price-from "openai"
589
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
590
+ thinking-requires-effort #false
591
+ thinking-default-level "medium"
592
+ entitlement { feature-flag "gpt_6_luna" }
593
+ }
594
+ models "gpt-5.6-sol" {
595
+ routing-family "openai"
596
+ upstream-rotation "openai" "bedrock_openai" "azure_openai" "snowflake" "databricks"
597
+ region-upstreams-eu "openai"
598
+ credit-rates { input 2; output 5 }
599
+ list-price-from "openai"
600
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
601
+ thinking-requires-effort #false
602
+ thinking-default-level "medium"
603
+ }
604
+ models "gpt-5.6-sol-fast" {
605
+ routing-family "openai"
606
+ upstream-rotation "openai" "azure_openai"
607
+ credit-rates { input 4; output 5 }
608
+ policy-aliases "gpt-5.6-fast"
609
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
610
+ thinking-requires-effort #false
611
+ thinking-default-level "medium"
612
+ entitlement { base-variant "gpt-5.6-sol" }
613
+ }
614
+ models "gpt-5.6-terra" {
615
+ routing-family "openai"
616
+ upstream-rotation "openai" "bedrock_openai" "azure_openai" "snowflake" "databricks"
617
+ region-upstreams-eu "openai"
618
+ credit-rates { input 0.8; output 6 }
619
+ list-price-from "openai"
620
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
621
+ thinking-requires-effort #false
622
+ thinking-default-level "medium"
623
+ }
624
+ models "gpt-5.6-luna" {
625
+ routing-family "openai"
626
+ upstream-rotation "openai" "bedrock_openai" "azure_openai" "snowflake" "databricks"
627
+ region-upstreams-eu "openai"
628
+ credit-rates { input 0.08; output 6 }
629
+ list-price-from "openai"
630
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
631
+ thinking-requires-effort #false
632
+ thinking-default-level "medium"
633
+ }
634
+ models "gpt-5.5" {
635
+ routing-family "openai"
636
+ upstream-rotation "openai" "bedrock_openai" "azure_openai" "snowflake" "databricks"
637
+ region-upstreams-eu "openai"
638
+ credit-rates { input 2; output 6 }
639
+ list-price-from "openai"
640
+ thinking-efforts "low" "medium" "high" "xhigh"
641
+ thinking-requires-effort #true
642
+ thinking-default-level "medium"
643
+ }
644
+ models "gpt-5.5-fast" {
645
+ routing-family "openai"
646
+ upstream-rotation "openai" "azure_openai"
647
+ credit-rates { input 5; output 6 }
648
+ thinking-efforts "low" "medium" "high" "xhigh"
649
+ thinking-requires-effort #true
650
+ thinking-default-level "medium"
651
+ entitlement { base-variant "gpt-5.5" }
652
+ }
653
+ models "gpt-5.5-pro" {
654
+ routing-family "openai"
655
+ upstream-rotation "openai"
656
+ credit-rates { input 12; output 6 }
657
+ list-price-from "openai"
658
+ thinking-efforts "medium" "high" "xhigh"
659
+ thinking-requires-effort #true
660
+ thinking-default-level "medium"
661
+ }
662
+ models "gpt-5.4" {
663
+ routing-family "openai"
664
+ upstream-rotation "openai" "bedrock_openai" "azure_openai" "databricks"
665
+ region-upstreams-eu "openai"
666
+ credit-rates { input 1; output 6 }
667
+ list-price-from "openai"
668
+ thinking-efforts "low" "medium" "high" "xhigh"
669
+ thinking-requires-effort #true
670
+ thinking-default-level "medium"
671
+ }
672
+ models "gpt-5.4-fast" {
673
+ routing-family "openai"
674
+ upstream-rotation "openai" "azure_openai"
675
+ credit-rates { input 2; output 6 }
676
+ thinking-efforts "low" "medium" "high" "xhigh"
677
+ thinking-requires-effort #true
678
+ thinking-default-level "medium"
679
+ entitlement { base-variant "gpt-5.4" }
680
+ }
681
+ models "gpt-5.4-mini" {
682
+ routing-family "openai"
683
+ upstream-rotation "openai" "azure_openai"
684
+ credit-rates { input 0.3; output 6 }
685
+ list-price-from "openai"
686
+ thinking-efforts "low" "medium" "high" "xhigh"
687
+ thinking-requires-effort #true
688
+ thinking-default-level "high"
689
+ }
690
+ models "gpt-5.4-mini-fast" {
691
+ routing-family "openai"
692
+ upstream-rotation "openai" "azure_openai"
693
+ credit-rates { input 0.6; output 6 }
694
+ thinking-efforts "low" "medium" "high" "xhigh"
695
+ thinking-requires-effort #true
696
+ thinking-default-level "high"
697
+ entitlement { base-variant "gpt-5.4-mini" }
698
+ }
699
+ models "gpt-5.3-codex" {
700
+ routing-family "openai"
701
+ upstream-rotation "openai" "azure_openai"
702
+ region-upstreams-us
703
+ credit-rates { input 0.7 }
704
+ list-price-from "openai"
705
+ thinking-efforts "low" "medium" "high" "xhigh"
706
+ thinking-requires-effort #true
707
+ thinking-default-level "medium"
708
+ }
709
+ models "gpt-5.3-codex-fast" {
710
+ routing-family "openai"
711
+ upstream-rotation "openai"
712
+ region-upstreams-us
713
+ credit-rates { input 1.4; output 8 }
714
+ thinking-efforts "low" "medium" "high" "xhigh"
715
+ thinking-requires-effort #true
716
+ thinking-default-level "medium"
717
+ entitlement { base-variant "gpt-5.3-codex" }
718
+ }
719
+ models "gpt-5.2" {
720
+ routing-family "openai"
721
+ upstream-rotation "openai" "azure_openai"
722
+ credit-rates { input 0.7 }
723
+ list-price-from "openai"
724
+ thinking-efforts "low" "medium" "high" "xhigh"
725
+ thinking-requires-effort #false
726
+ thinking-default-level "low"
727
+ }
728
+ models "garnet-07-15" {
729
+ routing-family "google"
730
+ upstream-rotation "google"
731
+ region-upstreams-us
732
+ credit-rates { input 0.6 }
733
+ thinking-efforts "medium" "high"
734
+ thinking-requires-effort #true
735
+ thinking-default-level "high"
736
+ entitlement { feature-flag "garnet_0715" }
737
+ }
738
+ models "gemini-3.1-pro-preview" {
739
+ routing-family "google"
740
+ upstream-rotation "google"
741
+ region-upstreams-us
742
+ credit-rates { input 0.8 }
743
+ list-price-from "google"
744
+ policy-aliases "gemini-3-pro-preview"
745
+ thinking-efforts "low" "medium" "high"
746
+ thinking-requires-effort #true
747
+ thinking-default-level "high"
748
+ }
749
+ models "gemini-3.8-flash" {
750
+ routing-family "google"
751
+ upstream-rotation "google"
752
+ credit-rates { input 0.6; output 5 }
753
+ list-price-from "google"
754
+ thinking-efforts "low" "medium" "high"
755
+ thinking-requires-effort #true
756
+ thinking-default-level "high"
757
+ }
758
+ models "gemini-3.7-flash" {
759
+ routing-family "google"
760
+ upstream-rotation "google"
761
+ credit-rates { input 0.6; output 5 }
762
+ list-price-from "google"
763
+ thinking-efforts "low" "medium" "high"
764
+ thinking-requires-effort #true
765
+ thinking-default-level "high"
766
+ }
767
+ models "gemini-3.6-flash" {
768
+ routing-family "google"
769
+ upstream-rotation "google"
770
+ credit-rates { input 0.6; output 5 }
771
+ list-price-from "google"
772
+ thinking-efforts "low" "medium" "high"
773
+ thinking-requires-effort #true
774
+ thinking-default-level "high"
775
+ }
776
+ models "gemini-3.5-flash" {
777
+ routing-family "google"
778
+ upstream-rotation "google"
779
+ credit-rates { input 0.6 }
780
+ list-price-from "google"
781
+ thinking-efforts "minimal" "low" "medium" "high"
782
+ thinking-requires-effort #true
783
+ thinking-default-level "high"
784
+ }
785
+ models "gemini-3-flash-preview" {
786
+ routing-family "google"
787
+ upstream-rotation "google"
788
+ region-upstreams-us
789
+ credit-rates { input 0.2 }
790
+ list-price-from "google"
791
+ thinking-efforts "minimal" "low" "medium" "high"
792
+ thinking-requires-effort #true
793
+ thinking-default-level "high"
794
+ }
795
+ models "inkling" {
796
+ routing-family "factory"
797
+ upstream-rotation "fireworks"
798
+ credit-rates { input 0.4; output 4.05; cache-read 0.17 }
799
+ list-price-from "fireworks"
800
+ thinking-efforts "minimal" "low" "medium" "high" "xhigh" "max"
801
+ thinking-requires-effort #false
802
+ thinking-default-level "high"
803
+ }
804
+ models "mistral-medium-3.5" {
805
+ routing-family "factory"
806
+ upstream-rotation "mistral"
807
+ region-upstreams-eu "mistral"
808
+ credit-rates { input 0.6; output 5 }
809
+ thinking-efforts "high"
810
+ thinking-requires-effort #false
811
+ thinking-default-level "high"
812
+ }
813
+ models "glm-5.3-flash" {
814
+ routing-family "factory"
815
+ upstream-rotation "fireworks" "baseten" "databricks"
816
+ credit-rates { input 0.06; output 3.34; cache-read 0.2 }
817
+ list-price-from "fireworks"
818
+ thinking-efforts "low" "high" "max"
819
+ thinking-requires-effort #true
820
+ thinking-default-level "high"
821
+ }
822
+ models "glm-5.3" {
823
+ routing-family "factory"
824
+ upstream-rotation "fireworks" "baseten" "mistral" "databricks"
825
+ region-upstreams-global "fireworks" "baseten" "databricks"
826
+ region-upstreams-eu "mistral"
827
+ credit-rates { input 0.56; output 3.15 }
828
+ list-price-from "fireworks"
829
+ thinking-efforts "low" "high" "max"
830
+ thinking-requires-effort #true
831
+ thinking-default-level "max"
832
+ }
833
+ models "glm-5.2" {
834
+ routing-family "factory"
835
+ upstream-rotation "baseten" "mistral"
836
+ region-upstreams-global "baseten"
837
+ region-upstreams-eu "mistral"
838
+ region-limits-eu { context-window 200000; max-tokens 65536 }
839
+ credit-rates { input 0.56; output 3.15 }
840
+ list-price-from "fireworks"
841
+ policy-aliases "glm-5.1"
842
+ thinking-efforts "high" "max"
843
+ thinking-requires-effort #false
844
+ thinking-default-level "high"
845
+ }
846
+ models "glm-5.2-fast" {
847
+ routing-family "factory"
848
+ upstream-rotation "baseten"
849
+ credit-rates { input 0.84; output 3.2 }
850
+ policy-aliases "glm-5p2-fast"
851
+ thinking-efforts "high" "max"
852
+ thinking-requires-effort #false
853
+ thinking-default-level "high"
854
+ entitlement { feature-flag "glm_5_2_fast"; base-variant "glm-5.2" }
855
+ }
856
+ models "kimi-k3" {
857
+ routing-family "factory"
858
+ upstream-rotation "fireworks" "baseten" "databricks"
859
+ credit-rates { input 1.2; output 5 }
860
+ list-price-from "fireworks"
861
+ thinking-efforts "low" "high" "max"
862
+ // Native Factory exposes off even though direct K3 deployments do not.
863
+ thinking-requires-effort #false
864
+ thinking-default-level "high"
865
+ }
866
+ models "qwen3.8-max" {
867
+ routing-family "factory"
868
+ upstream-rotation "fireworks"
869
+ credit-rates { input 0.8; output 3 }
870
+ list-price-from "fireworks"
871
+ thinking-efforts "low" "medium" "xhigh"
872
+ thinking-requires-effort #true
873
+ thinking-default-level "xhigh"
874
+ }
875
+ models "nemotron-3-ultra" {
876
+ routing-family "factory"
877
+ upstream-rotation "baseten" "fireworks"
878
+ credit-rates { input 0.24; output 4 }
879
+ list-price-from "baseten" "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B"
880
+ thinking-efforts "high"
881
+ thinking-requires-effort #false
882
+ thinking-default-level "high"
883
+ }
884
+ models "deepseek-v4.1-flash" {
885
+ routing-family "factory"
886
+ upstream-rotation "fireworks" "baseten" "databricks"
887
+ credit-rates { input 0.12; output 4; cache-read 0.024 }
888
+ list-price-from "fireworks"
889
+ thinking-efforts "low" "high" "max"
890
+ thinking-requires-effort #false
891
+ thinking-default-level "high"
892
+ entitlement { feature-flag "deepseek_v4_1_flash" }
893
+ }
894
+ models "deepseek-v4-flash-0731" {
895
+ routing-family "factory"
896
+ upstream-rotation "fireworks" "baseten"
897
+ credit-rates { input 0.176; output 3; cache-read 0.032 }
898
+ list-price-from "fireworks"
899
+ thinking-efforts "low" "high" "max"
900
+ thinking-requires-effort #false
901
+ thinking-default-level "high"
902
+ entitlement { deprecation-flag "deprecate_deepseek_v4_flash_0731" }
903
+ }
904
+ models "deepseek-v4-pro" {
905
+ routing-family "factory"
906
+ upstream-rotation "fireworks" "baseten"
907
+ credit-rates { input 0.528; output 3; cache-read 0.034 }
908
+ list-price-from "fireworks"
909
+ thinking-efforts "low" "high" "max"
910
+ thinking-requires-effort #false
911
+ thinking-default-level "high"
912
+ entitlement { deprecation-flag "deprecate_deepseek_v4_pro" }
913
+ }
914
+ models "minimax-m3" {
915
+ routing-family "factory"
916
+ upstream-rotation "fireworks"
917
+ credit-rates { input 0.12; output 4 }
918
+ list-price-from "fireworks"
919
+ thinking-efforts "high"
920
+ thinking-requires-effort #true
921
+ thinking-default-level "high"
922
+ entitlement { feature-flag "minimax_m3" }
923
+ }
924
+ models "grok-4.7" {
925
+ routing-family "xai"
926
+ upstream-rotation "xai"
927
+ credit-rates { input 0.8; output 3; cache-read 0.25 }
928
+ list-price-from "xai"
929
+ thinking-efforts "low" "medium" "high" "xhigh"
930
+ thinking-requires-effort #true
931
+ thinking-default-level "high"
932
+ }
933
+ models "grok-4.6" {
934
+ routing-family "xai"
935
+ upstream-rotation "xai"
936
+ credit-rates { input 0.8; output 3; cache-read 0.25 }
937
+ list-price-from "xai"
938
+ thinking-efforts "low" "medium" "high" "xhigh"
939
+ thinking-requires-effort #true
940
+ thinking-default-level "high"
941
+ }
942
+ models "grok-4.5" {
943
+ routing-family "xai"
944
+ upstream-rotation "xai"
945
+ region-upstreams-us
946
+ credit-rates { input 0.8; output 3; cache-read 0.15 }
947
+ list-price-from "xai"
948
+ thinking-efforts "low" "medium" "high"
949
+ thinking-requires-effort #true
950
+ thinking-default-level "high"
951
+ }
952
+ models "atlas-07-21" {
953
+ routing-family "anthropic"
954
+ upstream-rotation "anthropic"
955
+ region-upstreams-us
956
+ credit-rates { input 2 }
957
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
958
+ thinking-requires-effort #false
959
+ thinking-default-level "high"
960
+ entitlement { feature-flag "atlas_0721" }
961
+ }
962
+ models "aster-07-15" {
963
+ routing-family "anthropic"
964
+ upstream-rotation "anthropic"
965
+ region-upstreams-us
966
+ credit-rates { input 2 }
967
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
968
+ thinking-requires-effort #false
969
+ thinking-default-level "high"
970
+ entitlement { feature-flag "aster_0715" }
971
+ }
972
+ models "minimax-m2.7" {
973
+ routing-family "factory"
974
+ upstream-rotation "fireworks"
975
+ credit-rates { input 0.12; output 4 }
976
+ list-price-from "fireworks"
977
+ thinking-efforts "high"
978
+ thinking-requires-effort #true
979
+ thinking-default-level "high"
980
+ }
981
+
982
+
983
+ on-api "openai-completions" {
984
+ max-tokens-field "max_tokens"
985
+ supports-store #false
986
+ thinking-format "openai"
987
+ disable-reasoning-on-forced-tool-choice #false
988
+ disable-reasoning-on-tool-choice #false
989
+ allows-synthetic-reasoning-content-for-tool-calls #false
990
+ requires-assistant-content-for-tool-calls #false
991
+ requires-reasoning-content-for-tool-calls #false
992
+ requires-reasoning-content-for-all-assistant-turns #false
993
+ replay-reasoning-content #true
994
+ mistral-reasoning-content-parts #false
995
+ requires-thinking-as-text #false
996
+ reasoning-content-field "reasoning_content"
997
+ }
998
+ on-api "openai-responses" {
999
+ // Native declares every Responses tool `strict: false`; the field must reach the wire.
1000
+ supports-strict-mode #true
1001
+ }
1002
+ models "glm-*" "kimi-*" "deepseek-*" "nemotron-*" "inkling" "mistral-medium-3.5" "qwen3.8-max" "minimax-m3" {
1003
+ clamp-output-to-model-max #true
1004
+ completions-reasoning-mode "none"
1005
+ completions-reasoning-history "omit"
1006
+ on-upstream "fireworks" {
1007
+ completions-reasoning-mode "effort"
1008
+ completions-reasoning-history "preserved"
1009
+ }
1010
+ on-upstream "baseten" "databricks" {
1011
+ completions-reasoning-mode "effort"
1012
+ }
1013
+ }
1014
+ // MiniMax M3 uses Completions with high effort, but NO reasoning_history.
1015
+ models "minimax-m3" {
1016
+ on-upstream "fireworks" priority=10 {
1017
+ completions-reasoning-history "omit"
1018
+ }
1019
+ }
1020
+ models "kimi-k3" {
1021
+ requires-tool-result-name #true
1022
+ }
1023
+ models "nemotron-3-ultra" {
1024
+ on-upstream "baseten" {
1025
+ completions-reasoning-mode "opt-in"
1026
+ }
1027
+ }
1028
+ models "deepseek-*" {
1029
+ on-upstream "baseten" priority=10 {
1030
+ completions-reasoning-mode "forced-on"
1031
+ }
1032
+ on-upstream "fireworks" priority=10 {
1033
+ completions-reasoning-history "interleaved"
1034
+ }
1035
+ on-upstream "fireworks" "baseten" {
1036
+ requires-reasoning-content-for-tool-calls #true
1037
+ synthetic-reasoning-content-fallback " "
1038
+ }
1039
+ }
1040
+ // The replay codec follows the selected route, including EU GLM routes.
1041
+ on-upstream "mistral" {
1042
+ models "glm-*" "mistral-medium-3.5" {
1043
+ completions-reasoning-mode "effort"
1044
+ completions-reasoning-history "omit"
1045
+ mistral-reasoning-content-parts #true
1046
+ }
1047
+ }
1048
+
1049
+ // Native budget ladder for the Messages models that still use token budgets.
1050
+ models "claude-sonnet-4-5-20250929" "claude-haiku-4-5-20251001" "claude-opus-4-5-20251101" "minimax-m2.7" {
1051
+ thinking-effort-budgets {
1052
+ low 4096
1053
+ medium 12288
1054
+ high 24576
1055
+ }
1056
+ }
1057
+
1058
+ // Messages contract on every Factory Anthropic route: non-thinking-led
1059
+ // history drops thinking, disabled thinking omits the field, and the effort
1060
+ // beta rides only where the route requires it alongside output effort.
1061
+ on-api "anthropic-messages" {
1062
+ strip-thinking-history #true
1063
+ disabled-thinking "omit"
1064
+ effort-beta #false
1065
+ // Native declares no strict tools; strict schemas compile into a grammar
1066
+ // that proxied routes can reject as oversized.
1067
+ disable-strict-tools #true
1068
+ // Bedrock/Vertex require the beta alongside any output effort.
1069
+ on-upstream "bedrock_anthropic" "vertex_anthropic" {
1070
+ effort-beta #true
1071
+ }
1072
+ on-upstream "snowflake" {
1073
+ disabled-thinking "disabled"
1074
+ }
1075
+ }
1076
+ models "claude-*" "atlas-07-21" "aster-07-15" {
1077
+ anthropic-thinking "adaptive-summarized"
1078
+ }
1079
+ models "claude-opus-4-6" "claude-sonnet-4-6" {
1080
+ anthropic-thinking "adaptive"
1081
+ }
1082
+ models "claude-sonnet-4-5-20250929" "claude-haiku-4-5-20251001" {
1083
+ anthropic-thinking "budget-interleaved"
1084
+ }
1085
+ // Native Opus 4.5 thinking always pairs output effort with its beta, on every upstream.
1086
+ models "claude-opus-4-5-20251101" {
1087
+ anthropic-thinking "budget-effort"
1088
+ effort-beta #true
1089
+ }
1090
+ models "minimax-m2.7" {
1091
+ anthropic-thinking "budget-effort"
1092
+ }
1093
+ // Always-thinking models keep adaptive thinking on disabled turns, on every upstream.
1094
+ models "claude-fable-5.1" "claude-opus-5-5" "claude-opus-5-5-fast" "claude-sonnet-5-5" {
1095
+ disabled-thinking "adaptive"
1096
+ }
1097
+ // Fast tiers are distinct SKUs served with `speed: "fast"`.
1098
+ models "claude-opus-5-5-fast" "claude-opus-5-fast" "claude-opus-4-8-fast" {
1099
+ fast-mode #true
1100
+ }
1101
+ // Refusals retry server-side only on the first-party Anthropic upstream.
1102
+ models "claude-fable-5" "claude-fable-5.1" {
1103
+ on-upstream "anthropic" {
1104
+ server-side-fallback-models "claude-opus-5"
1105
+ }
1106
+ }
1107
+ // With tools, Anthropic and Vertex stream tool input eagerly and advertise
1108
+ // fine-grained tool streaming; Bedrock takes the beta alone.
1109
+ on-upstream "anthropic" "vertex_anthropic" {
1110
+ supports-eager-tool-input-streaming #true
1111
+ anthropic-tool-streaming-beta #true
1112
+ }
1113
+ on-upstream "bedrock_anthropic" {
1114
+ anthropic-tool-streaming-beta #true
1115
+ }
1116
+ // xAI and Google sessions lock their upstream.
1117
+ on-upstream "xai" "google" {
1118
+ routing-session-lock #true
1119
+ }
1120
+ // OpenAI-family upstreams carry native's platform organization hint.
1121
+ on-upstream "openai" "azure_openai" {
1122
+ openai-platform-header "org-bHuLtG1fGmYk5YaOihAAXFBw"
1123
+ }
1124
+
1125
+ models "gpt-*" "grok-*" {
1126
+ // Disabled reasoning omits the reasoning object, except on routes that
1127
+ // need the literal `none` tier.
1128
+ reasoning-disable-mode "omit"
1129
+ responses-cache-retention #false
1130
+ responses-parallel-tool-calls #true
1131
+ on-upstream "bedrock_openai" "snowflake" {
1132
+ reasoning-disable-mode "none-effort"
1133
+ }
1134
+ }
1135
+ models "gpt-*" {
1136
+ omit-max-output-tokens #true
1137
+ responses-verbosity "low"
1138
+ responses-safety-identifier #true
1139
+ // Native defaults tool_choice to auto for the OpenAI family only.
1140
+ responses-tool-choice-auto #true
1141
+ reasoning-effort-map {
1142
+ max "max"
1143
+ }
1144
+ on-upstream "openai" {
1145
+ responses-cache-retention #true
1146
+ }
1147
+ }
1148
+ models "gpt-5.2" {
1149
+ responses-cache-retention #false
1150
+ responses-safety-identifier #false
1151
+ }
1152
+ models "gpt-*-fast" {
1153
+ responses-service-tier "priority"
1154
+ }
1155
+ models "grok-*" {
1156
+ supports-reasoning-summary #false
1157
+ }
1158
+ models "gemini-*" "garnet-07-15" {
1159
+ omit-max-output-tokens #true
1160
+ google-thinking "level"
1161
+ }
1162
+ models "gemini-3.1-pro-preview" "gemini-3.7-flash" "gemini-3.8-flash" {
1163
+ google-thinking "level-medium"
1164
+ }
1165
+ // FACTORY_API_KEY is a control-plane key, not a subscription proxy token.
1166
+ }