@mariozechner/pi-ai 0.56.1 → 0.56.2

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 (49) hide show
  1. package/README.md +4 -3
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/models.d.ts +1 -1
  7. package/dist/models.d.ts.map +1 -1
  8. package/dist/models.generated.d.ts +194 -35
  9. package/dist/models.generated.d.ts.map +1 -1
  10. package/dist/models.generated.js +233 -79
  11. package/dist/models.generated.js.map +1 -1
  12. package/dist/models.js +2 -2
  13. package/dist/models.js.map +1 -1
  14. package/dist/providers/google-gemini-cli.d.ts.map +1 -1
  15. package/dist/providers/google-gemini-cli.js +21 -10
  16. package/dist/providers/google-gemini-cli.js.map +1 -1
  17. package/dist/providers/google-shared.d.ts.map +1 -1
  18. package/dist/providers/google-shared.js +16 -22
  19. package/dist/providers/google-shared.js.map +1 -1
  20. package/dist/providers/mistral.d.ts +22 -0
  21. package/dist/providers/mistral.d.ts.map +1 -0
  22. package/dist/providers/mistral.js +495 -0
  23. package/dist/providers/mistral.js.map +1 -0
  24. package/dist/providers/openai-codex-responses.d.ts.map +1 -1
  25. package/dist/providers/openai-codex-responses.js +1 -1
  26. package/dist/providers/openai-codex-responses.js.map +1 -1
  27. package/dist/providers/openai-completions.d.ts.map +1 -1
  28. package/dist/providers/openai-completions.js +8 -33
  29. package/dist/providers/openai-completions.js.map +1 -1
  30. package/dist/providers/openai-responses-shared.d.ts.map +1 -1
  31. package/dist/providers/openai-responses-shared.js +30 -13
  32. package/dist/providers/openai-responses-shared.js.map +1 -1
  33. package/dist/providers/register-builtins.d.ts.map +1 -1
  34. package/dist/providers/register-builtins.js +6 -0
  35. package/dist/providers/register-builtins.js.map +1 -1
  36. package/dist/types.d.ts +6 -3
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/types.js.map +1 -1
  39. package/dist/utils/hash.d.ts +3 -0
  40. package/dist/utils/hash.d.ts.map +1 -0
  41. package/dist/utils/hash.js +14 -0
  42. package/dist/utils/hash.js.map +1 -0
  43. package/dist/utils/overflow.d.ts +1 -1
  44. package/dist/utils/overflow.d.ts.map +1 -1
  45. package/dist/utils/overflow.js +4 -3
  46. package/dist/utils/overflow.js.map +1 -1
  47. package/package.json +5 -7
  48. package/oauth.d.ts +0 -1
  49. package/oauth.js +0 -1
package/README.md CHANGED
@@ -627,6 +627,7 @@ The library uses a registry of API implementations. Built-in APIs include:
627
627
  - **`google-generative-ai`**: Google Generative AI API (`streamGoogle`, `GoogleOptions`)
628
628
  - **`google-gemini-cli`**: Google Cloud Code Assist API (`streamGoogleGeminiCli`, `GoogleGeminiCliOptions`)
629
629
  - **`google-vertex`**: Google Vertex AI API (`streamGoogleVertex`, `GoogleVertexOptions`)
630
+ - **`mistral-conversations`**: Mistral Conversations API (`streamMistral`, `MistralOptions`)
630
631
  - **`openai-completions`**: OpenAI Chat Completions API (`streamOpenAICompletions`, `OpenAICompletionsOptions`)
631
632
  - **`openai-responses`**: OpenAI Responses API (`streamOpenAIResponses`, `OpenAIResponsesOptions`)
632
633
  - **`openai-codex-responses`**: OpenAI Codex Responses API (`streamOpenAICodexResponses`, `OpenAICodexResponsesOptions`)
@@ -639,7 +640,8 @@ A **provider** offers models through a specific API. For example:
639
640
  - **Anthropic** models use the `anthropic-messages` API
640
641
  - **Google** models use the `google-generative-ai` API
641
642
  - **OpenAI** models use the `openai-responses` API
642
- - **Mistral, xAI, Cerebras, Groq, etc.** models use the `openai-completions` API (OpenAI-compatible)
643
+ - **Mistral** models use the `mistral-conversations` API
644
+ - **xAI, Cerebras, Groq, etc.** models use the `openai-completions` API (OpenAI-compatible)
643
645
 
644
646
  ### Querying Providers and Models
645
647
 
