@oh-my-pi/pi-catalog 18.6.1 → 18.7.0

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 (43) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/types/compat/auth-ids.d.ts +2 -2
  3. package/dist/types/compat/image-tokenization.d.ts +52 -0
  4. package/dist/types/compat/provider-ids.d.ts +1 -1
  5. package/dist/types/compat/types.d.ts +2 -0
  6. package/dist/types/hosts.d.ts +4 -0
  7. package/dist/types/types.d.ts +38 -4
  8. package/package.json +4 -4
  9. package/src/build.ts +4 -1
  10. package/src/compat/auth-ids.ts +2 -0
  11. package/src/compat/axes.ts +4 -0
  12. package/src/compat/image-tokenization.ts +166 -0
  13. package/src/compat/provider-ids.ts +1 -0
  14. package/src/compat/resolve.ts +11 -1
  15. package/src/compat/rules/README.md +4 -0
  16. package/src/compat/rules/auth/_order.kdl +1 -1
  17. package/src/compat/rules/auth/minimax-code-cn.kdl +1 -1
  18. package/src/compat/rules/auth/minimax-code.kdl +1 -1
  19. package/src/compat/rules/auth/snowflake.kdl +11 -0
  20. package/src/compat/rules/classes/anthropic.kdl +72 -7
  21. package/src/compat/rules/classes/gemini.kdl +12 -0
  22. package/src/compat/rules/classes/minimax.kdl +21 -1
  23. package/src/compat/rules/classes/openai.kdl +102 -0
  24. package/src/compat/rules/providers/apple.kdl +1 -0
  25. package/src/compat/rules/providers/google-antigravity.kdl +3 -0
  26. package/src/compat/rules/providers/image-tokenization.kdl +42 -0
  27. package/src/compat/rules/providers/minimax-code-cn.kdl +10 -5
  28. package/src/compat/rules/providers/minimax-code.kdl +10 -5
  29. package/src/compat/rules/providers/mistral.kdl +20 -0
  30. package/src/compat/rules/providers/muse-code.kdl +7 -0
  31. package/src/compat/rules/providers/openai-codex.kdl +7 -0
  32. package/src/compat/rules/providers/openai.kdl +5 -0
  33. package/src/compat/rules/providers/snowflake.kdl +135 -0
  34. package/src/compat/rules/runtime/behavior.kdl +2 -0
  35. package/src/compat/rules/taxonomy/_collapse.kdl +18 -0
  36. package/src/compat/rules.json +1 -1
  37. package/src/compat/types.ts +2 -0
  38. package/src/hosts.ts +2 -0
  39. package/src/models.json +1 -1
  40. package/src/provider-models/google.ts +2 -0
  41. package/src/provider-models/openai-compat.ts +6 -17
  42. package/src/provider-models/special.ts +2 -2
  43. package/src/types.ts +75 -3
@@ -1,5 +1,70 @@
1
1
  // Model-lineage compat for "anthropic"; regenerated from the frozen census using class taxonomy selectors.
2
2
 
