@dreb/ai 2.64.4 → 2.64.5
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/README.md +7 -3
- package/dist/models.d.ts +2 -0
- package/dist/models.d.ts.map +1 -1
- package/dist/models.generated.d.ts +45 -220
- package/dist/models.generated.d.ts.map +1 -1
- package/dist/models.generated.js +118 -289
- package/dist/models.generated.js.map +1 -1
- package/dist/models.js +8 -4
- package/dist/models.js.map +1 -1
- package/dist/providers/openai-codex-responses.d.ts.map +1 -1
- package/dist/providers/openai-codex-responses.js +2 -1
- package/dist/providers/openai-codex-responses.js.map +1 -1
- package/dist/utils/overflow.d.ts +8 -5
- package/dist/utils/overflow.d.ts.map +1 -1
- package/dist/utils/overflow.js +12 -8
- package/dist/utils/overflow.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -444,7 +444,7 @@ const response = await completeSimple(model, {
|
|
|
444
444
|
messages: [{ role: 'user', content: 'Solve: 2x + 5 = 13' }]
|
|
445
445
|
}, {
|
|
446
446
|
reasoning: 'medium' // 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'
|
|
447
|
-
// Native normalized 'max' is model-aware (currently GPT-5.6). Claude's established xhigh mapping still emits provider-native 'max'.
|
|
447
|
+
// Native normalized 'max' is model-aware (currently GPT-5.6 and GPT-6 families). Claude's established xhigh mapping still emits provider-native 'max'.
|
|
448
448
|
});
|
|
449
449
|
|
|
450
450
|
// Access thinking and text blocks
|
|
@@ -571,6 +571,10 @@ if (message.stopReason === 'error' || message.stopReason === 'aborted') {
|
|
|
571
571
|
}
|
|
572
572
|
```
|
|
573
573
|
|
|
574
|
+
### Context Overflow
|
|
575
|
+
|
|
576
|
+
Use `isContextOverflow(message, model.contextWindow)` to detect recognized provider context-limit errors or successful responses whose full input usage exceeds the configured window. The latter compares `usage.input + usage.cacheRead + usage.cacheWrite`; output tokens do not count toward that input-only check. A conservative registry window can be lower than the server's hard limit (for example, Copilot Opus 4.8 can accept requests above its configured 200K window). Detection does not raise the registry limit or modify the response.
|
|
577
|
+
|
|
574
578
|
### Aborting Requests
|
|
575
579
|
|
|
576
580
|
The abort signal allows you to cancel in-progress requests. Aborted requests have `stopReason === 'aborted'`:
|
|
@@ -1014,7 +1018,7 @@ const key = getEnvApiKey('openai'); // checks OPENAI_API_KEY
|
|
|
1014
1018
|
|
|
1015
1019
|
Several providers require OAuth authentication instead of static API keys:
|
|
1016
1020
|
|
|
1017
|
-
- **OpenAI Codex** (ChatGPT Plus/Pro subscription, access to GPT-5.x Codex models)
|
|
1021
|
+
- **OpenAI Codex** (ChatGPT Plus/Pro subscription, access to GPT-5.x and GPT-6 Codex models)
|
|
1018
1022
|
- **GitHub Copilot** (Copilot subscription)
|
|
1019
1023
|
- **Google Gemini CLI** (Gemini 2.0/2.5 via Google Cloud Code Assist; free tier or paid subscription)
|
|
1020
1024
|
- **Antigravity** (Free Gemini 3, Claude, GPT-OSS via Google Cloud)
|
|
@@ -1146,7 +1150,7 @@ const response = await complete(model, {
|
|
|
1146
1150
|
|
|
1147
1151
|
### Provider Notes
|
|
1148
1152
|
|
|
1149
|
-
**OpenAI Codex**: Requires a ChatGPT Plus or Pro subscription. Provides access to GPT-5.x Codex models with extended context windows and reasoning capabilities. The library automatically handles session-based prompt caching when `sessionId` is provided in stream options. You can set `transport` in stream options to `"sse"`, `"websocket"`, or `"auto"` for Codex Responses transport selection. When using WebSocket with a `sessionId`, connections are reused per session and expire after 5 minutes of inactivity.
|
|
1153
|
+
**OpenAI Codex**: Requires a ChatGPT Plus or Pro subscription. Provides access to GPT-5.x and GPT-6 Codex models with extended context windows and reasoning capabilities. The library automatically handles session-based prompt caching when `sessionId` is provided in stream options. You can set `transport` in stream options to `"sse"`, `"websocket"`, or `"auto"` for Codex Responses transport selection. When using WebSocket with a `sessionId`, connections are reused per session and expire after 5 minutes of inactivity.
|
|
1150
1154
|
|
|
1151
1155
|
**Azure OpenAI (Responses)**: Uses the Responses API only. Set `AZURE_OPENAI_API_KEY` and either `AZURE_OPENAI_BASE_URL` or `AZURE_OPENAI_RESOURCE_NAME`. Use `AZURE_OPENAI_API_VERSION` (defaults to `v1`) to override the API version if needed. Deployment names are treated as model IDs by default, override with `azureDeploymentName` or `AZURE_OPENAI_DEPLOYMENT_NAME_MAP` using comma-separated `model-id=deployment` pairs (for example `gpt-4o-mini=my-deployment,gpt-4o=prod`). Legacy deployment-based URLs are intentionally unsupported.
|
|
1152
1156
|
|
package/dist/models.d.ts
CHANGED
|
@@ -51,6 +51,7 @@ export declare function isQwen38OrLater(modelId: string): boolean;
|
|
|
51
51
|
*
|
|
52
52
|
* Supported today:
|
|
53
53
|
* - GPT-5.6 model families (Sol, Terra, Luna, and the alias)
|
|
54
|
+
* - GPT-6 model families (Astra and future variants)
|
|
54
55
|
*/
|
|
55
56
|
export declare function supportsMax<TApi extends Api>(model: Model<TApi>): boolean;
|
|
56
57
|
/**
|
|
@@ -58,6 +59,7 @@ export declare function supportsMax<TApi extends Api>(model: Model<TApi>): boole
|
|
|
58
59
|
*
|
|
59
60
|
* Supported today:
|
|
60
61
|
* - GPT-5.2 through GPT-5.6 model families
|
|
62
|
+
* - GPT-6 model families (Astra and future variants)
|
|
61
63
|
* - Claude Opus 4.6–4.x and Claude 5 model families
|
|
62
64
|
* - Kimi Code K3 (xhigh maps to its advertised "max" effort)
|
|
63
65
|
* - Qwen 3.8+ model families (xhigh is their top native effort tier)
|
package/dist/models.d.ts.map
CHANGED
|
@@ -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;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAGhD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CA8BnF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CA4B7F;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;AAoCD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIxD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAGzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAmB3E;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAGtF;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\n/**\n * Check if a model ID looks like an alias (no date suffix).\n * Aliases are preferred over dated versions when fuzzy matching.\n *\n * IDs ending with `-latest` are treated as aliases.\n * IDs ending with a date pattern (`-YYYYMMDD`) are treated as dated versions.\n */\nexport function isModelAlias(id: string): boolean {\n\tif (id.endsWith(\"-latest\")) return true;\n\treturn !/-\\d{8}$/.test(id);\n}\n\n/**\n * Find a model by fuzzy matching against the provider's registered models.\n *\n * Resolution order:\n * 1. Exact match by provider + model ID (via registry Map.get)\n * 2. Case-insensitive substring match against model ID and display name\n * 3. Among matches, prefer aliases (non-dated IDs) over dated versions\n * 4. Among ties, pick the lexicographically highest (latest) ID\n *\n * This is the same matching logic used by the CLI, subagent model resolution,\n * and interactive mode — centralised here so tests can exercise the real path.\n *\n * @example\n * findModel(\"anthropic\", \"sonnet\") // → latest claude-sonnet alias\n * findModel(\"anthropic\", \"haiku\") // → latest claude-haiku alias\n * findModel(\"openai\", \"gpt-5\") // → latest gpt-5 alias\n */\nexport function findModel(provider: string, pattern: string): Model<Api> | undefined {\n\tconst providerModels = modelRegistry.get(provider);\n\tif (!providerModels) return undefined;\n\n\t// Try exact match first\n\tconst exact = providerModels.get(pattern);\n\tif (exact) return exact;\n\n\t// Substring match (case-insensitive)\n\tconst normalizedPattern = pattern.toLowerCase();\n\tconst matches = Array.from(providerModels.values()).filter(\n\t\t(m) => m.id.toLowerCase().includes(normalizedPattern) || m.name?.toLowerCase().includes(normalizedPattern),\n\t);\n\n\tif (matches.length === 0) return undefined;\n\tif (matches.length === 1) return matches[0];\n\n\t// Multiple matches — separate into aliases and dated versions\n\tconst aliases = matches.filter((m) => isModelAlias(m.id));\n\tconst datedVersions = matches.filter((m) => !isModelAlias(m.id));\n\n\tif (aliases.length > 0) {\n\t\t// Prefer alias — if multiple, pick the lexicographically highest\n\t\taliases.sort((a, b) => b.id.localeCompare(a.id));\n\t\treturn aliases[0];\n\t}\n\n\t// All dated — prefer the latest\n\tdatedVersions.sort((a, b) => b.id.localeCompare(a.id));\n\treturn datedVersions[0];\n}\n\n/**\n * Find a model by fuzzy matching against a flat array of models.\n * Same algorithm as findModel() but operates on an arbitrary model list\n * instead of the built-in registry.\n *\n * Used by model-resolver.ts and other code that manages its own model lists.\n */\nexport function findModelInList(pattern: string, models: Model<Api>[]): Model<Api> | undefined {\n\tif (models.length === 0) return undefined;\n\n\tconst normalizedPattern = pattern.toLowerCase();\n\n\t// Exact ID match (case-insensitive)\n\tconst exactById = models.find((m) => m.id.toLowerCase() === normalizedPattern);\n\tif (exactById) return exactById;\n\n\t// Substring match (case-insensitive)\n\tconst matches = models.filter(\n\t\t(m) => m.id.toLowerCase().includes(normalizedPattern) || m.name?.toLowerCase().includes(normalizedPattern),\n\t);\n\n\tif (matches.length === 0) return undefined;\n\tif (matches.length === 1) return matches[0];\n\n\t// Multiple matches — separate into aliases and dated versions\n\tconst aliases = matches.filter((m) => isModelAlias(m.id));\n\tconst datedVersions = matches.filter((m) => !isModelAlias(m.id));\n\n\tif (aliases.length > 0) {\n\t\taliases.sort((a, b) => b.id.localeCompare(a.id));\n\t\treturn aliases[0];\n\t}\n\n\tdatedVersions.sort((a, b) => b.id.localeCompare(a.id));\n\treturn datedVersions[0];\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\ninterface ClaudeFamilyVersion {\n\tfamily: \"opus\" | \"sonnet\";\n\tmajor: number;\n\tminor?: number;\n}\n\n/** Parse Claude family versions without mistaking long date suffixes for versions. */\nfunction claudeFamilyVersion(modelId: string): ClaudeFamilyVersion | undefined {\n\tconst match = modelId.match(/(opus|sonnet)-(\\d{1,2})(?:[.-](\\d{1,2}))?(?!\\d)/);\n\tif (!match) return undefined;\n\treturn {\n\t\tfamily: match[1] as ClaudeFamilyVersion[\"family\"],\n\t\tmajor: Number.parseInt(match[2], 10),\n\t\tminor: match[3] === undefined ? undefined : Number.parseInt(match[3], 10),\n\t};\n}\n\n/**\n * Parse Qwen family versions without mistaking parameter counts for minor versions.\n * Only a dot separates major from minor (qwen3.8-27b, Qwen-3.8); a hyphen after the\n * major version introduces the parameter size (qwen3-32b → 3.0, not 3.32). A capture\n * directly followed by a `b`-suffixed size token is a parameter count, not a version\n * (qwen-32b, Qwen-7B-Chat, deepseek-r1-distill-qwen-32b), and Qwen majors never reach\n * two digits, so only a single digit is accepted.\n */\nfunction qwenFamilyVersion(modelId: string): { major: number; minor: number } | undefined {\n\tconst match = modelId.match(/\\bqwen[\\s_-]*v?(\\d)(?:\\.(\\d+))?(?![\\d.]*b\\b)/i);\n\tif (!match) return undefined;\n\treturn {\n\t\tmajor: Number.parseInt(match[1], 10),\n\t\tminor: match[2] === undefined ? 0 : Number.parseInt(match[2], 10),\n\t};\n}\n\n/**\n * Check whether a model id belongs to Qwen 3.8 or a later Qwen generation — the first\n * Qwen family with graded `reasoning_effort` tiers (low/medium/xhigh, default xhigh).\n */\nexport function isQwen38OrLater(modelId: string): boolean {\n\tconst qwen = qwenFamilyVersion(modelId);\n\tif (!qwen) return false;\n\treturn qwen.major > 3 || (qwen.major === 3 && qwen.minor >= 8);\n}\n\n/**\n * Check if a model supports the native `max` reasoning tier.\n *\n * Supported today:\n * - GPT-5.6 model families (Sol, Terra, Luna, and the alias)\n */\nexport function supportsMax<TApi extends Api>(model: Model<TApi>): boolean {\n\tif (/(?:^|\\/)gpt-5\\.6(?:$|[-.])/.test(model.id.toLowerCase())) return true;\n\treturn false;\n}\n\n/**\n * Check if a model supports xhigh thinking level.\n *\n * Supported today:\n * - GPT-5.2 through GPT-5.6 model families\n * - Claude Opus 4.6–4.x and Claude 5 model families\n * - Kimi Code K3 (xhigh maps to its advertised \"max\" effort)\n * - Qwen 3.8+ model families (xhigh is their top native effort tier)\n */\nexport function supportsXhigh<TApi extends Api>(model: Model<TApi>): boolean {\n\tif (model.provider === \"kimi-coding-oauth\" && model.id === \"k3\") return true;\n\tif (isQwen38OrLater(model.id)) return true;\n\tif (\n\t\tmodel.id.includes(\"gpt-5.2\") ||\n\t\tmodel.id.includes(\"gpt-5.3\") ||\n\t\tmodel.id.includes(\"gpt-5.4\") ||\n\t\tmodel.id.includes(\"gpt-5.5\") ||\n\t\tmodel.id.includes(\"gpt-5.6\")\n\t) {\n\t\treturn true;\n\t}\n\n\tconst claude = claudeFamilyVersion(model.id);\n\tif (!claude) return false;\n\tif (claude.family === \"opus\") {\n\t\treturn claude.major >= 5 || (claude.major === 4 && (claude.minor ?? 0) >= 6);\n\t}\n\treturn claude.major >= 5;\n}\n\n/**\n * Check if a model uses adaptive thinking (Opus/Sonnet 4.6–4.x and Claude 5\n * families), where the `thinkingDisplay` option is honored. Mirrors the\n * per-provider internal checks.\n */\nexport function supportsAdaptiveThinking<TApi extends Api>(model: Model<TApi>): boolean {\n\tconst claude = claudeFamilyVersion(model.id);\n\treturn claude != null && (claude.major >= 5 || (claude.major === 4 && (claude.minor ?? 0) >= 6));\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;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAGhD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CA8BnF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CA4B7F;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;AAoCD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIxD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAKzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAoB3E;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAGtF;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\n/**\n * Check if a model ID looks like an alias (no date suffix).\n * Aliases are preferred over dated versions when fuzzy matching.\n *\n * IDs ending with `-latest` are treated as aliases.\n * IDs ending with a date pattern (`-YYYYMMDD`) are treated as dated versions.\n */\nexport function isModelAlias(id: string): boolean {\n\tif (id.endsWith(\"-latest\")) return true;\n\treturn !/-\\d{8}$/.test(id);\n}\n\n/**\n * Find a model by fuzzy matching against the provider's registered models.\n *\n * Resolution order:\n * 1. Exact match by provider + model ID (via registry Map.get)\n * 2. Case-insensitive substring match against model ID and display name\n * 3. Among matches, prefer aliases (non-dated IDs) over dated versions\n * 4. Among ties, pick the lexicographically highest (latest) ID\n *\n * This is the same matching logic used by the CLI, subagent model resolution,\n * and interactive mode — centralised here so tests can exercise the real path.\n *\n * @example\n * findModel(\"anthropic\", \"sonnet\") // → latest claude-sonnet alias\n * findModel(\"anthropic\", \"haiku\") // → latest claude-haiku alias\n * findModel(\"openai\", \"gpt-5\") // → latest gpt-5 alias\n */\nexport function findModel(provider: string, pattern: string): Model<Api> | undefined {\n\tconst providerModels = modelRegistry.get(provider);\n\tif (!providerModels) return undefined;\n\n\t// Try exact match first\n\tconst exact = providerModels.get(pattern);\n\tif (exact) return exact;\n\n\t// Substring match (case-insensitive)\n\tconst normalizedPattern = pattern.toLowerCase();\n\tconst matches = Array.from(providerModels.values()).filter(\n\t\t(m) => m.id.toLowerCase().includes(normalizedPattern) || m.name?.toLowerCase().includes(normalizedPattern),\n\t);\n\n\tif (matches.length === 0) return undefined;\n\tif (matches.length === 1) return matches[0];\n\n\t// Multiple matches — separate into aliases and dated versions\n\tconst aliases = matches.filter((m) => isModelAlias(m.id));\n\tconst datedVersions = matches.filter((m) => !isModelAlias(m.id));\n\n\tif (aliases.length > 0) {\n\t\t// Prefer alias — if multiple, pick the lexicographically highest\n\t\taliases.sort((a, b) => b.id.localeCompare(a.id));\n\t\treturn aliases[0];\n\t}\n\n\t// All dated — prefer the latest\n\tdatedVersions.sort((a, b) => b.id.localeCompare(a.id));\n\treturn datedVersions[0];\n}\n\n/**\n * Find a model by fuzzy matching against a flat array of models.\n * Same algorithm as findModel() but operates on an arbitrary model list\n * instead of the built-in registry.\n *\n * Used by model-resolver.ts and other code that manages its own model lists.\n */\nexport function findModelInList(pattern: string, models: Model<Api>[]): Model<Api> | undefined {\n\tif (models.length === 0) return undefined;\n\n\tconst normalizedPattern = pattern.toLowerCase();\n\n\t// Exact ID match (case-insensitive)\n\tconst exactById = models.find((m) => m.id.toLowerCase() === normalizedPattern);\n\tif (exactById) return exactById;\n\n\t// Substring match (case-insensitive)\n\tconst matches = models.filter(\n\t\t(m) => m.id.toLowerCase().includes(normalizedPattern) || m.name?.toLowerCase().includes(normalizedPattern),\n\t);\n\n\tif (matches.length === 0) return undefined;\n\tif (matches.length === 1) return matches[0];\n\n\t// Multiple matches — separate into aliases and dated versions\n\tconst aliases = matches.filter((m) => isModelAlias(m.id));\n\tconst datedVersions = matches.filter((m) => !isModelAlias(m.id));\n\n\tif (aliases.length > 0) {\n\t\taliases.sort((a, b) => b.id.localeCompare(a.id));\n\t\treturn aliases[0];\n\t}\n\n\tdatedVersions.sort((a, b) => b.id.localeCompare(a.id));\n\treturn datedVersions[0];\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\ninterface ClaudeFamilyVersion {\n\tfamily: \"opus\" | \"sonnet\";\n\tmajor: number;\n\tminor?: number;\n}\n\n/** Parse Claude family versions without mistaking long date suffixes for versions. */\nfunction claudeFamilyVersion(modelId: string): ClaudeFamilyVersion | undefined {\n\tconst match = modelId.match(/(opus|sonnet)-(\\d{1,2})(?:[.-](\\d{1,2}))?(?!\\d)/);\n\tif (!match) return undefined;\n\treturn {\n\t\tfamily: match[1] as ClaudeFamilyVersion[\"family\"],\n\t\tmajor: Number.parseInt(match[2], 10),\n\t\tminor: match[3] === undefined ? undefined : Number.parseInt(match[3], 10),\n\t};\n}\n\n/**\n * Parse Qwen family versions without mistaking parameter counts for minor versions.\n * Only a dot separates major from minor (qwen3.8-27b, Qwen-3.8); a hyphen after the\n * major version introduces the parameter size (qwen3-32b → 3.0, not 3.32). A capture\n * directly followed by a `b`-suffixed size token is a parameter count, not a version\n * (qwen-32b, Qwen-7B-Chat, deepseek-r1-distill-qwen-32b), and Qwen majors never reach\n * two digits, so only a single digit is accepted.\n */\nfunction qwenFamilyVersion(modelId: string): { major: number; minor: number } | undefined {\n\tconst match = modelId.match(/\\bqwen[\\s_-]*v?(\\d)(?:\\.(\\d+))?(?![\\d.]*b\\b)/i);\n\tif (!match) return undefined;\n\treturn {\n\t\tmajor: Number.parseInt(match[1], 10),\n\t\tminor: match[2] === undefined ? 0 : Number.parseInt(match[2], 10),\n\t};\n}\n\n/**\n * Check whether a model id belongs to Qwen 3.8 or a later Qwen generation — the first\n * Qwen family with graded `reasoning_effort` tiers (low/medium/xhigh, default xhigh).\n */\nexport function isQwen38OrLater(modelId: string): boolean {\n\tconst qwen = qwenFamilyVersion(modelId);\n\tif (!qwen) return false;\n\treturn qwen.major > 3 || (qwen.major === 3 && qwen.minor >= 8);\n}\n\n/**\n * Check if a model supports the native `max` reasoning tier.\n *\n * Supported today:\n * - GPT-5.6 model families (Sol, Terra, Luna, and the alias)\n * - GPT-6 model families (Astra and future variants)\n */\nexport function supportsMax<TApi extends Api>(model: Model<TApi>): boolean {\n\tconst id = model.id.toLowerCase();\n\t// Anchored to the id start or a gateway \"/\" prefix so unrelated ids\n\t// (e.g. \"gpt-60\") do not match.\n\treturn /(?:^|\\/)gpt-5\\.6(?:$|[-.])/.test(id) || /(?:^|\\/)gpt-6(?:$|[-.])/.test(id);\n}\n\n/**\n * Check if a model supports xhigh thinking level.\n *\n * Supported today:\n * - GPT-5.2 through GPT-5.6 model families\n * - GPT-6 model families (Astra and future variants)\n * - Claude Opus 4.6–4.x and Claude 5 model families\n * - Kimi Code K3 (xhigh maps to its advertised \"max\" effort)\n * - Qwen 3.8+ model families (xhigh is their top native effort tier)\n */\nexport function supportsXhigh<TApi extends Api>(model: Model<TApi>): boolean {\n\tif (model.provider === \"kimi-coding-oauth\" && model.id === \"k3\") return true;\n\tif (isQwen38OrLater(model.id)) return true;\n\tif (\n\t\tmodel.id.includes(\"gpt-5.2\") ||\n\t\tmodel.id.includes(\"gpt-5.3\") ||\n\t\tmodel.id.includes(\"gpt-5.4\") ||\n\t\tmodel.id.includes(\"gpt-5.5\") ||\n\t\tmodel.id.includes(\"gpt-5.6\") ||\n\t\tmodel.id.includes(\"gpt-6\")\n\t) {\n\t\treturn true;\n\t}\n\n\tconst claude = claudeFamilyVersion(model.id);\n\tif (!claude) return false;\n\tif (claude.family === \"opus\") {\n\t\treturn claude.major >= 5 || (claude.major === 4 && (claude.minor ?? 0) >= 6);\n\t}\n\treturn claude.major >= 5;\n}\n\n/**\n * Check if a model uses adaptive thinking (Opus/Sonnet 4.6–4.x and Claude 5\n * families), where the `thinkingDisplay` option is honored. Mirrors the\n * per-provider internal checks.\n */\nexport function supportsAdaptiveThinking<TApi extends Api>(model: Model<TApi>): boolean {\n\tconst claude = claudeFamilyVersion(model.id);\n\treturn claude != null && (claude.major >= 5 || (claude.major === 4 && (claude.minor ?? 0) >= 6));\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"]}
|
|
@@ -850,6 +850,23 @@ export declare const MODELS: {
|
|
|
850
850
|
contextWindow: number;
|
|
851
851
|
maxTokens: number;
|
|
852
852
|
};
|
|
853
|
+
readonly "global.xai.grok-4.6": {
|
|
854
|
+
id: string;
|
|
855
|
+
name: string;
|
|
856
|
+
api: "bedrock-converse-stream";
|
|
857
|
+
provider: string;
|
|
858
|
+
baseUrl: string;
|
|
859
|
+
reasoning: true;
|
|
860
|
+
input: ("image" | "text")[];
|
|
861
|
+
cost: {
|
|
862
|
+
input: number;
|
|
863
|
+
output: number;
|
|
864
|
+
cacheRead: number;
|
|
865
|
+
cacheWrite: number;
|
|
866
|
+
};
|
|
867
|
+
contextWindow: number;
|
|
868
|
+
maxTokens: number;
|
|
869
|
+
};
|
|
853
870
|
readonly "google.gemma-3-27b-it": {
|
|
854
871
|
id: string;
|
|
855
872
|
name: string;
|
|
@@ -1955,6 +1972,23 @@ export declare const MODELS: {
|
|
|
1955
1972
|
contextWindow: number;
|
|
1956
1973
|
maxTokens: number;
|
|
1957
1974
|
};
|
|
1975
|
+
readonly "us.xai.grok-4.6": {
|
|
1976
|
+
id: string;
|
|
1977
|
+
name: string;
|
|
1978
|
+
api: "bedrock-converse-stream";
|
|
1979
|
+
provider: string;
|
|
1980
|
+
baseUrl: string;
|
|
1981
|
+
reasoning: true;
|
|
1982
|
+
input: ("image" | "text")[];
|
|
1983
|
+
cost: {
|
|
1984
|
+
input: number;
|
|
1985
|
+
output: number;
|
|
1986
|
+
cacheRead: number;
|
|
1987
|
+
cacheWrite: number;
|
|
1988
|
+
};
|
|
1989
|
+
contextWindow: number;
|
|
1990
|
+
maxTokens: number;
|
|
1991
|
+
};
|
|
1958
1992
|
readonly "writer.palmyra-x4-v1:0": {
|
|
1959
1993
|
id: string;
|
|
1960
1994
|
name: string;
|
|
@@ -3032,14 +3066,14 @@ export declare const MODELS: {
|
|
|
3032
3066
|
};
|
|
3033
3067
|
};
|
|
3034
3068
|
readonly cerebras: {
|
|
3035
|
-
readonly "
|
|
3069
|
+
readonly "gpt-oss-120b": {
|
|
3036
3070
|
id: string;
|
|
3037
3071
|
name: string;
|
|
3038
3072
|
api: "openai-completions";
|
|
3039
3073
|
provider: string;
|
|
3040
3074
|
baseUrl: string;
|
|
3041
3075
|
reasoning: true;
|
|
3042
|
-
input:
|
|
3076
|
+
input: "text"[];
|
|
3043
3077
|
cost: {
|
|
3044
3078
|
input: number;
|
|
3045
3079
|
output: number;
|
|
@@ -3049,14 +3083,14 @@ export declare const MODELS: {
|
|
|
3049
3083
|
contextWindow: number;
|
|
3050
3084
|
maxTokens: number;
|
|
3051
3085
|
};
|
|
3052
|
-
readonly "
|
|
3086
|
+
readonly "qwen-3.8-27b": {
|
|
3053
3087
|
id: string;
|
|
3054
3088
|
name: string;
|
|
3055
3089
|
api: "openai-completions";
|
|
3056
3090
|
provider: string;
|
|
3057
3091
|
baseUrl: string;
|
|
3058
3092
|
reasoning: true;
|
|
3059
|
-
input: "text"[];
|
|
3093
|
+
input: ("image" | "text")[];
|
|
3060
3094
|
cost: {
|
|
3061
3095
|
input: number;
|
|
3062
3096
|
output: number;
|
|
@@ -3594,7 +3628,7 @@ export declare const MODELS: {
|
|
|
3594
3628
|
readonly "gpt-6-astra": {
|
|
3595
3629
|
id: string;
|
|
3596
3630
|
name: string;
|
|
3597
|
-
api: "openai-
|
|
3631
|
+
api: "openai-responses";
|
|
3598
3632
|
provider: string;
|
|
3599
3633
|
baseUrl: string;
|
|
3600
3634
|
headers: {
|
|
@@ -3603,11 +3637,6 @@ export declare const MODELS: {
|
|
|
3603
3637
|
"Editor-Plugin-Version": string;
|
|
3604
3638
|
"Copilot-Integration-Id": string;
|
|
3605
3639
|
};
|
|
3606
|
-
compat: {
|
|
3607
|
-
supportsStore: false;
|
|
3608
|
-
supportsDeveloperRole: false;
|
|
3609
|
-
supportsReasoningEffort: false;
|
|
3610
|
-
};
|
|
3611
3640
|
reasoning: true;
|
|
3612
3641
|
input: ("image" | "text")[];
|
|
3613
3642
|
cost: {
|
|
@@ -7680,92 +7709,7 @@ export declare const MODELS: {
|
|
|
7680
7709
|
};
|
|
7681
7710
|
};
|
|
7682
7711
|
readonly "openai-codex": {
|
|
7683
|
-
readonly "gpt-5.
|
|
7684
|
-
id: string;
|
|
7685
|
-
name: string;
|
|
7686
|
-
api: "openai-codex-responses";
|
|
7687
|
-
provider: string;
|
|
7688
|
-
baseUrl: string;
|
|
7689
|
-
reasoning: true;
|
|
7690
|
-
input: ("image" | "text")[];
|
|
7691
|
-
cost: {
|
|
7692
|
-
input: number;
|
|
7693
|
-
output: number;
|
|
7694
|
-
cacheRead: number;
|
|
7695
|
-
cacheWrite: number;
|
|
7696
|
-
};
|
|
7697
|
-
contextWindow: number;
|
|
7698
|
-
maxTokens: number;
|
|
7699
|
-
};
|
|
7700
|
-
readonly "gpt-5.1-codex-max": {
|
|
7701
|
-
id: string;
|
|
7702
|
-
name: string;
|
|
7703
|
-
api: "openai-codex-responses";
|
|
7704
|
-
provider: string;
|
|
7705
|
-
baseUrl: string;
|
|
7706
|
-
reasoning: true;
|
|
7707
|
-
input: ("image" | "text")[];
|
|
7708
|
-
cost: {
|
|
7709
|
-
input: number;
|
|
7710
|
-
output: number;
|
|
7711
|
-
cacheRead: number;
|
|
7712
|
-
cacheWrite: number;
|
|
7713
|
-
};
|
|
7714
|
-
contextWindow: number;
|
|
7715
|
-
maxTokens: number;
|
|
7716
|
-
};
|
|
7717
|
-
readonly "gpt-5.1-codex-mini": {
|
|
7718
|
-
id: string;
|
|
7719
|
-
name: string;
|
|
7720
|
-
api: "openai-codex-responses";
|
|
7721
|
-
provider: string;
|
|
7722
|
-
baseUrl: string;
|
|
7723
|
-
reasoning: true;
|
|
7724
|
-
input: ("image" | "text")[];
|
|
7725
|
-
cost: {
|
|
7726
|
-
input: number;
|
|
7727
|
-
output: number;
|
|
7728
|
-
cacheRead: number;
|
|
7729
|
-
cacheWrite: number;
|
|
7730
|
-
};
|
|
7731
|
-
contextWindow: number;
|
|
7732
|
-
maxTokens: number;
|
|
7733
|
-
};
|
|
7734
|
-
readonly "gpt-5.3-codex": {
|
|
7735
|
-
id: string;
|
|
7736
|
-
name: string;
|
|
7737
|
-
api: "openai-codex-responses";
|
|
7738
|
-
provider: string;
|
|
7739
|
-
baseUrl: string;
|
|
7740
|
-
reasoning: true;
|
|
7741
|
-
input: ("image" | "text")[];
|
|
7742
|
-
cost: {
|
|
7743
|
-
input: number;
|
|
7744
|
-
output: number;
|
|
7745
|
-
cacheRead: number;
|
|
7746
|
-
cacheWrite: number;
|
|
7747
|
-
};
|
|
7748
|
-
contextWindow: number;
|
|
7749
|
-
maxTokens: number;
|
|
7750
|
-
};
|
|
7751
|
-
readonly "gpt-5.3-codex-spark": {
|
|
7752
|
-
id: string;
|
|
7753
|
-
name: string;
|
|
7754
|
-
api: "openai-codex-responses";
|
|
7755
|
-
provider: string;
|
|
7756
|
-
baseUrl: string;
|
|
7757
|
-
reasoning: true;
|
|
7758
|
-
input: "text"[];
|
|
7759
|
-
cost: {
|
|
7760
|
-
input: number;
|
|
7761
|
-
output: number;
|
|
7762
|
-
cacheRead: number;
|
|
7763
|
-
cacheWrite: number;
|
|
7764
|
-
};
|
|
7765
|
-
contextWindow: number;
|
|
7766
|
-
maxTokens: number;
|
|
7767
|
-
};
|
|
7768
|
-
readonly "gpt-5.4": {
|
|
7712
|
+
readonly "gpt-5.4-mini": {
|
|
7769
7713
|
id: string;
|
|
7770
7714
|
name: string;
|
|
7771
7715
|
api: "openai-codex-responses";
|
|
@@ -7782,7 +7726,7 @@ export declare const MODELS: {
|
|
|
7782
7726
|
contextWindow: number;
|
|
7783
7727
|
maxTokens: number;
|
|
7784
7728
|
};
|
|
7785
|
-
readonly "gpt-5.
|
|
7729
|
+
readonly "gpt-5.5": {
|
|
7786
7730
|
id: string;
|
|
7787
7731
|
name: string;
|
|
7788
7732
|
api: "openai-codex-responses";
|
|
@@ -7799,7 +7743,7 @@ export declare const MODELS: {
|
|
|
7799
7743
|
contextWindow: number;
|
|
7800
7744
|
maxTokens: number;
|
|
7801
7745
|
};
|
|
7802
|
-
readonly "gpt-5.
|
|
7746
|
+
readonly "gpt-5.6-luna": {
|
|
7803
7747
|
id: string;
|
|
7804
7748
|
name: string;
|
|
7805
7749
|
api: "openai-codex-responses";
|
|
@@ -7816,7 +7760,7 @@ export declare const MODELS: {
|
|
|
7816
7760
|
contextWindow: number;
|
|
7817
7761
|
maxTokens: number;
|
|
7818
7762
|
};
|
|
7819
|
-
readonly "gpt-5.6-
|
|
7763
|
+
readonly "gpt-5.6-sol": {
|
|
7820
7764
|
id: string;
|
|
7821
7765
|
name: string;
|
|
7822
7766
|
api: "openai-codex-responses";
|
|
@@ -7833,7 +7777,7 @@ export declare const MODELS: {
|
|
|
7833
7777
|
contextWindow: number;
|
|
7834
7778
|
maxTokens: number;
|
|
7835
7779
|
};
|
|
7836
|
-
readonly "gpt-5.6-
|
|
7780
|
+
readonly "gpt-5.6-terra": {
|
|
7837
7781
|
id: string;
|
|
7838
7782
|
name: string;
|
|
7839
7783
|
api: "openai-codex-responses";
|
|
@@ -7850,7 +7794,7 @@ export declare const MODELS: {
|
|
|
7850
7794
|
contextWindow: number;
|
|
7851
7795
|
maxTokens: number;
|
|
7852
7796
|
};
|
|
7853
|
-
readonly "gpt-
|
|
7797
|
+
readonly "gpt-6-astra": {
|
|
7854
7798
|
id: string;
|
|
7855
7799
|
name: string;
|
|
7856
7800
|
api: "openai-codex-responses";
|
|
@@ -11596,23 +11540,6 @@ export declare const MODELS: {
|
|
|
11596
11540
|
contextWindow: number;
|
|
11597
11541
|
maxTokens: number;
|
|
11598
11542
|
};
|
|
11599
|
-
readonly "minimax/minimax-m2.7:free": {
|
|
11600
|
-
id: string;
|
|
11601
|
-
name: string;
|
|
11602
|
-
api: "openai-completions";
|
|
11603
|
-
provider: string;
|
|
11604
|
-
baseUrl: string;
|
|
11605
|
-
reasoning: true;
|
|
11606
|
-
input: "text"[];
|
|
11607
|
-
cost: {
|
|
11608
|
-
input: number;
|
|
11609
|
-
output: number;
|
|
11610
|
-
cacheRead: number;
|
|
11611
|
-
cacheWrite: number;
|
|
11612
|
-
};
|
|
11613
|
-
contextWindow: number;
|
|
11614
|
-
maxTokens: number;
|
|
11615
|
-
};
|
|
11616
11543
|
readonly "minimax/minimax-m3": {
|
|
11617
11544
|
id: string;
|
|
11618
11545
|
name: string;
|
|
@@ -11647,23 +11574,6 @@ export declare const MODELS: {
|
|
|
11647
11574
|
contextWindow: number;
|
|
11648
11575
|
maxTokens: number;
|
|
11649
11576
|
};
|
|
11650
|
-
readonly "minimax/minimax-m3:free": {
|
|
11651
|
-
id: string;
|
|
11652
|
-
name: string;
|
|
11653
|
-
api: "openai-completions";
|
|
11654
|
-
provider: string;
|
|
11655
|
-
baseUrl: string;
|
|
11656
|
-
reasoning: true;
|
|
11657
|
-
input: ("image" | "text")[];
|
|
11658
|
-
cost: {
|
|
11659
|
-
input: number;
|
|
11660
|
-
output: number;
|
|
11661
|
-
cacheRead: number;
|
|
11662
|
-
cacheWrite: number;
|
|
11663
|
-
};
|
|
11664
|
-
contextWindow: number;
|
|
11665
|
-
maxTokens: number;
|
|
11666
|
-
};
|
|
11667
11577
|
readonly "mistralai/codestral-2508": {
|
|
11668
11578
|
id: string;
|
|
11669
11579
|
name: string;
|
|
@@ -12106,40 +12016,6 @@ export declare const MODELS: {
|
|
|
12106
12016
|
contextWindow: number;
|
|
12107
12017
|
maxTokens: number;
|
|
12108
12018
|
};
|
|
12109
|
-
readonly "nex-agi/nex-n2-mini": {
|
|
12110
|
-
id: string;
|
|
12111
|
-
name: string;
|
|
12112
|
-
api: "openai-completions";
|
|
12113
|
-
provider: string;
|
|
12114
|
-
baseUrl: string;
|
|
12115
|
-
reasoning: true;
|
|
12116
|
-
input: ("image" | "text")[];
|
|
12117
|
-
cost: {
|
|
12118
|
-
input: number;
|
|
12119
|
-
output: number;
|
|
12120
|
-
cacheRead: number;
|
|
12121
|
-
cacheWrite: number;
|
|
12122
|
-
};
|
|
12123
|
-
contextWindow: number;
|
|
12124
|
-
maxTokens: number;
|
|
12125
|
-
};
|
|
12126
|
-
readonly "nex-agi/nex-n2-pro": {
|
|
12127
|
-
id: string;
|
|
12128
|
-
name: string;
|
|
12129
|
-
api: "openai-completions";
|
|
12130
|
-
provider: string;
|
|
12131
|
-
baseUrl: string;
|
|
12132
|
-
reasoning: true;
|
|
12133
|
-
input: ("image" | "text")[];
|
|
12134
|
-
cost: {
|
|
12135
|
-
input: number;
|
|
12136
|
-
output: number;
|
|
12137
|
-
cacheRead: number;
|
|
12138
|
-
cacheWrite: number;
|
|
12139
|
-
};
|
|
12140
|
-
contextWindow: number;
|
|
12141
|
-
maxTokens: number;
|
|
12142
|
-
};
|
|
12143
12019
|
readonly "nvidia/nemotron-3-nano-30b-a3b": {
|
|
12144
12020
|
id: string;
|
|
12145
12021
|
name: string;
|
|
@@ -15387,23 +15263,6 @@ export declare const MODELS: {
|
|
|
15387
15263
|
contextWindow: number;
|
|
15388
15264
|
maxTokens: number;
|
|
15389
15265
|
};
|
|
15390
|
-
readonly "z-ai/glm-5.2:free": {
|
|
15391
|
-
id: string;
|
|
15392
|
-
name: string;
|
|
15393
|
-
api: "openai-completions";
|
|
15394
|
-
provider: string;
|
|
15395
|
-
baseUrl: string;
|
|
15396
|
-
reasoning: true;
|
|
15397
|
-
input: "text"[];
|
|
15398
|
-
cost: {
|
|
15399
|
-
input: number;
|
|
15400
|
-
output: number;
|
|
15401
|
-
cacheRead: number;
|
|
15402
|
-
cacheWrite: number;
|
|
15403
|
-
};
|
|
15404
|
-
contextWindow: number;
|
|
15405
|
-
maxTokens: number;
|
|
15406
|
-
};
|
|
15407
15266
|
readonly "z-ai/glm-5.3": {
|
|
15408
15267
|
id: string;
|
|
15409
15268
|
name: string;
|
|
@@ -17514,23 +17373,6 @@ export declare const MODELS: {
|
|
|
17514
17373
|
contextWindow: number;
|
|
17515
17374
|
maxTokens: number;
|
|
17516
17375
|
};
|
|
17517
|
-
readonly "minimax/minimax-m2.7-free": {
|
|
17518
|
-
id: string;
|
|
17519
|
-
name: string;
|
|
17520
|
-
api: "anthropic-messages";
|
|
17521
|
-
provider: string;
|
|
17522
|
-
baseUrl: string;
|
|
17523
|
-
reasoning: true;
|
|
17524
|
-
input: "text"[];
|
|
17525
|
-
cost: {
|
|
17526
|
-
input: number;
|
|
17527
|
-
output: number;
|
|
17528
|
-
cacheRead: number;
|
|
17529
|
-
cacheWrite: number;
|
|
17530
|
-
};
|
|
17531
|
-
contextWindow: number;
|
|
17532
|
-
maxTokens: number;
|
|
17533
|
-
};
|
|
17534
17376
|
readonly "minimax/minimax-m2.7-highspeed": {
|
|
17535
17377
|
id: string;
|
|
17536
17378
|
name: string;
|
|
@@ -17565,23 +17407,6 @@ export declare const MODELS: {
|
|
|
17565
17407
|
contextWindow: number;
|
|
17566
17408
|
maxTokens: number;
|
|
17567
17409
|
};
|
|
17568
|
-
readonly "minimax/minimax-m3-free": {
|
|
17569
|
-
id: string;
|
|
17570
|
-
name: string;
|
|
17571
|
-
api: "anthropic-messages";
|
|
17572
|
-
provider: string;
|
|
17573
|
-
baseUrl: string;
|
|
17574
|
-
reasoning: true;
|
|
17575
|
-
input: ("image" | "text")[];
|
|
17576
|
-
cost: {
|
|
17577
|
-
input: number;
|
|
17578
|
-
output: number;
|
|
17579
|
-
cacheRead: number;
|
|
17580
|
-
cacheWrite: number;
|
|
17581
|
-
};
|
|
17582
|
-
contextWindow: number;
|
|
17583
|
-
maxTokens: number;
|
|
17584
|
-
};
|
|
17585
17410
|
readonly "mistral/codestral": {
|
|
17586
17411
|
id: string;
|
|
17587
17412
|
name: string;
|