@oh-my-pi/pi-catalog 16.3.6 → 16.3.8

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 (54) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/types/build.d.ts +1 -1
  3. package/dist/types/compat/anthropic.d.ts +1 -1
  4. package/dist/types/compat/devin.d.ts +1 -1
  5. package/dist/types/compat/openai.d.ts +8 -8
  6. package/dist/types/discovery/antigravity.d.ts +2 -2
  7. package/dist/types/discovery/codex.d.ts +1 -1
  8. package/dist/types/discovery/cursor.d.ts +1 -1
  9. package/dist/types/discovery/devin-gen/exa/analytics_pb/analytics_pb.d.ts +4 -4
  10. package/dist/types/discovery/devin-gen/exa/api_server_pb/api_server_pb.d.ts +8 -8
  11. package/dist/types/discovery/devin-gen/exa/auth_pb/auth_pb.d.ts +1 -1
  12. package/dist/types/discovery/devin-gen/exa/auto_cascade_common_pb/auto_cascade_common_pb.d.ts +1 -1
  13. package/dist/types/discovery/devin-gen/exa/cascade_plugins_pb/cascade_plugins_pb.d.ts +1 -1
  14. package/dist/types/discovery/devin-gen/exa/chat_pb/chat_pb.d.ts +2 -2
  15. package/dist/types/discovery/devin-gen/exa/code_edit/code_edit_pb/code_edit_pb.d.ts +3 -3
  16. package/dist/types/discovery/devin-gen/exa/context_module_pb/context_module_pb.d.ts +2 -2
  17. package/dist/types/discovery/devin-gen/exa/cortex_pb/cortex_pb.d.ts +6 -6
  18. package/dist/types/discovery/devin-gen/exa/diff_action_pb/diff_action_pb.d.ts +1 -1
  19. package/dist/types/discovery/devin-gen/exa/index_pb/index_pb.d.ts +1 -1
  20. package/dist/types/discovery/devin-gen/exa/knowledge_base_pb/knowledge_base_pb.d.ts +3 -3
  21. package/dist/types/discovery/devin-gen/exa/language_server_pb/language_server_pb.d.ts +11 -11
  22. package/dist/types/discovery/devin-gen/exa/opensearch_clients_pb/opensearch_clients_pb.d.ts +3 -3
  23. package/dist/types/discovery/devin-gen/exa/prompt_pb/prompt_pb.d.ts +5 -5
  24. package/dist/types/discovery/devin.d.ts +1 -1
  25. package/dist/types/discovery/gemini.d.ts +1 -1
  26. package/dist/types/discovery/gitlab-duo-workflow.d.ts +1 -1
  27. package/dist/types/discovery/index.d.ts +5 -5
  28. package/dist/types/discovery/openai-compatible.d.ts +1 -1
  29. package/dist/types/identity/bundled.d.ts +1 -1
  30. package/dist/types/identity/family.d.ts +9 -2
  31. package/dist/types/identity/index.d.ts +8 -8
  32. package/dist/types/identity/reference.d.ts +1 -1
  33. package/dist/types/index.d.ts +17 -17
  34. package/dist/types/model-cache.d.ts +1 -1
  35. package/dist/types/model-manager.d.ts +1 -1
  36. package/dist/types/model-thinking.d.ts +2 -2
  37. package/dist/types/models.d.ts +1 -1
  38. package/dist/types/provider-models/bundled-references.d.ts +2 -2
  39. package/dist/types/provider-models/descriptor-types.d.ts +2 -2
  40. package/dist/types/provider-models/descriptors.d.ts +52 -52
  41. package/dist/types/provider-models/google.d.ts +2 -2
  42. package/dist/types/provider-models/index.d.ts +6 -6
  43. package/dist/types/provider-models/ollama.d.ts +2 -2
  44. package/dist/types/provider-models/openai-compat.d.ts +5 -3
  45. package/dist/types/provider-models/special.d.ts +3 -3
  46. package/dist/types/types.d.ts +16 -7
  47. package/dist/types/variant-collapse.d.ts +2 -2
  48. package/package.json +3 -3
  49. package/src/compat/openai.ts +8 -9
  50. package/src/identity/family.ts +15 -4
  51. package/src/models.json +370 -108
  52. package/src/models.ts +4 -3
  53. package/src/provider-models/openai-compat.ts +39 -6
  54. package/src/types.ts +14 -5
@@ -5,12 +5,12 @@
5
5
  * half (env keys, OAuth login/refresh) stays in the pi-ai registry, which
6
6
  * type-checks itself against `KnownProvider` from this table.
7
7
  */