3
+ // Images bill ⌈w/28⌉·⌈h/28⌉ visual tokens on every host. Claude 4.7+ and
4
+ // Fable/Mythos read up to 2576px and 4,784 tokens; older lines fit 1568px and
5
+ // cap at 1,568 tokens, downscaling past it.
6
+ // https://platform.claude.com/docs/en/build-with-claude/vision#evaluate-image-size
7
+ // The class default is the high-res tier, so ids without a revision
8
+ // (`claude-opus-latest`, `~anthropic/claude-sonnet-latest`) and future lines
9
+ // are never undercounted; only Opus/Sonnet/Haiku revisions known to predate
10
+ // 4.7 take the standard tier. Separator-collapsed revisions parse as two
11
+ // digits (`claude-opus-45` is Opus 4.5 → 45), so 10–46 is standard too.
12
+ class "anthropic" {
13
+ image-tokenization {
14
+ regime "anthropic-patch"
15
+ max-edge 2576
16
+ max-tokens 4784
17
+ }
18
+ family "opus" {
19
+ revision "<4.7" {
20
+ image-tokenization {
21
+ regime "anthropic-patch"
22
+ max-edge 1568
23
+ max-tokens 1568
24
+ }
25
+ }
26
+ revision ">=10 <47" {
27
+ image-tokenization {
28
+ regime "anthropic-patch"
29
+ max-edge 1568
30
+ max-tokens 1568
31
+ }
32
+ }
33
+ }
34
+ family "sonnet" {
35
+ revision "<4.7" {
36
+ image-tokenization {
37
+ regime "anthropic-patch"
38
+ max-edge 1568
39
+ max-tokens 1568
40
+ }
41
+ }
42
+ revision ">=10 <47" {
43
+ image-tokenization {
44
+ regime "anthropic-patch"
45
+ max-edge 1568
46
+ max-tokens 1568
47
+ }
48
+ }
49
+ }
50
+ family "haiku" {
51
+ revision "<4.7" {
52
+ image-tokenization {
53
+ regime "anthropic-patch"
54
+ max-edge 1568
55
+ max-tokens 1568
56
+ }
57
+ }
58
+ revision ">=10 <47" {
59
+ image-tokenization {
60
+ regime "anthropic-patch"
61
+ max-edge 1568
62
+ max-tokens 1568
63
+ }
64
+ }
65
+ }
66
+ }
67
+
3
68
  class "anthropic" {
4
69
  family "fable" {
5
70
  revision ">=5.1" {
@@ -181,7 +246,7 @@ class "anthropic" {
181
246
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
182
247
  }
183
248
  on "amazon-bedrock" "anthropic" "cloudflare-ai-gateway" "github-copilot" "gitlab-duo" \
184
- "google-antigravity" "google-vertex" "opencode-zen" "vercel-ai-gateway" "zenmux" {
249
+ "google-antigravity" "google-vertex" "opencode-zen" "snowflake" "vercel-ai-gateway" "zenmux" {
185
250
  family "sonnet" {
186
251
  revision ">=3.7 <4.6" {
187
252
  thinking-mode "budget"
@@ -189,13 +254,13 @@ class "anthropic" {
189
254
  }
190
255
  }
191
256
  on "amazon-bedrock" "anthropic" "cloudflare-ai-gateway" "github-copilot" "gitlab-duo" \
192
- "google-vertex" "opencode-zen" "vercel-ai-gateway" {
257
+ "google-vertex" "opencode-zen" "snowflake" "vercel-ai-gateway" {
193
258
  family "haiku" {
194
259
  thinking-mode "budget"
195
260
  }
196
261
  }
197
262
  on "amazon-bedrock" "anthropic" "cloudflare-ai-gateway" "github-copilot" "gitlab-duo" \
198
- "google-vertex" "opencode-zen" "vercel-ai-gateway" "zenmux" {
263
+ "google-vertex" "opencode-zen" "snowflake" "vercel-ai-gateway" "zenmux" {
199
264
  family "opus" {
200
265
  revision ">=4.5 <4.6" {
201
266
  thinking-mode "anthropic-budget-effort"
@@ -203,7 +268,7 @@ class "anthropic" {
203
268
  }
204
269
  }
205
270
  on "amazon-bedrock" "anthropic" "cloudflare-ai-gateway" "github-copilot" "google-vertex" \
206
- "opencode-zen" "openrouter" "vercel-ai-gateway" "zenmux" {
271
+ "opencode-zen" "openrouter" "snowflake" "vercel-ai-gateway" "zenmux" {
207
272
  family "opus" {
208
273
  revision ">=4.6 <4.7" {
209
274
  thinking-efforts "low" "medium" "high" "max"
@@ -211,7 +276,7 @@ class "anthropic" {
211
276
  }
212
277
  }
213
278
  on "amazon-bedrock" "anthropic" "cloudflare-ai-gateway" "github-copilot" "google-vertex" \
214
- "opencode-zen" "vercel-ai-gateway" "zenmux" {
279
+ "opencode-zen" "snowflake" "vercel-ai-gateway" "zenmux" {
215
280
  revision ">=4.7 <45.1" {
216
281
  thinking-mode "anthropic-adaptive"
217
282
  }
@@ -242,13 +307,13 @@ class "anthropic" {
242
307
  }
243
308
  }
244
309
  on "anthropic" "cloudflare-ai-gateway" "github-copilot" "google-vertex" "opencode-zen" \
245
- "openrouter" "vercel-ai-gateway" "zenmux" {
310
+ "openrouter" "snowflake" "vercel-ai-gateway" "zenmux" {
246
311
  revision ">=4.7 <45.1" {
247
312
  thinking-efforts "low" "medium" "high" "xhigh" "max"
248
313
  }
249
314
  }
250
315
  on "anthropic" "cloudflare-ai-gateway" "github-copilot" "google-vertex" "opencode-zen" \
251
- "vercel-ai-gateway" "zenmux" {
316
+ "snowflake" "vercel-ai-gateway" "zenmux" {
252
317
  family "sonnet" {
253
318
  revision ">=4.6 <5" {
254
319
  thinking-efforts "low" "medium" "high"
@@ -118,3 +118,15 @@ class "gemini" {
118
118
  }
119
119
  }
120
120
  }
121
+
122
+ // Gemini 3+ bills a fixed `media_resolution` budget per image regardless of
123
+ // pixels; the default for images is HIGH, 1,120 tokens.
124
+ // https://ai.google.dev/gemini-api/docs/media-resolution
125
+ class "gemini" {
126
+ revision ">=3" {
127
+ image-tokenization {
128
+ regime "fixed"
129
+ tokens 1120
130
+ }
131
+ }
132
+ }
@@ -51,7 +51,7 @@ class "minimax" {
51
51
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
52
52
  }
53
53
  }
54
- on "minimax" "minimax-cn" "vercel-ai-gateway" {
54
+ on "minimax" "minimax-cn" "minimax-code" "minimax-code-cn" "vercel-ai-gateway" {
55
55
  thinking-mode "anthropic-adaptive"
56
56
  family "m2" {
57
57
  // Replaces the Anthropic-route MiniMax effort remap table.
@@ -71,6 +71,26 @@ class "minimax" {
71
71
  thinking-efforts "low" "medium" "high"
72
72
  }
73
73
  }
74
+ // MiniMax-M3.1-Flash-Preview always thinks (`thinking.type: "disabled"` and
75
+ // effort `none` 400 with error 2013) and tunes depth through
76
+ // `output_config.effort` from `low` to `max` (the default when omitted).
77
+ // The identity map replaces the M3 family's adaptive-tag-only map so each
78
+ // level reaches the wire. Like the M2 family, thinking cannot be turned off:
79
+ // `thinking-requires-effort` hides the off level and clamps forced-off
80
+ // requests to the lowest effort instead of sending `disabled`.
81
+ on "minimax" "minimax-cn" "minimax-code" "minimax-code-cn" {
82
+ models "MiniMax-M3.1-Flash-Preview" {
83
+ thinking-requires-effort #true
84
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
85
+ thinking-effort-map {
86
+ low "low"
87
+ medium "medium"
88
+ high "high"
89
+ }
90
+ }
91
+ }
92
+ // Token Plan rows ride the Anthropic route; these OpenAI-only wire axes
93
+ // serve the legacy lightning rows that stay on the OpenAI-compatible one.
74
94
  on "minimax-code" "minimax-code-cn" {
75
95
  supports-reasoning-effort #false
76
96
  supports-store #false
@@ -87,3 +87,105 @@ class "openai" {
87
87
  }
88
88
  }
89
89
  }
90
+
91
+ // GPT-5.2+ bills images in 32px patches × 1.2, sized per `detail` level:
92
+ // https://developers.openai.com/api/docs/guides/images-vision#calculating-costs
93
+ // Older lines carry no lineage rule and bill at their wire API's fallback
94
+ // (providers/image-tokenization.kdl).
95
+ class "openai" {
96
+ // gpt-5.6 sizing, shared by later lines. `<10` keeps separator-collapsed
97
+ // revisions (`openai-gpt-52-codex` parses as 52) off the 5.6+ sizing.
98
+ revision ">=5.6 <10" {
99
+ image-tokenization {
100
+ regime "openai-patch"
101
+ multiplier 1.2
102
+ auto "original"
103
+ low {
104
+ max-edge 512
105
+ }
106
+ high {
107
+ max-edge 2048
108
+ patch-budget 2500
109
+ }
110
+ original {
111
+ max-edge 65535
112
+ }
113
+ }
114
+ }
115
+ revision "=5.5" {
116
+ image-tokenization {
117
+ regime "openai-patch"
118
+ multiplier 1.2
119
+ auto "original"
120
+ low {
121
+ max-edge 512
122
+ }
123
+ high {
124
+ max-edge 2048
125
+ patch-budget 2500
126
+ }
127
+ original {
128
+ max-edge 6000
129
+ patch-budget 10000
130
+ }
131
+ }
132
+ }
133
+ // gpt-5.4: `auto` sizes like `high`, and `low` keeps a 6,144-patch budget.
134
+ revision "=5.4" {
135
+ image-tokenization {
136
+ regime "openai-patch"
137
+ multiplier 1.2
138
+ auto "high"
139
+ low {
140
+ max-edge 2048
141
+ patch-budget 6144
142
+ }
143
+ high {
144
+ max-edge 2048
145
+ patch-budget 2500
146
+ }
147
+ original {
148
+ max-edge 6000
149
+ patch-budget 10000
150
+ }
151
+ }
152
+ }
153
+ // gpt-5.2 (and the 5.3 Codex SKU) size every level the same way.
154
+ revision ">=5.2 <5.4" {
155
+ image-tokenization {
156
+ regime "openai-patch"
157
+ multiplier 1.2
158
+ auto "high"
159
+ low {
160
+ max-edge 2048
161
+ patch-budget 6144
162
+ }
163
+ high {
164
+ max-edge 2048
165
+ patch-budget 6144
166
+ }
167
+ original {
168
+ max-edge 2048
169
+ patch-budget 6144
170
+ }
171
+ }
172
+ }
173
+ // residue: astra's limits differ from the rest of its revision.
174
+ models "*gpt-6-astra*" {
175
+ image-tokenization {
176
+ regime "openai-patch"
177
+ multiplier 1.2
178
+ auto "original"
179
+ low {
180
+ max-edge 512
181
+ }
182
+ high {
183
+ max-edge 65535
184
+ patch-budget 2500
185
+ }
186
+ original {
187
+ max-edge 65535
188
+ }
189
+ }
190
+ }
191
+ }
@@ -5,4 +5,5 @@
5
5
  provider "apple" {
6
6
  default-model "on-device"
7
7
  allow-unauthenticated #true
8
+ automatic-default #false
8
9
  }
@@ -2,6 +2,9 @@
2
2
 
3
3
  provider "google-antigravity" {
4
4
  default-model "gemini-3.1-pro"
5
+ // `fetchAvailableModels` is the account's served roster; bundled rows it
6
+ // omits (e.g. Claude 5.5 on plans without it) 404 on every request (#14328).
7
+ dynamic-models-authoritative #true
5
8
  kind-apis {
6
9
  image "google-gemini-cli"
7
10
  }
@@ -0,0 +1,42 @@
1
+ // Image billing for readers whose lineage has no `image-tokenization` rule in
2
+ // classes/*.kdl, by the wire API carrying the request. priority=-1: these are
3
+ // fallbacks, so a class-wide lineage rule (same specificity) always wins.
4
+
5
+ // OpenAI-compatible wires bill like GPT-5.5: 32px patches × 1.2, `auto` sized
6
+ // like `original`.
7
+ on-api "openai-completions" "openai-responses" "openai-codex-responses" "azure-openai-responses" priority=-1 {
8
+ image-tokenization {
9
+ regime "openai-patch"
10
+ multiplier 1.2
11
+ auto "original"
12
+ low {
13
+ max-edge 512
14
+ }
15
+ high {
16
+ max-edge 2048
17
+ patch-budget 2500
18
+ }
19
+ original {
20
+ max-edge 6000
21
+ patch-budget 10000
22
+ }
23
+ }
24
+ }
25
+
26
+ // Google wires bill Gemini 3's fixed `media_resolution` budget per image.
27
+ on-api "google-generative-ai" "google-gemini-cli" "google-vertex" priority=-1 {
28
+ image-tokenization {
29
+ regime "fixed"
30
+ tokens 1120
31
+ }
32
+ }
33
+
34
+ // Anthropic wires and every other adapter bill Claude's high-res tier, the
35
+ // largest per-image bill, so an unpriced reader is never undercounted.
36
+ on-api "anthropic-messages" "bedrock-converse-stream" "openrouter" "ollama-chat" "cursor-agent" "factory-droid-agent" "gitlab-duo-agent" "devin-agent" "apple-foundation-models" priority=-1 {
37
+ image-tokenization {
38
+ regime "anthropic-patch"
39
+ max-edge 2576
40
+ max-tokens 4784
41
+ }
42
+ }
@@ -6,11 +6,16 @@ provider "minimax-code-cn" priority=1 {
6
6
 
7
7
  // Replaces the provider-id regex in both OpenAI baselines.
8
8
  reasoning-deltas-may-be-cumulative #true
9
- class "minimax" {
9
+ // residue: the legacy lightning SKUs survive only as previous-snapshot rows
10
+ // on the OpenAI-compatible route (models.dev and both live model lists omit
11
+ // them), so they keep that route's effort-mode thinking instead of the
12
+ // Anthropic adaptive rules the rest of the plan uses.
13
+ models "MiniMax-M2.1-lightning" "MiniMax-M2.5-lightning" {
10
14
  thinking-mode "effort"
11
- }
12
- // residue: taxonomy ranks and exact globs do not isolate these models.
13
- models "MiniMax-M3" {
14
- thinking-efforts "minimal" "low" "medium" "high"
15
+ thinking-effort-map {
16
+ low "low"
17
+ medium "medium"
18
+ high "high"
19
+ }
15
20
  }
16
21
  }
@@ -6,11 +6,16 @@ provider "minimax-code" priority=1 {
6
6
 
7
7
  // Replaces the provider-id regex in both OpenAI baselines.
8
8
  reasoning-deltas-may-be-cumulative #true
9
- class "minimax" {
9
+ // residue: the legacy lightning SKUs survive only as previous-snapshot rows
10
+ // on the OpenAI-compatible route (models.dev and both live model lists omit
11
+ // them), so they keep that route's effort-mode thinking instead of the
12
+ // Anthropic adaptive rules the rest of the plan uses.
13
+ models "MiniMax-M2.1-lightning" "MiniMax-M2.5-lightning" {
10
14
  thinking-mode "effort"
11
- }
12
- // residue: taxonomy ranks and exact globs do not isolate these models.
13
- models "MiniMax-M3" {
14
- thinking-efforts "minimal" "low" "medium" "high"
15
+ thinking-effort-map {
16
+ low "low"
17
+ medium "medium"
18
+ high "high"
19
+ }
15
20
  }
16
21
  }
@@ -4,6 +4,26 @@ provider "mistral" {
4
4
  default-model "devstral-medium-latest"
5
5
  env "MISTRAL_API_KEY"
6
6
 
7
+ // Public-preview aliases and current USD / 1M token pricing:
8
+ // https://docs.mistral.ai/models/mistral-large-4-0 (2026-10-06).
9
+ // Public preview is 50% off: input $0.68, output $2.09, cached input $0.07.
10
+ // List prices: input $1.36, output $4.18, cached input $0.14; update when preview ends.
11
+ // No separate maximum output-token limit is published.
12
+ seed api="openai-completions" base-url="https://api.mistral.ai/v1" bundle="always" {
13
+ model "mistral-large-4" name="Mistral Large 4" {
14
+ reasoning #true
15
+ input "text" "image"
16
+ cost input=0.68 output=2.09 cache-read=0.07 cache-write=0
17
+ limits context=1000000
18
+ }
19
+ model "mistral-large-4-0" name="Mistral Large 4" {
20
+ reasoning #true
21
+ input "text" "image"
22
+ cost input=0.68 output=2.09 cache-read=0.07 cache-write=0
23
+ limits context=1000000
24
+ }
25
+ }
26
+
7
27
  thinking-mode "effort"
8
28
  class "unknown" {
9
29
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
@@ -15,6 +15,13 @@ provider "muse-code" {
15
15
  // api.meta.ai/v1 accepts only tool_choice "auto"; "none", "required" and named
16
16
  // choices are rejected with 400 (verified 2026-09-10), so omit the field.
17
17
  supports-tool-choice #false
18
+ // Results can be stored so a dropped stream is recovered: verified 2026-09-29
19
+ // against api.meta.ai/v1, a stored run keeps generating after the client
20
+ // socket dies and `GET /responses/{id}` returns it once finished (~60s for
21
+ // a high-effort turn), while `store: false` runs 404 forever. Storage is
22
+ // opt-in (privacy: stored runs retain prompts/outputs on Meta's side): omp
23
+ // setting providers.muse-code.storeResponses or PI_MUSE_STORE_RESPONSES=1.
24
+ store-responses #true
18
25
  // Subscription tier bills per request; the compact edit prompt cuts the
19
26
  // recurring tool-schema bytes. Verified 2026-09-05 against api.meta.ai/v1:
20
27
  // `custom` tools are rejected with 400 "`custom` tools are not supported
@@ -3,6 +3,7 @@
3
3
  provider "openai-codex" {
4
4
  default-model "gpt-5.5"
5
5
  env "OPENAI_CODEX_OAUTH_TOKEN"
6
+ dynamic-models-authoritative #true
6
7
  kind-apis {
7
8
  image "openai-codex-responses"
8
9
  }
@@ -75,6 +76,12 @@ provider "openai-codex" {
75
76
  service-tier-cost {
76
77
  flex 0.5
77
78
  priority 2.5
79
+ // Ultrafast is Astra-only. This table uses OpenAI's included-usage
80
+ // multipliers for Codex: Ultrafast 8x and Fast 2.5x Standard (purchased
81
+ // credits / Enterprise pay-as-you-go bill 6x and 2x instead). See
82
+ // https://learn.chatgpt.com/docs/agent-configuration/speed and
83
+ // https://learn.chatgpt.com/docs/pricing.
84
+ ultrafast 8
78
85
  }
79
86
  limits-patch {
80
87
  context-window 272000
@@ -176,6 +176,11 @@ provider "openai" {
176
176
  cache-read 2.0
177
177
  cache-write 25.0
178
178
  }
179
+ // Ultrafast is Astra-only: $60/$6/$75/$300 per 1M short-context
180
+ // (6x the standard card), and the same 6x holds on the long-context tier.
181
+ service-tier-cost {
182
+ ultrafast 6
183
+ }
179
184
  }
180
185
  // residue: the bare Daybreak rolling aliases pin the documented 5.6-gen
181
186
  // wire restrictions without carrying the gpt- prefix identity.
@@ -0,0 +1,135 @@
1
+ // Documented account-billed Cortex REST API, not verified CoCo-subscription usage.
2
+ // Model IDs and compatibility: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-rest-api
3
+ // Output is capped at the Cortex REST API's documented 16,384-token maximum (rate-limit table;
4
+ // newer models absent from that table are assumed to share it). Context windows are conservative
5
+ // AI_COMPLETE configured ceilings, not verified REST maxima:
6
+ // https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-rest-api#label-cortex-rest-api-rate-limits
7
+ // https://docs.snowflake.com/en/user-guide/snowflake-cortex/aisql-regional-availability
8
+ // USD per million tokens estimates: Consumption Table 6(b) AI Credits x $2.00
9
+ // (on-demand global routing); regional routing and contract discounts change billing.
10
+ // https://www.snowflake.com/legal-files/CreditConsumptionTable.pdf
11
+ // https://docs.snowflake.com/en/user-guide/snowflake-cortex/pricing
12
+ provider "snowflake" {
13
+ default-model "claude-opus-5-5"
14
+ env "SNOWFLAKE_PAT"
15
+
16
+ // Credential-scoped roster: never fetch during catalog generation. The `.invalid`
17
+ // origin is a placeholder that snowflakeTransport replaces with the account URL.
18
+ seed api="anthropic-messages" base-url="https://snowflake-account.invalid/api/v2/cortex" bundle="always" precedence="seed" {
19
+ model "claude-opus-5-5" name="Claude Opus 5.5" {
20
+ reasoning #true
21
+ input "text" "image"
22
+ cost input=4 output=20 cache-write=5 cache-read=0.2
23
+ limits context=1000000 max-tokens=16384
24
+ }
25
+ model "claude-opus-5" name="Claude Opus 5" {
26
+ reasoning #true
27
+ input "text" "image"
28
+ cost input=5 output=25 cache-write=6.25 cache-read=0.5
29
+ limits context=1000000 max-tokens=16384
30
+ }
31
+ model "claude-opus-4-8" name="Claude Opus 4.8" {
32
+ reasoning #true
33
+ input "text" "image"
34
+ cost input=5 output=25 cache-write=6.25 cache-read=0.5
35
+ limits context=1000000 max-tokens=16384
36
+ }
37
+ model "claude-opus-4-7" name="Claude Opus 4.7" {
38
+ reasoning #true
39
+ input "text" "image"
40
+ cost input=5 output=25 cache-write=6.25 cache-read=0.5
41
+ limits context=1000000 max-tokens=16384
42
+ }
43
+ model "claude-opus-4-6" name="Claude Opus 4.6" {
44
+ reasoning #true
45
+ input "text" "image"
46
+ cost input=5 output=25 cache-write=6.25 cache-read=0.5
47
+ limits context=1000000 max-tokens=16384
48
+ }
49
+ model "claude-opus-4-5" name="Claude Opus 4.5" {
50
+ reasoning #true
51
+ input "text" "image"
52
+ cost input=5 output=25 cache-write=6.25 cache-read=0.5
53
+ limits context=200000 max-tokens=16384
54
+ }
55
+ model "claude-sonnet-5" name="Claude Sonnet 5" {
56
+ reasoning #true
57
+ input "text" "image"
58
+ cost input=2 output=10 cache-write=2.5 cache-read=0.2
59
+ limits context=1000000 max-tokens=16384
60
+ }
61
+ model "claude-sonnet-4-6" name="Claude Sonnet 4.6" {
62
+ reasoning #true
63
+ input "text" "image"
64
+ cost input=3 output=15 cache-write=3.75 cache-read=0.3
65
+ limits context=1000000 max-tokens=16384
66
+ }
67
+ model "claude-sonnet-4-5" name="Claude Sonnet 4.5" {
68
+ reasoning #true
69
+ input "text" "image"
70
+ cost input=3 output=15 cache-write=3.75 cache-read=0.3
71
+ limits context=200000 max-tokens=16384
72
+ }
73
+ model "claude-haiku-4-5" name="Claude Haiku 4.5" {
74
+ reasoning #true
75
+ input "text" "image"
76
+ cost input=1 output=5 cache-write=1.25 cache-read=0.1
77
+ limits context=200000 max-tokens=16384
78
+ }
79
+ model "openai-gpt-5.1" name="GPT-5.1" api="openai-completions" base-url="https://snowflake-account.invalid/api/v2/cortex/v1" {
80
+ reasoning #true
81
+ input "text" "image"
82
+ cost input=1.25 output=10 cache-write=0 cache-read=0.13
83
+ limits context=272000 max-tokens=16384
84
+ }
85
+ model "openai-gpt-5" name="GPT-5" api="openai-completions" base-url="https://snowflake-account.invalid/api/v2/cortex/v1" {
86
+ reasoning #true
87
+ input "text" "image"
88
+ cost input=1.25 output=10 cache-write=0 cache-read=0.13
89
+ limits context=272000 max-tokens=16384
90
+ }
91
+ model "openai-gpt-5-mini" name="GPT-5 Mini" api="openai-completions" base-url="https://snowflake-account.invalid/api/v2/cortex/v1" {
92
+ reasoning #true
93
+ input "text" "image"
94
+ cost input=0.25 output=2 cache-write=0 cache-read=0.03
95
+ limits context=272000 max-tokens=16384
96
+ }
97
+ model "openai-gpt-5-nano" name="GPT-5 Nano" api="openai-completions" base-url="https://snowflake-account.invalid/api/v2/cortex/v1" {
98
+ reasoning #true
99
+ input "text" "image"
100
+ cost input=0.06 output=0.44 cache-write=0 cache-read=0.01
101
+ limits context=272000 max-tokens=16384
102
+ }
103
+ model "openai-gpt-4.1" name="GPT-4.1" api="openai-completions" base-url="https://snowflake-account.invalid/api/v2/cortex/v1" {
104
+ reasoning #false
105
+ input "text" "image"
106
+ cost input=2 output=8 cache-write=0 cache-read=0.5
107
+ limits context=128000 max-tokens=16384
108
+ }
109
+ }
110
+
111
+ // Claude thinking modes and effort ladders come from the Anthropic lineage rules
112
+ // (classes/anthropic.kdl). Live Cortex probes matched them: Opus 4.7+/Sonnet 5
113
+ // accept xhigh and max; Opus 4.6 and Sonnet 4.6 reject xhigh.
114
+ // Cortex compatibility chart: ephemeral 5-minute caching and Bedrock-compatible betas only.
115
+ class "anthropic" {
116
+ supports-eager-tool-input-streaming #false
117
+ supports-long-cache-retention #false
118
+ }
119
+ // Cortex documents reasoning_effort none/minimal/low/medium/high. Prefixed ids
120
+ // (openai-gpt-*) carry no `gpt` family, so the <5.2 lineage ladder is restated
121
+ // here; 5.2+ rows fall through to the unscoped lineage ladders in classes/openai.kdl.
122
+ class "openai" {
123
+ revision ">=5 <5.2" {
124
+ thinking-mode "effort"
125
+ thinking-efforts "minimal" "low" "medium" "high"
126
+ }
127
+ }
128
+ // Cortex compatibility chart: max_tokens/store are hard errors; non-OpenAI backends accept user/assistant/system roles only.
129
+ on-api "openai-completions" {
130
+ max-tokens-field "max_completion_tokens"
131
+ supports-store #false
132
+ supports-developer-role #false
133
+ supports-reasoning-effort #true
134
+ }
135
+ }
@@ -351,6 +351,8 @@ behavior {
351
351
  alias "claude-opus-4-6" peer-id="claude-opus-4-6@default"
352
352
  alias "claude-sonnet-4-5" peer-id="claude-sonnet-4-5@20250929"
353
353
  alias "claude-sonnet-4-6" peer-id="claude-sonnet-4-6@default"
354
+ alias "claude-opus-5-5" peer-id="claude-opus-5-5@default"
355
+ alias "claude-sonnet-5-5" peer-id="claude-sonnet-5-5@default"
354
356
  }
355
357
  // SuperGrok surfaces a few models under IDs that differ from their public
356
358
  // xai equivalent, so the exact-id price mirror misses them.
@@ -88,6 +88,24 @@ collapse {
88
88
  mode "budget"
89
89
  efforts "minimal" "low" "medium" "high"
90
90
  }
91
+ variant-family "google-antigravity" "claude-opus-5-5" name="Claude Opus 5.5" {
92
+ members "claude-opus-5-5-low" "claude-opus-5-5-medium" "claude-opus-5-5-high"
93
+ route "low" "claude-opus-5-5-low"
94
+ route "medium" "claude-opus-5-5-medium"
95
+ route "high" "claude-opus-5-5-high"
96
+ mode "budget"
97
+ efforts "low" "medium" "high"
98
+ requires-effort #true
99
+ }
100
+ variant-family "google-antigravity" "claude-sonnet-5-5" name="Claude Sonnet 5.5" {
101
+ members "claude-sonnet-5-5-low" "claude-sonnet-5-5-medium" "claude-sonnet-5-5-high"
102
+ route "low" "claude-sonnet-5-5-low"
103
+ route "medium" "claude-sonnet-5-5-medium"
104
+ route "high" "claude-sonnet-5-5-high"
105
+ mode "budget"
106
+ efforts "low" "medium" "high"
107
+ requires-effort #true
108
+ }
91
109
  variant-family "google-antigravity" "claude-sonnet-4-6" name="Claude Sonnet 4.6" {
92
110
  members "claude-sonnet-4-6" "claude-sonnet-4-6-thinking"
93
111
  mode "budget"