@@ -729,7 +731,7 @@ const response = await stream(ollamaModel, context, {
729
731
 
730
732
  ### OpenAI Compatibility Settings
731
733
 
732
- The `openai-completions` API is implemented by many providers with minor differences. By default, the library auto-detects compatibility settings based on `baseUrl` for known providers (Cerebras, xAI, Mistral, Chutes, etc.). For custom proxies or unknown endpoints, you can override these settings via the `compat` field. For `openai-responses` models, the compat field only supports Responses-specific flags.
734
+ The `openai-completions` API is implemented by many providers with minor differences. By default, the library auto-detects compatibility settings based on `baseUrl` for a small set of known OpenAI-compatible providers (Cerebras, xAI, Chutes, DeepSeek, zAi, OpenCode, etc.). For custom proxies or unknown endpoints, you can override these settings via the `compat` field. For `openai-responses` models, the compat field only supports Responses-specific flags.
733
735
 
734
736
  ```typescript
735
737
  interface OpenAICompletionsCompat {
@@ -742,7 +744,6 @@ interface OpenAICompletionsCompat {
742
744
  requiresToolResultName?: boolean; // Whether tool results require the `name` field (default: false)
743
745
  requiresAssistantAfterToolResult?: boolean; // Whether tool results must be followed by an assistant message (default: false)
744
746
  requiresThinkingAsText?: boolean; // Whether thinking blocks must be converted to text (default: false)
745
- requiresMistralToolIds?: boolean; // Whether tool call IDs must be normalized to Mistral format (default: false)
746
747
  thinkingFormat?: 'openai' | 'zai' | 'qwen'; // Format for reasoning param: 'openai' uses reasoning_effort, 'zai' uses thinking: { type: "enabled" }, 'qwen' uses enable_thinking: boolean (default: openai)
747
748
  openRouterRouting?: OpenRouterRouting; // OpenRouter routing preferences (default: {})
748
749
  vercelGatewayRouting?: VercelGatewayRouting; // Vercel AI Gateway routing preferences (default: {})
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export * from "./providers/azure-openai-responses.js";
8
8
  export * from "./providers/google.js";
9
9
  export * from "./providers/google-gemini-cli.js";
10
10
  export * from "./providers/google-vertex.js";
11
+ export * from "./providers/mistral.js";
11
12
  export * from "./providers/openai-completions.js";
12
13
  export * from "./providers/openai-responses.js";
13
14
  export * from "./providers/register-builtins.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,YAAY,EACX,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,wBAAwB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC","sourcesContent":["export type { Static, TSchema } from \"@sinclair/typebox\";\nexport { Type } from \"@sinclair/typebox\";\n\nexport * from \"./api-registry.js\";\nexport * from \"./env-api-keys.js\";\nexport * from \"./models.js\";\nexport * from \"./providers/anthropic.js\";\nexport * from \"./providers/azure-openai-responses.js\";\nexport * from \"./providers/google.js\";\nexport * from \"./providers/google-gemini-cli.js\";\nexport * from \"./providers/google-vertex.js\";\nexport * from \"./providers/openai-completions.js\";\nexport * from \"./providers/openai-responses.js\";\nexport * from \"./providers/register-builtins.js\";\nexport * from \"./stream.js\";\nexport * from \"./types.js\";\nexport * from \"./utils/event-stream.js\";\nexport * from \"./utils/json-parse.js\";\nexport type {\n\tOAuthAuthInfo,\n\tOAuthCredentials,\n\tOAuthLoginCallbacks,\n\tOAuthPrompt,\n\tOAuthProvider,\n\tOAuthProviderId,\n\tOAuthProviderInfo,\n\tOAuthProviderInterface,\n} from \"./utils/oauth/types.js\";\nexport * from \"./utils/overflow.js\";\nexport * from \"./utils/typebox-helpers.js\";\nexport * from \"./utils/validation.js\";\n"]}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,YAAY,EACX,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,wBAAwB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC","sourcesContent":["export type { Static, TSchema } from \"@sinclair/typebox\";\nexport { Type } from \"@sinclair/typebox\";\n\nexport * from \"./api-registry.js\";\nexport * from \"./env-api-keys.js\";\nexport * from \"./models.js\";\nexport * from \"./providers/anthropic.js\";\nexport * from \"./providers/azure-openai-responses.js\";\nexport * from \"./providers/google.js\";\nexport * from \"./providers/google-gemini-cli.js\";\nexport * from \"./providers/google-vertex.js\";\nexport * from \"./providers/mistral.js\";\nexport * from \"./providers/openai-completions.js\";\nexport * from \"./providers/openai-responses.js\";\nexport * from \"./providers/register-builtins.js\";\nexport * from \"./stream.js\";\nexport * from \"./types.js\";\nexport * from \"./utils/event-stream.js\";\nexport * from \"./utils/json-parse.js\";\nexport type {\n\tOAuthAuthInfo,\n\tOAuthCredentials,\n\tOAuthLoginCallbacks,\n\tOAuthPrompt,\n\tOAuthProvider,\n\tOAuthProviderId,\n\tOAuthProviderInfo,\n\tOAuthProviderInterface,\n} from \"./utils/oauth/types.js\";\nexport * from \"./utils/overflow.js\";\nexport * from \"./utils/typebox-helpers.js\";\nexport * from \"./utils/validation.js\";\n"]}
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ export * from "./providers/azure-openai-responses.js";
7
7
  export * from "./providers/google.js";
8
8
  export * from "./providers/google-gemini-cli.js";
9
9
  export * from "./providers/google-vertex.js";
10
+ export * from "./providers/mistral.js";
10
11
  export * from "./providers/openai-completions.js";
11
12
  export * from "./providers/openai-responses.js";
12
13
  export * from "./providers/register-builtins.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AAWtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC","sourcesContent":["export type { Static, TSchema } from \"@sinclair/typebox\";\nexport { Type } from \"@sinclair/typebox\";\n\nexport * from \"./api-registry.js\";\nexport * from \"./env-api-keys.js\";\nexport * from \"./models.js\";\nexport * from \"./providers/anthropic.js\";\nexport * from \"./providers/azure-openai-responses.js\";\nexport * from \"./providers/google.js\";\nexport * from \"./providers/google-gemini-cli.js\";\nexport * from \"./providers/google-vertex.js\";\nexport * from \"./providers/openai-completions.js\";\nexport * from \"./providers/openai-responses.js\";\nexport * from \"./providers/register-builtins.js\";\nexport * from \"./stream.js\";\nexport * from \"./types.js\";\nexport * from \"./utils/event-stream.js\";\nexport * from \"./utils/json-parse.js\";\nexport type {\n\tOAuthAuthInfo,\n\tOAuthCredentials,\n\tOAuthLoginCallbacks,\n\tOAuthPrompt,\n\tOAuthProvider,\n\tOAuthProviderId,\n\tOAuthProviderInfo,\n\tOAuthProviderInterface,\n} from \"./utils/oauth/types.js\";\nexport * from \"./utils/overflow.js\";\nexport * from \"./utils/typebox-helpers.js\";\nexport * from \"./utils/validation.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AAWtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC","sourcesContent":["export type { Static, TSchema } from \"@sinclair/typebox\";\nexport { Type } from \"@sinclair/typebox\";\n\nexport * from \"./api-registry.js\";\nexport * from \"./env-api-keys.js\";\nexport * from \"./models.js\";\nexport * from \"./providers/anthropic.js\";\nexport * from \"./providers/azure-openai-responses.js\";\nexport * from \"./providers/google.js\";\nexport * from \"./providers/google-gemini-cli.js\";\nexport * from \"./providers/google-vertex.js\";\nexport * from \"./providers/mistral.js\";\nexport * from \"./providers/openai-completions.js\";\nexport * from \"./providers/openai-responses.js\";\nexport * from \"./providers/register-builtins.js\";\nexport * from \"./stream.js\";\nexport * from \"./types.js\";\nexport * from \"./utils/event-stream.js\";\nexport * from \"./utils/json-parse.js\";\nexport type {\n\tOAuthAuthInfo,\n\tOAuthCredentials,\n\tOAuthLoginCallbacks,\n\tOAuthPrompt,\n\tOAuthProvider,\n\tOAuthProviderId,\n\tOAuthProviderInfo,\n\tOAuthProviderInterface,\n} from \"./utils/oauth/types.js\";\nexport * from \"./utils/overflow.js\";\nexport * from \"./utils/typebox-helpers.js\";\nexport * from \"./utils/validation.js\";\n"]}
package/dist/models.d.ts CHANGED
@@ -11,7 +11,7 @@ export declare function calculateCost<TApi extends Api>(model: Model<TApi>, usag
11
11
  * Check if a model supports xhigh thinking level.
12
12
  *
13
13
  * Supported today:
14
- * - GPT-5.2 / GPT-5.3 model families
14
+ * - GPT-5.2 / GPT-5.3 / GPT-5.4 model families
15
15
  * - Anthropic Messages API Opus 4.6 models (xhigh maps to adaptive effort "max")
16
16
  */
17
17
  export declare function supportsXhigh<TApi extends Api>(model: Model<TApi>): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAanE,KAAK,QAAQ,CACZ,SAAS,SAAS,aAAa,EAC/B,QAAQ,SAAS,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,IAC9C,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,IAAI,CAAA;CAAE,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;AAEjH,wBAAgB,QAAQ,CAAC,SAAS,SAAS,aAAa,EAAE,QAAQ,SAAS,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,EAC1G,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,QAAQ,GACf,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAGtC;AAED,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAE9C;AAED,wBAAgB,SAAS,CAAC,SAAS,SAAS,aAAa,EACxD,QAAQ,EAAE,SAAS,GACjB,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAGhE;AAED,wBAAgB,aAAa,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAO/F;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAU3E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,SAAS,GAAG,EAC9C,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,EACjC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,GAC/B,OAAO,CAGT","sourcesContent":["import { MODELS } from \"./models.generated.js\";\nimport type { Api, KnownProvider, Model, Usage } from \"./types.js\";\n\nconst modelRegistry: Map<string, Map<string, Model<Api>>> = new Map();\n\n// Initialize registry from MODELS on module load\nfor (const [provider, models] of Object.entries(MODELS)) {\n\tconst providerModels = new Map<string, Model<Api>>();\n\tfor (const [id, model] of Object.entries(models)) {\n\t\tproviderModels.set(id, model as Model<Api>);\n\t}\n\tmodelRegistry.set(provider, providerModels);\n}\n\ntype ModelApi<\n\tTProvider extends KnownProvider,\n\tTModelId extends keyof (typeof MODELS)[TProvider],\n> = (typeof MODELS)[TProvider][TModelId] extends { api: infer TApi } ? (TApi extends Api ? TApi : never) : never;\n\nexport function getModel<TProvider extends KnownProvider, TModelId extends keyof (typeof MODELS)[TProvider]>(\n\tprovider: TProvider,\n\tmodelId: TModelId,\n): Model<ModelApi<TProvider, TModelId>> {\n\tconst providerModels = modelRegistry.get(provider);\n\treturn providerModels?.get(modelId as string) as Model<ModelApi<TProvider, TModelId>>;\n}\n\nexport function getProviders(): KnownProvider[] {\n\treturn Array.from(modelRegistry.keys()) as KnownProvider[];\n}\n\nexport function getModels<TProvider extends KnownProvider>(\n\tprovider: TProvider,\n): Model<ModelApi<TProvider, keyof (typeof MODELS)[TProvider]>>[] {\n\tconst models = modelRegistry.get(provider);\n\treturn models ? (Array.from(models.values()) as Model<ModelApi<TProvider, keyof (typeof MODELS)[TProvider]>>[]) : [];\n}\n\nexport function calculateCost<TApi extends Api>(model: Model<TApi>, usage: Usage): Usage[\"cost\"] {\n\tusage.cost.input = (model.cost.input / 1000000) * usage.input;\n\tusage.cost.output = (model.cost.output / 1000000) * usage.output;\n\tusage.cost.cacheRead = (model.cost.cacheRead / 1000000) * usage.cacheRead;\n\tusage.cost.cacheWrite = (model.cost.cacheWrite / 1000000) * usage.cacheWrite;\n\tusage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;\n\treturn usage.cost;\n}\n\n/**\n * Check if a model supports xhigh thinking level.\n *\n * Supported today:\n * - GPT-5.2 / GPT-5.3 model families\n * - Anthropic Messages API Opus 4.6 models (xhigh maps to adaptive effort \"max\")\n */\nexport function supportsXhigh<TApi extends Api>(model: Model<TApi>): boolean {\n\tif (model.id.includes(\"gpt-5.2\") || model.id.includes(\"gpt-5.3\")) {\n\t\treturn true;\n\t}\n\n\tif (model.api === \"anthropic-messages\") {\n\t\treturn model.id.includes(\"opus-4-6\") || model.id.includes(\"opus-4.6\");\n\t}\n\n\treturn false;\n}\n\n/**\n * Check if two models are equal by comparing both their id and provider.\n * Returns false if either model is null or undefined.\n */\nexport function modelsAreEqual<TApi extends Api>(\n\ta: Model<TApi> | null | undefined,\n\tb: Model<TApi> | null | undefined,\n): boolean {\n\tif (!a || !b) return false;\n\treturn a.id === b.id && a.provider === b.provider;\n}\n"]}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAanE,KAAK,QAAQ,CACZ,SAAS,SAAS,aAAa,EAC/B,QAAQ,SAAS,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,IAC9C,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,IAAI,CAAA;CAAE,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;AAEjH,wBAAgB,QAAQ,CAAC,SAAS,SAAS,aAAa,EAAE,QAAQ,SAAS,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,EAC1G,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,QAAQ,GACf,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAGtC;AAED,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAE9C;AAED,wBAAgB,SAAS,CAAC,SAAS,SAAS,aAAa,EACxD,QAAQ,EAAE,SAAS,GACjB,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAGhE;AAED,wBAAgB,aAAa,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAO/F;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAU3E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,SAAS,GAAG,EAC9C,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,EACjC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,GAC/B,OAAO,CAGT","sourcesContent":["import { MODELS } from \"./models.generated.js\";\nimport type { Api, KnownProvider, Model, Usage } from \"./types.js\";\n\nconst modelRegistry: Map<string, Map<string, Model<Api>>> = new Map();\n\n// Initialize registry from MODELS on module load\nfor (const [provider, models] of Object.entries(MODELS)) {\n\tconst providerModels = new Map<string, Model<Api>>();\n\tfor (const [id, model] of Object.entries(models)) {\n\t\tproviderModels.set(id, model as Model<Api>);\n\t}\n\tmodelRegistry.set(provider, providerModels);\n}\n\ntype ModelApi<\n\tTProvider extends KnownProvider,\n\tTModelId extends keyof (typeof MODELS)[TProvider],\n> = (typeof MODELS)[TProvider][TModelId] extends { api: infer TApi } ? (TApi extends Api ? TApi : never) : never;\n\nexport function getModel<TProvider extends KnownProvider, TModelId extends keyof (typeof MODELS)[TProvider]>(\n\tprovider: TProvider,\n\tmodelId: TModelId,\n): Model<ModelApi<TProvider, TModelId>> {\n\tconst providerModels = modelRegistry.get(provider);\n\treturn providerModels?.get(modelId as string) as Model<ModelApi<TProvider, TModelId>>;\n}\n\nexport function getProviders(): KnownProvider[] {\n\treturn Array.from(modelRegistry.keys()) as KnownProvider[];\n}\n\nexport function getModels<TProvider extends KnownProvider>(\n\tprovider: TProvider,\n): Model<ModelApi<TProvider, keyof (typeof MODELS)[TProvider]>>[] {\n\tconst models = modelRegistry.get(provider);\n\treturn models ? (Array.from(models.values()) as Model<ModelApi<TProvider, keyof (typeof MODELS)[TProvider]>>[]) : [];\n}\n\nexport function calculateCost<TApi extends Api>(model: Model<TApi>, usage: Usage): Usage[\"cost\"] {\n\tusage.cost.input = (model.cost.input / 1000000) * usage.input;\n\tusage.cost.output = (model.cost.output / 1000000) * usage.output;\n\tusage.cost.cacheRead = (model.cost.cacheRead / 1000000) * usage.cacheRead;\n\tusage.cost.cacheWrite = (model.cost.cacheWrite / 1000000) * usage.cacheWrite;\n\tusage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;\n\treturn usage.cost;\n}\n\n/**\n * Check if a model supports xhigh thinking level.\n *\n * Supported today:\n * - GPT-5.2 / GPT-5.3 / GPT-5.4 model families\n * - Anthropic Messages API Opus 4.6 models (xhigh maps to adaptive effort \"max\")\n */\nexport function supportsXhigh<TApi extends Api>(model: Model<TApi>): boolean {\n\tif (model.id.includes(\"gpt-5.2\") || model.id.includes(\"gpt-5.3\") || model.id.includes(\"gpt-5.4\")) {\n\t\treturn true;\n\t}\n\n\tif (model.api === \"anthropic-messages\") {\n\t\treturn model.id.includes(\"opus-4-6\") || model.id.includes(\"opus-4.6\");\n\t}\n\n\treturn false;\n}\n\n/**\n * Check if two models are equal by comparing both their id and provider.\n * Returns false if either model is null or undefined.\n */\nexport function modelsAreEqual<TApi extends Api>(\n\ta: Model<TApi> | null | undefined,\n\tb: Model<TApi> | null | undefined,\n): boolean {\n\tif (!a || !b) return false;\n\treturn a.id === b.id && a.provider === b.provider;\n}\n"]}
@@ -2282,6 +2282,23 @@ export declare const MODELS: {
2282
2282
  contextWindow: number;
2283
2283
  maxTokens: number;
2284
2284
  };
2285
+ readonly "gpt-5.4": {
2286
+ id: string;
2287
+ name: string;
2288
+ api: "azure-openai-responses";
2289
+ provider: string;
2290
+ baseUrl: string;
2291
+ reasoning: true;
2292
+ input: ("image" | "text")[];
2293
+ cost: {
2294
+ input: number;
2295
+ output: number;
2296
+ cacheRead: number;
2297
+ cacheWrite: number;
2298
+ };
2299
+ contextWindow: number;
2300
+ maxTokens: number;
2301
+ };
2285
2302
  readonly o1: {
2286
2303
  id: string;
2287
2304
  name: string;
@@ -2980,6 +2997,29 @@ export declare const MODELS: {
2980
2997
  contextWindow: number;
2981
2998
  maxTokens: number;
2982
2999
  };
3000
+ readonly "gpt-5.3-codex": {
3001
+ id: string;
3002
+ name: string;
3003
+ api: "openai-responses";
3004
+ provider: string;
3005
+ baseUrl: string;
3006
+ headers: {
3007
+ "User-Agent": string;
3008
+ "Editor-Version": string;
3009
+ "Editor-Plugin-Version": string;
3010
+ "Copilot-Integration-Id": string;
3011
+ };
3012
+ reasoning: true;
3013
+ input: ("image" | "text")[];
3014
+ cost: {
3015
+ input: number;
3016
+ output: number;
3017
+ cacheRead: number;
3018
+ cacheWrite: number;
3019
+ };
3020
+ contextWindow: number;
3021
+ maxTokens: number;
3022
+ };
2983
3023
  readonly "grok-code-fast-1": {
2984
3024
  id: string;
2985
3025
  name: string;
@@ -4666,7 +4706,7 @@ export declare const MODELS: {
4666
4706
  readonly "codestral-latest": {
4667
4707
  id: string;
4668
4708
  name: string;
4669
- api: "openai-completions";
4709
+ api: "mistral-conversations";
4670
4710
  provider: string;
4671
4711
  baseUrl: string;
4672
4712
  reasoning: false;
@@ -4683,7 +4723,7 @@ export declare const MODELS: {
4683
4723
  readonly "devstral-2512": {
4684
4724
  id: string;
4685
4725
  name: string;
4686
- api: "openai-completions";
4726
+ api: "mistral-conversations";
4687
4727
  provider: string;
4688
4728
  baseUrl: string;
4689
4729
  reasoning: false;
@@ -4700,7 +4740,7 @@ export declare const MODELS: {
4700
4740
  readonly "devstral-medium-2507": {
4701
4741
  id: string;
4702
4742
  name: string;
4703
- api: "openai-completions";
4743
+ api: "mistral-conversations";
4704
4744
  provider: string;
4705
4745
  baseUrl: string;
4706
4746
  reasoning: false;
@@ -4717,7 +4757,7 @@ export declare const MODELS: {
4717
4757
  readonly "devstral-medium-latest": {
4718
4758
  id: string;
4719
4759
  name: string;
4720
- api: "openai-completions";
4760
+ api: "mistral-conversations";
4721
4761
  provider: string;
4722
4762
  baseUrl: string;
4723
4763
  reasoning: false;
@@ -4734,7 +4774,7 @@ export declare const MODELS: {
4734
4774
  readonly "devstral-small-2505": {
4735
4775
  id: string;
4736
4776
  name: string;
4737
- api: "openai-completions";
4777
+ api: "mistral-conversations";
4738
4778
  provider: string;
4739
4779
  baseUrl: string;
4740
4780
  reasoning: false;
@@ -4751,7 +4791,7 @@ export declare const MODELS: {
4751
4791
  readonly "devstral-small-2507": {
4752
4792
  id: string;
4753
4793
  name: string;
4754
- api: "openai-completions";
4794
+ api: "mistral-conversations";
4755
4795
  provider: string;
4756
4796
  baseUrl: string;
4757
4797
  reasoning: false;
@@ -4768,7 +4808,7 @@ export declare const MODELS: {
4768
4808
  readonly "labs-devstral-small-2512": {
4769
4809
  id: string;
4770
4810
  name: string;
4771
- api: "openai-completions";
4811
+ api: "mistral-conversations";
4772
4812
  provider: string;
4773
4813
  baseUrl: string;
4774
4814
  reasoning: false;
@@ -4785,7 +4825,7 @@ export declare const MODELS: {
4785
4825
  readonly "magistral-medium-latest": {
4786
4826
  id: string;
4787
4827
  name: string;
4788
- api: "openai-completions";
4828
+ api: "mistral-conversations";
4789
4829
  provider: string;
4790
4830
  baseUrl: string;
4791
4831
  reasoning: true;
@@ -4802,7 +4842,7 @@ export declare const MODELS: {
4802
4842
  readonly "magistral-small": {
4803
4843
  id: string;
4804
4844
  name: string;
4805
- api: "openai-completions";
4845
+ api: "mistral-conversations";
4806
4846
  provider: string;
4807
4847
  baseUrl: string;
4808
4848
  reasoning: true;
@@ -4819,7 +4859,7 @@ export declare const MODELS: {
4819
4859
  readonly "ministral-3b-latest": {
4820
4860
  id: string;
4821
4861
  name: string;
4822
- api: "openai-completions";
4862
+ api: "mistral-conversations";
4823
4863
  provider: string;
4824
4864
  baseUrl: string;
4825
4865
  reasoning: false;
@@ -4836,7 +4876,7 @@ export declare const MODELS: {
4836
4876
  readonly "ministral-8b-latest": {
4837
4877
  id: string;
4838
4878
  name: string;
4839
- api: "openai-completions";
4879
+ api: "mistral-conversations";
4840
4880
  provider: string;
4841
4881
  baseUrl: string;
4842
4882
  reasoning: false;
@@ -4853,7 +4893,7 @@ export declare const MODELS: {
4853
4893
  readonly "mistral-large-2411": {
4854
4894
  id: string;
4855
4895
  name: string;
4856
- api: "openai-completions";
4896
+ api: "mistral-conversations";
4857
4897
  provider: string;
4858
4898
  baseUrl: string;
4859
4899
  reasoning: false;
@@ -4870,7 +4910,7 @@ export declare const MODELS: {
4870
4910
  readonly "mistral-large-2512": {
4871
4911
  id: string;
4872
4912
  name: string;
4873
- api: "openai-completions";
4913
+ api: "mistral-conversations";
4874
4914
  provider: string;
4875
4915
  baseUrl: string;
4876
4916
  reasoning: false;
@@ -4887,7 +4927,7 @@ export declare const MODELS: {
4887
4927
  readonly "mistral-large-latest": {
4888
4928
  id: string;
4889
4929
  name: string;
4890
- api: "openai-completions";
4930
+ api: "mistral-conversations";
4891
4931
  provider: string;
4892
4932
  baseUrl: string;
4893
4933
  reasoning: false;
@@ -4904,7 +4944,7 @@ export declare const MODELS: {
4904
4944
  readonly "mistral-medium-2505": {
4905
4945
  id: string;
4906
4946
  name: string;
4907
- api: "openai-completions";
4947
+ api: "mistral-conversations";
4908
4948
  provider: string;
4909
4949
  baseUrl: string;
4910
4950
  reasoning: false;
@@ -4921,7 +4961,7 @@ export declare const MODELS: {
4921
4961
  readonly "mistral-medium-2508": {
4922
4962
  id: string;
4923
4963
  name: string;
4924
- api: "openai-completions";
4964
+ api: "mistral-conversations";
4925
4965
  provider: string;
4926
4966
  baseUrl: string;
4927
4967
  reasoning: false;
@@ -4938,7 +4978,7 @@ export declare const MODELS: {
4938
4978
  readonly "mistral-medium-latest": {
4939
4979
  id: string;
4940
4980
  name: string;
4941
- api: "openai-completions";
4981
+ api: "mistral-conversations";
4942
4982
  provider: string;
4943
4983
  baseUrl: string;
4944
4984
  reasoning: false;
@@ -4955,7 +4995,7 @@ export declare const MODELS: {
4955
4995
  readonly "mistral-nemo": {
4956
4996
  id: string;
4957
4997
  name: string;
4958
- api: "openai-completions";
4998
+ api: "mistral-conversations";
4959
4999
  provider: string;
4960
5000
  baseUrl: string;
4961
5001
  reasoning: false;
@@ -4972,7 +5012,7 @@ export declare const MODELS: {
4972
5012
  readonly "mistral-small-2506": {
4973
5013
  id: string;
4974
5014
  name: string;
4975
- api: "openai-completions";
5015
+ api: "mistral-conversations";
4976
5016
  provider: string;
4977
5017
  baseUrl: string;
4978
5018
  reasoning: false;
@@ -4989,7 +5029,7 @@ export declare const MODELS: {
4989
5029
  readonly "mistral-small-latest": {
4990
5030
  id: string;
4991
5031
  name: string;
4992
- api: "openai-completions";
5032
+ api: "mistral-conversations";
4993
5033
  provider: string;
4994
5034
  baseUrl: string;
4995
5035
  reasoning: false;
@@ -5006,7 +5046,7 @@ export declare const MODELS: {
5006
5046
  readonly "open-mistral-7b": {
5007
5047
  id: string;
5008
5048
  name: string;
5009
- api: "openai-completions";
5049
+ api: "mistral-conversations";
5010
5050
  provider: string;
5011
5051
  baseUrl: string;
5012
5052
  reasoning: false;
@@ -5023,7 +5063,7 @@ export declare const MODELS: {
5023
5063
  readonly "open-mixtral-8x22b": {
5024
5064
  id: string;
5025
5065
  name: string;
5026
- api: "openai-completions";
5066
+ api: "mistral-conversations";
5027
5067
  provider: string;
5028
5068
  baseUrl: string;
5029
5069
  reasoning: false;
@@ -5040,7 +5080,7 @@ export declare const MODELS: {
5040
5080
  readonly "open-mixtral-8x7b": {
5041
5081
  id: string;
5042
5082
  name: string;
5043
- api: "openai-completions";
5083
+ api: "mistral-conversations";
5044
5084
  provider: string;
5045
5085
  baseUrl: string;
5046
5086
  reasoning: false;
@@ -5057,7 +5097,7 @@ export declare const MODELS: {
5057
5097
  readonly "pixtral-12b": {
5058
5098
  id: string;
5059
5099
  name: string;
5060
- api: "openai-completions";
5100
+ api: "mistral-conversations";
5061
5101
  provider: string;
5062
5102
  baseUrl: string;
5063
5103
  reasoning: false;
@@ -5074,7 +5114,7 @@ export declare const MODELS: {
5074
5114
  readonly "pixtral-large-latest": {
5075
5115
  id: string;
5076
5116
  name: string;
5077
- api: "openai-completions";
5117
+ api: "mistral-conversations";
5078
5118
  provider: string;
5079
5119
  baseUrl: string;
5080
5120
  reasoning: false;
@@ -5566,6 +5606,23 @@ export declare const MODELS: {
5566
5606
  contextWindow: number;
5567
5607
  maxTokens: number;
5568
5608
  };
5609
+ readonly "gpt-5.4": {
5610
+ id: string;
5611
+ name: string;
5612
+ api: "openai-responses";
5613
+ provider: string;
5614
+ baseUrl: string;
5615
+ reasoning: true;
5616
+ input: ("image" | "text")[];
5617
+ cost: {
5618
+ input: number;
5619
+ output: number;
5620
+ cacheRead: number;
5621
+ cacheWrite: number;
5622
+ };
5623
+ contextWindow: number;
5624
+ maxTokens: number;
5625
+ };
5569
5626
  readonly o1: {
5570
5627
  id: string;
5571
5628
  name: string;
@@ -5823,6 +5880,23 @@ export declare const MODELS: {
5823
5880
  contextWindow: number;
5824
5881
  maxTokens: number;
5825
5882
  };
5883
+ readonly "gpt-5.4": {
5884
+ id: string;
5885
+ name: string;
5886
+ api: "openai-codex-responses";
5887
+ provider: string;
5888
+ baseUrl: string;
5889
+ reasoning: true;
5890
+ input: ("image" | "text")[];
5891
+ cost: {
5892
+ input: number;
5893
+ output: number;
5894
+ cacheRead: number;
5895
+ cacheWrite: number;
5896
+ };
5897
+ contextWindow: number;
5898
+ maxTokens: number;
5899
+ };
5826
5900
  };
5827
5901
  readonly opencode: {
5828
5902
  readonly "big-pickle": {
@@ -6250,10 +6324,10 @@ export declare const MODELS: {
6250
6324
  contextWindow: number;
6251
6325
  maxTokens: number;
6252
6326
  };
6253
- readonly "kimi-k2.5": {
6327
+ readonly "gpt-5.4": {
6254
6328
  id: string;
6255
6329
  name: string;
6256
- api: "openai-completions";
6330
+ api: "openai-responses";
6257
6331
  provider: string;
6258
6332
  baseUrl: string;
6259
6333
  reasoning: true;
@@ -6267,14 +6341,14 @@ export declare const MODELS: {
6267
6341
  contextWindow: number;
6268
6342
  maxTokens: number;
6269
6343
  };
6270
- readonly "minimax-m2.1": {
6344
+ readonly "kimi-k2.5": {
6271
6345
  id: string;
6272
6346
  name: string;
6273
6347
  api: "openai-completions";
6274
6348
  provider: string;
6275
6349
  baseUrl: string;
6276
6350
  reasoning: true;
6277
- input: "text"[];
6351
+ input: ("image" | "text")[];
6278
6352
  cost: {
6279
6353
  input: number;
6280
6354
  output: number;
@@ -6284,7 +6358,7 @@ export declare const MODELS: {
6284
6358
  contextWindow: number;
6285
6359
  maxTokens: number;
6286
6360
  };
6287
- readonly "minimax-m2.5": {
6361
+ readonly "minimax-m2.1": {
6288
6362
  id: string;
6289
6363
  name: string;
6290
6364
  api: "openai-completions";
@@ -6301,10 +6375,10 @@ export declare const MODELS: {
6301
6375
  contextWindow: number;
6302
6376
  maxTokens: number;
6303
6377
  };
6304
- readonly "minimax-m2.5-free": {
6378
+ readonly "minimax-m2.5": {
6305
6379
  id: string;
6306
6380
  name: string;
6307
- api: "anthropic-messages";
6381
+ api: "openai-completions";
6308
6382
  provider: string;
6309
6383
  baseUrl: string;
6310
6384
  reasoning: true;
@@ -6318,13 +6392,13 @@ export declare const MODELS: {
6318
6392
  contextWindow: number;
6319
6393
  maxTokens: number;
6320
6394
  };
6321
- readonly "trinity-large-preview-free": {
6395
+ readonly "minimax-m2.5-free": {
6322
6396
  id: string;
6323
6397
  name: string;
6324
- api: "openai-completions";
6398
+ api: "anthropic-messages";
6325
6399
  provider: string;
6326
6400
  baseUrl: string;
6327
- reasoning: false;
6401
+ reasoning: true;
6328
6402
  input: "text"[];
6329
6403
  cost: {
6330
6404
  input: number;
@@ -7393,6 +7467,23 @@ export declare const MODELS: {
7393
7467
  contextWindow: number;
7394
7468
  maxTokens: number;
7395
7469
  };
7470
+ readonly "inception/mercury-2": {
7471
+ id: string;
7472
+ name: string;
7473
+ api: "openai-completions";
7474
+ provider: string;
7475
+ baseUrl: string;
7476
+ reasoning: true;
7477
+ input: "text"[];
7478
+ cost: {
7479
+ input: number;
7480
+ output: number;
7481
+ cacheRead: number;
7482
+ cacheWrite: number;
7483
+ };
7484
+ contextWindow: number;
7485
+ maxTokens: number;
7486
+ };
7396
7487
  readonly "inception/mercury-coder": {
7397
7488
  id: string;
7398
7489
  name: string;
@@ -8889,6 +8980,40 @@ export declare const MODELS: {
8889
8980
  contextWindow: number;
8890
8981
  maxTokens: number;
8891
8982
  };
8983
+ readonly "openai/gpt-5.4": {
8984
+ id: string;
8985
+ name: string;
8986
+ api: "openai-completions";
8987
+ provider: string;
8988
+ baseUrl: string;
8989
+ reasoning: true;
8990
+ input: ("image" | "text")[];
8991
+ cost: {
8992
+ input: number;
8993
+ output: number;
8994
+ cacheRead: number;
8995
+ cacheWrite: number;
8996
+ };
8997
+ contextWindow: number;
8998
+ maxTokens: number;
8999
+ };
9000
+ readonly "openai/gpt-5.4-pro": {
9001
+ id: string;
9002
+ name: string;
9003
+ api: "openai-completions";
9004
+ provider: string;
9005
+ baseUrl: string;
9006
+ reasoning: true;
9007
+ input: ("image" | "text")[];
9008
+ cost: {
9009
+ input: number;
9010
+ output: number;
9011
+ cacheRead: number;
9012
+ cacheWrite: number;
9013
+ };
9014
+ contextWindow: number;
9015
+ maxTokens: number;
9016
+ };
8892
9017
  readonly "openai/gpt-oss-120b": {
8893
9018
  id: string;
8894
9019
  name: string;
@@ -12138,6 +12263,40 @@ export declare const MODELS: {
12138
12263
  contextWindow: number;
12139
12264
  maxTokens: number;
12140
12265
  };
12266
+ readonly "openai/gpt-5.4": {
12267
+ id: string;
12268
+ name: string;
12269
+ api: "anthropic-messages";
12270
+ provider: string;
12271
+ baseUrl: string;
12272
+ reasoning: true;
12273
+ input: ("image" | "text")[];
12274
+ cost: {
12275
+ input: number;
12276
+ output: number;
12277
+ cacheRead: number;
12278
+ cacheWrite: number;
12279
+ };
12280
+ contextWindow: number;
12281
+ maxTokens: number;
12282
+ };
12283
+ readonly "openai/gpt-5.4-pro": {
12284
+ id: string;
12285
+ name: string;
12286
+ api: "anthropic-messages";
12287
+ provider: string;
12288
+ baseUrl: string;
12289
+ reasoning: true;
12290
+ input: ("image" | "text")[];
12291
+ cost: {
12292
+ input: number;
12293
+ output: number;
12294
+ cacheRead: number;
12295
+ cacheWrite: number;
12296
+ };
12297
+ contextWindow: number;
12298
+ maxTokens: number;
12299
+ };
12141
12300
  readonly "openai/gpt-oss-120b": {
12142
12301
  id: string;
12143
12302
  name: string;