8
- import type { ModelManagerConfig, ProviderCatalogEntry, ProviderDescriptor } from "./descriptor-types";
8
+ import type { ModelManagerConfig, ProviderCatalogEntry, ProviderDescriptor } from "./descriptor-types.js";
9
9
  export declare const CATALOG_PROVIDERS: readonly [{
10
10
  readonly id: "aimlapi";
11
11
  readonly defaultModel: "gpt-5.5-2026-04-23";
12
12
  readonly envVars: readonly ["AIMLAPI_API_KEY"];
13
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
13
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
14
14
  readonly dynamicModelsAuthoritative: true;
15
15
  readonly catalogDiscovery: {
16
16
  readonly label: "AIML API";
@@ -19,7 +19,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
19
19
  readonly id: "alibaba-coding-plan";
20
20
  readonly defaultModel: "qwen3.7-plus";
21
21
  readonly envVars: readonly ["ALIBABA_CODING_PLAN_API_KEY"];
22
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
22
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
23
23
  readonly catalogDiscovery: {
24
24
  readonly label: "Alibaba Coding Plan";
25
25
  };
@@ -27,7 +27,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
27
27
  readonly id: "baseten";
28
28
  readonly defaultModel: "moonshotai/Kimi-K2.7-Code";
29
29
  readonly envVars: readonly ["BASETEN_API_KEY"];
30
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
30
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
31
31
  readonly dynamicModelsAuthoritative: true;
32
32
  readonly catalogDiscovery: {
33
33
  readonly label: "Baseten";
@@ -39,7 +39,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
39
39
  readonly id: "anthropic";
40
40
  readonly defaultModel: "claude-opus-4-8";
41
41
  readonly envVars: readonly ["ANTHROPIC_API_KEY"];
42
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"anthropic-messages", unknown>;
42
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"anthropic-messages", unknown>;
43
43
  readonly catalogDiscovery: {
44
44
  readonly label: "Anthropic";
45
45
  };
@@ -51,7 +51,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
51
51
  readonly id: "cerebras";
52
52
  readonly defaultModel: "zai-glm-4.7";
53
53
  readonly envVars: readonly ["CEREBRAS_API_KEY"];
54
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
54
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
55
55
  readonly catalogDiscovery: {
56
56
  readonly label: "Cerebras";
57
57
  };
@@ -59,7 +59,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
59
59
  readonly id: "cloudflare-ai-gateway";
60
60
  readonly defaultModel: "anthropic/claude-opus-4-8";
61
61
  readonly envVars: readonly ["CLOUDFLARE_AI_GATEWAY_API_KEY"];
62
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"anthropic-messages", unknown>;
62
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"anthropic-messages", unknown>;
63
63
  readonly catalogDiscovery: {
64
64
  readonly label: "Cloudflare AI Gateway";
65
65
  };
@@ -67,7 +67,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
67
67
  readonly id: "cursor";
68
68
  readonly defaultModel: "claude-4.6-opus-high";
69
69
  readonly envVars: readonly ["CURSOR_ACCESS_TOKEN"];
70
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"cursor-agent", unknown>;
70
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"cursor-agent", unknown>;
71
71
  readonly catalogDiscovery: {
72
72
  readonly label: "Cursor";
73
73
  readonly envVars: readonly ["CURSOR_API_KEY"];
@@ -77,7 +77,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
77
77
  readonly id: "deepseek";
78
78
  readonly defaultModel: "deepseek-v4-pro";
79
79
  readonly envVars: readonly ["DEEPSEEK_API_KEY"];
80
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
80
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
81
81
  readonly catalogDiscovery: {
82
82
  readonly label: "DeepSeek";
83
83
  };
@@ -85,7 +85,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
85
85
  readonly id: "devin";
86
86
  readonly defaultModel: "swe-1-6";
87
87
  readonly envVars: readonly ["DEVIN_API_KEY"];
88
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"devin-agent", unknown>;
88
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"devin-agent", unknown>;
89
89
  readonly dynamicModelsAuthoritative: true;
90
90
  readonly catalogDiscovery: {
91
91
  readonly label: "Devin";
@@ -96,12 +96,12 @@ export declare const CATALOG_PROVIDERS: readonly [{
96
96
  readonly id: "firepass";
97
97
  readonly defaultModel: "kimi-k2.6-turbo";
98
98
  readonly envVars: readonly ["FIREPASS_API_KEY"];
99
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
99
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
100
100
  }, {
101
101
  readonly id: "fireworks";
102
102
  readonly defaultModel: "kimi-k2.7-code";
103
103
  readonly envVars: readonly ["FIREWORKS_API_KEY"];
104
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
104
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
105
105
  readonly catalogDiscovery: {
106
106
  readonly label: "Fireworks";
107
107
  };
@@ -109,7 +109,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
109
109
  readonly id: "github-copilot";
110
110
  readonly defaultModel: "gpt-5.5";
111
111
  readonly envVars: readonly ["COPILOT_GITHUB_TOKEN"];
112
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<import("..").Api, unknown>;
112
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<import("../index.js").Api, unknown>;
113
113
  }, {
114
114
  readonly id: "gitlab-duo";
115
115
  readonly defaultModel: "duo-chat-opus-4-6";
@@ -118,13 +118,13 @@ export declare const CATALOG_PROVIDERS: readonly [{
118
118
  readonly id: "gitlab-duo-agent";
119
119
  readonly defaultModel: "claude_sonnet_4_6_vertex";
120
120
  readonly envVars: readonly ["GITLAB_TOKEN"];
121
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"gitlab-duo-agent", unknown>;
121
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"gitlab-duo-agent", unknown>;
122
122
  readonly dynamicModelsAuthoritative: true;
123
123
  }, {
124
124
  readonly id: "google";
125
125
  readonly defaultModel: "gemini-3.1-pro-preview";
126
126
  readonly envVars: readonly ["GEMINI_API_KEY"];
127
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"google-generative-ai", unknown>;
127
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"google-generative-ai", unknown>;
128
128
  }, {
129
129
  readonly id: "google-antigravity";
130
130
  readonly defaultModel: "gemini-3.1-pro";
@@ -136,18 +136,18 @@ export declare const CATALOG_PROVIDERS: readonly [{
136
136
  }, {
137
137
  readonly id: "google-vertex";
138
138
  readonly defaultModel: "gemini-3.1-pro-preview";
139
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<import("..").Api, unknown>;
139
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<import("../index.js").Api, unknown>;
140
140
  readonly allowUnauthenticated: true;
141
141
  }, {
142
142
  readonly id: "groq";
143
143
  readonly defaultModel: "openai/gpt-oss-120b";
144
144
  readonly envVars: readonly ["GROQ_API_KEY"];
145
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
145
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
146
146
  }, {
147
147
  readonly id: "huggingface";
148
148
  readonly defaultModel: "deepseek-ai/DeepSeek-R1";
149
149
  readonly envVars: readonly ["HUGGINGFACE_HUB_TOKEN", "HF_TOKEN"];
150
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
150
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
151
151
  readonly catalogDiscovery: {
152
152
  readonly label: "Hugging Face";
153
153
  };
@@ -155,7 +155,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
155
155
  readonly id: "kilo";
156
156
  readonly defaultModel: "anthropic/claude-opus-4.8";
157
157
  readonly envVars: readonly ["KILO_API_KEY"];
158
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
158
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
159
159
  readonly catalogDiscovery: {
160
160
  readonly label: "Kilo Gateway";
161
161
  readonly allowUnauthenticated: true;
@@ -163,7 +163,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
163
163
  }, {
164
164
  readonly id: "kimi-code";
165
165
  readonly defaultModel: "kimi-for-coding";
166
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
166
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
167
167
  readonly catalogDiscovery: {
168
168
  readonly label: "Kimi Code";
169
169
  readonly envVars: readonly ["KIMI_API_KEY"];
@@ -172,7 +172,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
172
172
  readonly id: "litellm";
173
173
  readonly defaultModel: "claude-opus-4-8";
174
174
  readonly envVars: readonly ["LITELLM_API_KEY"];
175
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
175
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
176
176
  readonly catalogDiscovery: {
177
177
  readonly label: "LiteLLM";
178
178
  readonly allowUnauthenticated: true;
@@ -181,7 +181,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
181
181
  readonly id: "lm-studio";
182
182
  readonly defaultModel: "llama-3-8b";
183
183
  readonly envVars: readonly ["LM_STUDIO_API_KEY"];
184
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
184
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
185
185
  readonly allowUnauthenticated: true;
186
186
  }, {
187
187
  readonly id: "minimax";
@@ -199,12 +199,12 @@ export declare const CATALOG_PROVIDERS: readonly [{
199
199
  readonly id: "mistral";
200
200
  readonly defaultModel: "devstral-medium-latest";
201
201
  readonly envVars: readonly ["MISTRAL_API_KEY"];
202
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
202
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
203
203
  }, {
204
204
  readonly id: "moonshot";
205
205
  readonly defaultModel: "kimi-k2.7-code";
206
206
  readonly envVars: readonly ["MOONSHOT_API_KEY", "KIMI_API_KEY"];
207
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
207
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
208
208
  readonly catalogDiscovery: {
209
209
  readonly label: "Moonshot";
210
210
  };
@@ -212,7 +212,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
212
212
  readonly id: "nanogpt";
213
213
  readonly defaultModel: "openai/gpt-5.5";
214
214
  readonly envVars: readonly ["NANO_GPT_API_KEY"];
215
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
215
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
216
216
  readonly catalogDiscovery: {
217
217
  readonly label: "NanoGPT";
218
218
  };
@@ -220,7 +220,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
220
220
  readonly id: "nvidia";
221
221
  readonly defaultModel: "nvidia/llama-3.1-nemotron-70b-instruct";
222
222
  readonly envVars: readonly ["NVIDIA_API_KEY"];
223
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
223
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
224
224
  readonly catalogDiscovery: {
225
225
  readonly label: "NVIDIA";
226
226
  };
@@ -228,13 +228,13 @@ export declare const CATALOG_PROVIDERS: readonly [{
228
228
  readonly id: "ollama";
229
229
  readonly defaultModel: "gpt-oss:20b";
230
230
  readonly envVars: readonly ["OLLAMA_API_KEY"];
231
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-responses", unknown>;
231
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-responses", unknown>;
232
232
  readonly allowUnauthenticated: true;
233
233
  }, {
234
234
  readonly id: "ollama-cloud";
235
235
  readonly defaultModel: "gpt-oss:120b";
236
236
  readonly envVars: readonly ["OLLAMA_CLOUD_API_KEY"];
237
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"ollama-chat", unknown>;
237
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"ollama-chat", unknown>;
238
238
  readonly catalogDiscovery: {
239
239
  readonly label: "Ollama Cloud";
240
240
  readonly oauthProvider: "ollama-cloud";
@@ -243,7 +243,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
243
243
  readonly id: "openai";
244
244
  readonly defaultModel: "gpt-5.5";
245
245
  readonly envVars: readonly ["OPENAI_API_KEY"];
246
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-responses", unknown>;
246
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-responses", unknown>;
247
247
  }, {
248
248
  readonly id: "openai-codex";
249
249
  readonly defaultModel: "gpt-5.5";
@@ -253,17 +253,17 @@ export declare const CATALOG_PROVIDERS: readonly [{
253
253
  readonly id: "opencode-go";
254
254
  readonly defaultModel: "kimi-k2.7-code";
255
255
  readonly envVars: readonly ["OPENCODE_API_KEY"];
256
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<import("..").Api, unknown>;
256
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<import("../index.js").Api, unknown>;
257
257
  }, {
258
258
  readonly id: "opencode-zen";
259
259
  readonly defaultModel: "claude-opus-4-8";
260
260
  readonly envVars: readonly ["OPENCODE_API_KEY"];
261
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<import("..").Api, unknown>;
261
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<import("../index.js").Api, unknown>;
262
262
  }, {
263
263
  readonly id: "openrouter";
264
264
  readonly defaultModel: "openai/gpt-5.5";
265
265
  readonly envVars: readonly ["OPENROUTER_API_KEY"];
266
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openrouter", unknown>;
266
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openrouter", unknown>;
267
267
  readonly catalogDiscovery: {
268
268
  readonly label: "OpenRouter";
269
269
  readonly allowUnauthenticated: true;
@@ -272,7 +272,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
272
272
  readonly id: "qianfan";
273
273
  readonly defaultModel: "deepseek-v3.2";
274
274
  readonly envVars: readonly ["QIANFAN_API_KEY"];
275
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
275
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
276
276
  readonly catalogDiscovery: {
277
277
  readonly label: "Qianfan";
278
278
  };
@@ -280,7 +280,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
280
280
  readonly id: "qwen-portal";
281
281
  readonly defaultModel: "coder-model";
282
282
  readonly envVars: readonly ["QWEN_OAUTH_TOKEN", "QWEN_PORTAL_API_KEY"];
283
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
283
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
284
284
  readonly catalogDiscovery: {
285
285
  readonly label: "Qwen Portal";
286
286
  readonly oauthProvider: "qwen-portal";
@@ -289,7 +289,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
289
289
  readonly id: "sakana";
290
290
  readonly defaultModel: "fugu";
291
291
  readonly envVars: readonly ["SAKANA_API_KEY", "FUGU_API_KEY"];
292
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-responses", unknown>;
292
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-responses", unknown>;
293
293
  readonly dynamicModelsAuthoritative: true;
294
294
  readonly catalogDiscovery: {
295
295
  readonly label: "Sakana AI";
@@ -298,7 +298,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
298
298
  readonly id: "synthetic";
299
299
  readonly defaultModel: "hf:zai-org/GLM-5.1";
300
300
  readonly envVars: readonly ["SYNTHETIC_API_KEY"];
301
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
301
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
302
302
  readonly dynamicModelsAuthoritative: true;
303
303
  readonly catalogDiscovery: {
304
304
  readonly label: "Synthetic";
@@ -307,7 +307,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
307
307
  readonly id: "together";
308
308
  readonly defaultModel: "moonshotai/Kimi-K2.7-Code";
309
309
  readonly envVars: readonly ["TOGETHER_API_KEY"];
310
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
310
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
311
311
  readonly catalogDiscovery: {
312
312
  readonly label: "Together";
313
313
  };
@@ -315,7 +315,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
315
315
  readonly id: "umans";
316
316
  readonly defaultModel: "umans-coder";
317
317
  readonly envVars: readonly ["UMANS_AI_CODING_PLAN_API_KEY"];
318
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"anthropic-messages", unknown>;
318
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"anthropic-messages", unknown>;
319
319
  readonly dynamicModelsAuthoritative: true;
320
320
  readonly catalogDiscovery: {
321
321
  readonly label: "Umans AI Coding Plan";
@@ -325,7 +325,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
325
325
  readonly id: "venice";
326
326
  readonly defaultModel: "llama-3.3-70b";
327
327
  readonly envVars: readonly ["VENICE_API_KEY"];
328
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
328
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
329
329
  readonly catalogDiscovery: {
330
330
  readonly label: "Venice";
331
331
  readonly allowUnauthenticated: true;
@@ -334,7 +334,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
334
334
  readonly id: "vercel-ai-gateway";
335
335
  readonly defaultModel: "anthropic/claude-opus-4.8";
336
336
  readonly envVars: readonly ["AI_GATEWAY_API_KEY"];
337
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"anthropic-messages", unknown>;
337
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"anthropic-messages", unknown>;
338
338
  readonly catalogDiscovery: {
339
339
  readonly label: "Vercel AI Gateway";
340
340
  readonly envVars: readonly ["VERCEL_AI_GATEWAY_API_KEY"];
@@ -344,7 +344,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
344
344
  readonly id: "vllm";
345
345
  readonly defaultModel: "gpt-oss-20b";
346
346
  readonly envVars: readonly ["VLLM_API_KEY"];
347
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
347
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
348
348
  readonly catalogDiscovery: {
349
349
  readonly label: "vLLM";
350
350
  readonly allowUnauthenticated: true;
@@ -353,7 +353,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
353
353
  readonly id: "wafer-serverless";
354
354
  readonly defaultModel: "GLM-5.1";
355
355
  readonly envVars: readonly ["WAFER_SERVERLESS_API_KEY"];
356
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
356
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
357
357
  readonly catalogDiscovery: {
358
358
  readonly label: "Wafer Serverless";
359
359
  readonly oauthProvider: "wafer-serverless";
@@ -362,7 +362,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
362
362
  readonly id: "coreweave";
363
363
  readonly defaultModel: "openai/gpt-oss-120b";
364
364
  readonly envVars: readonly ["COREWEAVE_API_KEY", "WANDB_API_KEY"];
365
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
365
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
366
366
  readonly catalogDiscovery: {
367
367
  readonly label: "CoreWeave Serverless Inference";
368
368
  };
@@ -370,12 +370,12 @@ export declare const CATALOG_PROVIDERS: readonly [{
370
370
  readonly id: "xai";
371
371
  readonly defaultModel: "grok-4-fast-non-reasoning";
372
372
  readonly envVars: readonly ["XAI_API_KEY"];
373
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
373
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
374
374
  }, {
375
375
  readonly id: "xai-oauth";
376
376
  readonly defaultModel: "grok-4.3";
377
377
  readonly envVars: readonly ["XAI_OAUTH_TOKEN", "XAI_API_KEY"];
378
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-responses", unknown>;
378
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-responses", unknown>;
379
379
  readonly catalogDiscovery: {
380
380
  readonly label: "xAI Grok OAuth (SuperGrok)";
381
381
  readonly oauthProvider: "xai-oauth";
@@ -384,7 +384,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
384
384
  readonly id: "xiaomi";
385
385
  readonly defaultModel: "mimo-v2.5";
386
386
  readonly envVars: readonly ["XIAOMI_API_KEY"];
387
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
387
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
388
388
  readonly catalogDiscovery: {
389
389
  readonly label: "Xiaomi";
390
390
  };
@@ -392,22 +392,22 @@ export declare const CATALOG_PROVIDERS: readonly [{
392
392
  readonly id: "xiaomi-token-plan-ams";
393
393
  readonly defaultModel: "mimo-v2.5";
394
394
  readonly envVars: readonly ["XIAOMI_TOKEN_PLAN_AMS_API_KEY"];
395
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
395
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
396
396
  }, {
397
397
  readonly id: "xiaomi-token-plan-cn";
398
398
  readonly defaultModel: "mimo-v2.5";
399
399
  readonly envVars: readonly ["XIAOMI_TOKEN_PLAN_CN_API_KEY"];
400
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
400
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
401
401
  }, {
402
402
  readonly id: "xiaomi-token-plan-sgp";
403
403
  readonly defaultModel: "mimo-v2.5";
404
404
  readonly envVars: readonly ["XIAOMI_TOKEN_PLAN_SGP_API_KEY"];
405
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
405
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
406
406
  }, {
407
407
  readonly id: "zai";
408
408
  readonly defaultModel: "glm-5.2";
409
409
  readonly envVars: readonly ["ZAI_API_KEY"];
410
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"anthropic-messages", unknown>;
410
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"anthropic-messages", unknown>;
411
411
  readonly catalogDiscovery: {
412
412
  readonly label: "zAI";
413
413
  };
@@ -415,7 +415,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
415
415
  readonly id: "zenmux";
416
416
  readonly defaultModel: "anthropic/claude-opus-4.8";
417
417
  readonly envVars: readonly ["ZENMUX_API_KEY"];
418
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<import("..").Api, unknown>;
418
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<import("../index.js").Api, unknown>;
419
419
  readonly allowUnauthenticated: true;
420
420
  readonly catalogDiscovery: {
421
421
  readonly label: "ZenMux";
@@ -425,7 +425,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
425
425
  readonly id: "zhipu-coding-plan";
426
426
  readonly defaultModel: "glm-5.1";
427
427
  readonly envVars: readonly ["ZHIPU_API_KEY"];
428
- readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
428
+ readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
429
429
  readonly dynamicModelsAuthoritative: true;
430
430
  readonly catalogDiscovery: {
431
431
  readonly label: "Zhipu Coding Plan";
@@ -1,5 +1,5 @@
1
- import type { ModelManagerOptions } from "../model-manager";
2
- import type { FetchImpl } from "../types";
1
+ import type { ModelManagerOptions } from "../model-manager.js";
2
+ import type { FetchImpl } from "../types.js";
3
3
  export interface GoogleModelManagerConfig {
4
4
  apiKey?: string;
5
5
  fetch?: FetchImpl;
@@ -1,6 +1,6 @@
1
- export * from "./descriptor-types";
2
- export * from "./descriptors";
3
- export * from "./google";
4
- export * from "./ollama";
5
- export * from "./openai-compat";
6
- export * from "./special";
1
+ export * from "./descriptor-types.js";
2
+ export * from "./descriptors.js";
3
+ export * from "./google.js";
4
+ export * from "./ollama.js";
5
+ export * from "./openai-compat.js";
6
+ export * from "./special.js";
@@ -1,5 +1,5 @@
1
- import type { ModelManagerOptions } from "../model-manager";
2
- import type { FetchImpl } from "../types";
1
+ import type { ModelManagerOptions } from "../model-manager.js";
2
+ import type { FetchImpl } from "../types.js";
3
3
  export interface OllamaCloudModelManagerConfig {
4
4
  apiKey?: string;
5
5
  baseUrl?: string;
@@ -1,6 +1,6 @@
1
- import type { ModelManagerOptions } from "../model-manager";
2
- import { getBundledModels } from "../models";
3
- import type { Api, FetchImpl, ModelSpec, Provider } from "../types";
1
+ import type { ModelManagerOptions } from "../model-manager.js";
2
+ import { getBundledModels } from "../models.js";
3
+ import type { Api, FetchImpl, ModelSpec, Provider } from "../types.js";
4
4
  export interface ModelsDevModel {
5
5
  id?: string;
6
6
  name?: string;
@@ -217,6 +217,8 @@ export interface WaferModelManagerConfig {
217
217
  baseUrl?: string;
218
218
  fetch?: FetchImpl;
219
219
  }
220
+ type WaferThinkingFormat = "zai" | "qwen";
221
+ export declare function resolveWaferServerlessThinkingFormat(modelId: string, upstreamProvider: unknown): WaferThinkingFormat | undefined;
220
222
  export declare function waferServerlessModelManagerOptions(config?: WaferModelManagerConfig): ModelManagerOptions<"openai-completions">;
221
223
  export interface MistralModelManagerConfig {
222
224
  apiKey?: string;
@@ -1,6 +1,6 @@
1
- import type { DevinModelDiscoveryOptions } from "../discovery/devin";
2
- import type { ModelManagerOptions } from "../model-manager";
3
- import type { FetchImpl } from "../types";
1
+ import type { DevinModelDiscoveryOptions } from "../discovery/devin.js";
2
+ import type { ModelManagerOptions } from "../model-manager.js";
3
+ import type { FetchImpl } from "../types.js";
4
4
  export interface OpenAICodexModelManagerConfig {
5
5
  accessToken?: string;
6
6
  accountId?: string;
@@ -1,6 +1,6 @@
1
- import type { Effort } from "./effort";
1
+ import type { Effort } from "./effort.js";
2
2
  export type { FetchImpl } from "@oh-my-pi/pi-utils";
3
- export type { KnownProvider } from "./provider-models/descriptors";
3
+ export type { KnownProvider } from "./provider-models/descriptors.js";
4
4
  export type KnownApi = "openai-completions" | "openai-responses" | "openrouter" | "openai-codex-responses" | "azure-openai-responses" | "anthropic-messages" | "bedrock-converse-stream" | "google-generative-ai" | "google-gemini-cli" | "google-vertex" | "ollama-chat" | "cursor-agent" | "gitlab-duo-agent" | "devin-agent";
5
5
  export type Api = KnownApi | (string & {});
6
6
  /** Canonical thinking transport used by a model. */
@@ -65,16 +65,25 @@ export type ThinkingBudgets = {
65
65
  [key in Effort]?: number;
66
66
  };
67
67
  export interface Usage {
68
- /** Non-cached input tokens (matches the bucket the provider bills as new input). */
68
+ /** Non-cached conversation input tokens (matches the bucket the provider bills as new input). */
69
69
  input: number;
70
- /** Total output tokens for the turn, including thinking, assistant text, and tool-call argument tokens. */
70
+ /** Total conversation output tokens for the turn, including thinking, assistant text, and tool-call argument tokens. */
71
71
  output: number;
72
- /** Tokens read from the prompt cache. */
72
+ /** Conversation tokens read from the prompt cache. */
73
73
  cacheRead: number;
74
- /** Tokens written to the prompt cache (cache creation). */
74
+ /** Conversation tokens written to the prompt cache (cache creation). */
75
75
  cacheWrite: number;
76
- /** Sum of input + output + cacheRead + cacheWrite. */
76
+ /** Sum of input + output + cacheRead + cacheWrite plus provider-side orchestration tokens when reported. */
77
77
  totalTokens: number;
78
+ /** Provider-side orchestration tokens, billed but not part of the conversation prompt/cache buckets. */
79
+ orchestration?: {
80
+ /** Non-cached orchestration input tokens. */
81
+ input?: number;
82
+ /** Orchestration tokens read from provider-side cache. */
83
+ cacheRead?: number;
84
+ /** Orchestration output tokens. */
85
+ output?: number;
86
+ };
78
87
  /** Copilot premium-request counter, when applicable. */
79
88
  premiumRequests?: number;
80
89
  /**
@@ -1,5 +1,5 @@
1
- import { Effort } from "./effort";
2
- import type { Api, Model, ModelSpec, Provider, ThinkingConfig } from "./types";
1
+ import { Effort } from "./effort.js";
2
+ import type { Api, Model, ModelSpec, Provider, ThinkingConfig } from "./types.js";
3
3
  /**
4
4
  * Structural bound for collapse inputs: both raw `ModelSpec`s and built
5
5
  * `Model`s qualify. (`Model.compat` is the resolved record, not the sparse
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oh-my-pi/pi-catalog",
4
- "version": "16.3.6",
4
+ "version": "16.3.8",
5
5
  "description": "Model catalog for omp: bundled model database, provider discovery descriptors, model identity, classification, and equivalence",
6
6
  "homepage": "https://omp.sh",
7
7
  "author": "Can Boluk",
@@ -34,12 +34,12 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@bufbuild/protobuf": "^2.12.0",
37
- "@oh-my-pi/pi-utils": "16.3.6",
37
+ "@oh-my-pi/pi-utils": "16.3.8",
38
38
  "arktype": "^2.2.0",
39
39
  "zod": "^4"
40
40
  },
41
41
  "devDependencies": {
42
- "@oh-my-pi/pi-ai": "16.3.6",
42
+ "@oh-my-pi/pi-ai": "16.3.8",
43
43
  "@types/bun": "^1.3.14"
44
44
  },
45
45
  "engines": {
@@ -586,13 +586,13 @@ interface OpenAIResponsesSpecLike {
586
586
  }
587
587
 
588
588
  /**
589
- * Build the resolved Responses-API compat record. The Responses flavor
590
- * deliberately differs from chat-completions: GitHub Copilot's responses
591
- * endpoint accepts the `developer` role, while strict tool mode is scoped to
592
- * first-party OpenAI/Azure/Copilot providers. Azure is detected by provider id
593
- * as well as URL — bundled `azure` models carry no baseUrl (the deployment host
594
- * is per-resource, resolved at runtime) — while OpenAI/Copilot developer-role
595
- * and prompt-cache detection stay URL-keyed, as the historical call sites were.
589
+ * Build the resolved Responses-API compat record. Most shared OpenAI-compatible
590
+ * capability defaults intentionally mirror chat-completions, while Responses-
591
+ * only behavior (developer role, prompt cache, pairing strictness, image detail)
592
+ * keeps endpoint-specific detection. Azure is detected by provider id as well
593
+ * as URL — bundled `azure` models carry no baseUrl (the deployment host is per-
594
+ * resource, resolved at runtime) — while OpenAI/Copilot developer-role and
595
+ * prompt-cache detection stay URL-keyed, as the historical call sites were.
596
596
  */
597
597
  export function buildOpenAIResponsesCompat(spec: OpenAIResponsesSpecLike): ResolvedOpenAIResponsesCompat {
598
598
  const baseUrl = spec.baseUrl ?? "";
@@ -611,8 +611,7 @@ export function buildOpenAIResponsesCompat(spec: OpenAIResponsesSpecLike): Resol
611
611
 
612
612
  const compat: ResolvedOpenAIResponsesCompat = {
613
613
  supportsDeveloperRole: isAzure || isOpenAIUrl || hostMatchesUrl(baseUrl, "githubCopilot"),
614
- supportsStrictMode:
615
- spec.provider === "openai" || isAzure || spec.provider === "github-copilot" || isOpenRouter || isOpenAIUrl,
614
+ supportsStrictMode: isAzure || detectStrictModeSupport(spec.provider, baseUrl),
616
615
  supportsReasoningEffort: spec.provider !== "xai-oauth" || isGrokReasoningEffortCapable(id),
617
616
  supportsLongPromptCacheRetention: isOpenAIUrl,
618
617
  // Azure OpenAI and GitHub Copilot Responses paths require tool results
@@ -41,9 +41,16 @@ export const isKimiK26ModelId = memo((modelId: string): boolean => {
41
41
  return /(^|\/)kimi-k2(?:\.6|p6)(?:[-:]|$)/i.test(modelId);
42
42
  });
43
43
 
44
- /** Claude ids in any namespace form (`claude-*`, `vendor/claude.x`). */
44
+ /**
45
+ * Claude ids in any namespace form: bare (`claude-*`), path-namespaced
46
+ * (`anthropic/claude.x`), or dot-prefixed (`us.anthropic.claude-…`,
47
+ * `global.anthropic.claude-…`, `au.anthropic.claude-…` — Bedrock cross-region
48
+ * inference profiles). Necessary because {@link parseAnthropicModel} only
49
+ * classifies kinds enumerated in its regex, so any dotted profile whose kind
50
+ * (e.g. `haiku`) is not enumerated would otherwise slip past this fallback.
51
+ */
45
52
  export const isClaudeModelId = memo((modelId: string): boolean => {
46
- return /(^|\/)claude[-.]/i.test(modelId);
53
+ return /(^|[/.])claude[-.]/i.test(modelId);
47
54
  });
48
55
 
49
56
  /** `anthropic/`-namespaced ids (aggregator catalogs like OpenRouter). */
@@ -118,9 +125,13 @@ export const isOpenAIGptOssModelId = memo((modelId: string): boolean => {
118
125
  return /(^|\/)gpt-oss[-:]/i.test(modelId);
119
126
  });
120
127
 
121
- /** OpenAI model ids (gpt-*, o1-*, o3-*, o4-*, or prefixed with openai/). */
128
+ /** OpenAI model ids (gpt-*, chatgpt-*, o1/o3/o4 SKUs, codex-*, or openai/*). */
122
129
  export const isOpenAIModelId = memo((modelId: string): boolean => {
123
- return /(^|\/)(gpt|o1|o3|o4)[-.]/i.test(modelId) || modelId.toLowerCase().includes("openai/");
130
+ return (
131
+ /(^|\/)(?:gpt|chatgpt|codex)[-.]/i.test(modelId) ||
132
+ /(^|\/)o[134](?:[-.]|$)/i.test(modelId) ||
133
+ modelId.toLowerCase().includes("openai/")
134
+ );
124
135
  });
125
136
 
126
137
  /** OpenAI models at or above the gpt-5.4 wire generation, keyed off the parsed version. */