@oh-my-pi/pi-catalog 18.6.0 → 18.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/types/compat/auth-ids.d.ts +2 -2
- package/dist/types/compat/image-tokenization.d.ts +52 -0
- package/dist/types/compat/provider-ids.d.ts +1 -1
- package/dist/types/hosts.d.ts +4 -0
- package/dist/types/types.d.ts +14 -2
- package/package.json +4 -4
- package/src/compat/auth-ids.ts +2 -0
- package/src/compat/axes.ts +4 -0
- package/src/compat/image-tokenization.ts +166 -0
- package/src/compat/provider-ids.ts +1 -0
- package/src/compat/resolve.ts +11 -1
- package/src/compat/rules/auth/_order.kdl +1 -1
- package/src/compat/rules/auth/snowflake.kdl +11 -0
- package/src/compat/rules/classes/anthropic.kdl +72 -7
- package/src/compat/rules/classes/gemini.kdl +12 -0
- package/src/compat/rules/classes/openai.kdl +102 -0
- package/src/compat/rules/providers/google-antigravity.kdl +3 -0
- package/src/compat/rules/providers/image-tokenization.kdl +42 -0
- package/src/compat/rules/providers/muse-code.kdl +7 -0
- package/src/compat/rules/providers/openai-codex.kdl +1 -0
- package/src/compat/rules/providers/snowflake.kdl +135 -0
- package/src/compat/rules.json +1 -1
- package/src/hosts.ts +2 -0
- package/src/models.json +1 -1
- package/src/provider-models/google.ts +2 -0
- package/src/provider-models/special.ts +2 -2
- package/src/types.ts +14 -1
|
@@ -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
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -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
|
|
@@ -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
|
+
}
|