@dreb/ai 2.14.1 → 2.15.1

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.
@@ -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;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAe3E;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\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 * - Opus 4.6+ models (xhigh maps to adaptive effort \"max\" on Anthropic-compatible providers)\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 (\n\t\tmodel.id.includes(\"opus-4-6\") ||\n\t\tmodel.id.includes(\"opus-4.6\") ||\n\t\tmodel.id.includes(\"opus-4-7\") ||\n\t\tmodel.id.includes(\"opus-4.7\")\n\t) {\n\t\treturn true;\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;;;;;;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;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAoB3E;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\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 * - Opus 4.6+ models (xhigh maps to adaptive effort \"max\" on Anthropic-compatible providers)\n */\nexport function supportsXhigh<TApi extends Api>(model: Model<TApi>): boolean {\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) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\tmodel.id.includes(\"opus-4-6\") ||\n\t\tmodel.id.includes(\"opus-4.6\") ||\n\t\tmodel.id.includes(\"opus-4-7\") ||\n\t\tmodel.id.includes(\"opus-4.7\")\n\t) {\n\t\treturn true;\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"]}
@@ -3669,6 +3669,23 @@ export declare const MODELS: {
3669
3669
  contextWindow: number;
3670
3670
  maxTokens: number;
3671
3671
  };
3672
+ readonly "gemini-3.1-flash-lite": {
3673
+ id: string;
3674
+ name: string;
3675
+ api: "google-generative-ai";
3676
+ provider: string;
3677
+ baseUrl: string;
3678
+ reasoning: true;
3679
+ input: ("image" | "text")[];
3680
+ cost: {
3681
+ input: number;
3682
+ output: number;
3683
+ cacheRead: number;
3684
+ cacheWrite: number;
3685
+ };
3686
+ contextWindow: number;
3687
+ maxTokens: number;
3688
+ };
3672
3689
  readonly "gemini-3.1-flash-lite-preview": {
3673
3690
  id: string;
3674
3691
  name: string;
@@ -6432,7 +6449,7 @@ export declare const MODELS: {
6432
6449
  contextWindow: number;
6433
6450
  maxTokens: number;
6434
6451
  };
6435
- readonly "gpt-5.2": {
6452
+ readonly "gpt-5.3-codex": {
6436
6453
  id: string;
6437
6454
  name: string;
6438
6455
  api: "openai-codex-responses";
@@ -6449,14 +6466,14 @@ export declare const MODELS: {
6449
6466
  contextWindow: number;
6450
6467
  maxTokens: number;
6451
6468
  };
6452
- readonly "gpt-5.2-codex": {
6469
+ readonly "gpt-5.3-codex-spark": {
6453
6470
  id: string;
6454
6471
  name: string;
6455
6472
  api: "openai-codex-responses";
6456
6473
  provider: string;
6457
6474
  baseUrl: string;
6458
6475
  reasoning: true;
6459
- input: ("image" | "text")[];
6476
+ input: "text"[];
6460
6477
  cost: {
6461
6478
  input: number;
6462
6479
  output: number;
@@ -6466,7 +6483,7 @@ export declare const MODELS: {
6466
6483
  contextWindow: number;
6467
6484
  maxTokens: number;
6468
6485
  };
6469
- readonly "gpt-5.3-codex": {
6486
+ readonly "gpt-5.4": {
6470
6487
  id: string;
6471
6488
  name: string;
6472
6489
  api: "openai-codex-responses";
@@ -6483,24 +6500,7 @@ export declare const MODELS: {
6483
6500
  contextWindow: number;
6484
6501
  maxTokens: number;
6485
6502
  };
6486
- readonly "gpt-5.3-codex-spark": {
6487
- id: string;
6488
- name: string;
6489
- api: "openai-codex-responses";
6490
- provider: string;
6491
- baseUrl: string;
6492
- reasoning: true;
6493
- input: "text"[];
6494
- cost: {
6495
- input: number;
6496
- output: number;
6497
- cacheRead: number;
6498
- cacheWrite: number;
6499
- };
6500
- contextWindow: number;
6501
- maxTokens: number;
6502
- };
6503
- readonly "gpt-5.4": {
6503
+ readonly "gpt-5.4-mini": {
6504
6504
  id: string;
6505
6505
  name: string;
6506
6506
  api: "openai-codex-responses";
@@ -6517,7 +6517,7 @@ export declare const MODELS: {
6517
6517
  contextWindow: number;
6518
6518
  maxTokens: number;
6519
6519
  };
6520
- readonly "gpt-5.4-mini": {
6520
+ readonly "gpt-5.5": {
6521
6521
  id: string;
6522
6522
  name: string;
6523
6523
  api: "openai-codex-responses";
@@ -6539,7 +6539,7 @@ export declare const MODELS: {
6539
6539
  readonly "big-pickle": {
6540
6540
  id: string;
6541
6541
  name: string;
6542
- api: "anthropic-messages";
6542
+ api: "openai-completions";
6543
6543
  provider: string;
6544
6544
  baseUrl: string;
6545
6545
  reasoning: true;
@@ -7029,23 +7029,6 @@ export declare const MODELS: {
7029
7029
  contextWindow: number;
7030
7030
  maxTokens: number;
7031
7031
  };
7032
- readonly "hy3-preview-free": {
7033
- id: string;
7034
- name: string;
7035
- api: "openai-completions";
7036
- provider: string;
7037
- baseUrl: string;
7038
- reasoning: true;
7039
- input: "text"[];
7040
- cost: {
7041
- input: number;
7042
- output: number;
7043
- cacheRead: number;
7044
- cacheWrite: number;
7045
- };
7046
- contextWindow: number;
7047
- maxTokens: number;
7048
- };
7049
7032
  readonly "kimi-k2.5": {
7050
7033
  id: string;
7051
7034
  name: string;
@@ -7286,40 +7269,6 @@ export declare const MODELS: {
7286
7269
  contextWindow: number;
7287
7270
  maxTokens: number;
7288
7271
  };
7289
- readonly "mimo-v2-omni": {
7290
- id: string;
7291
- name: string;
7292
- api: "openai-completions";
7293
- provider: string;
7294
- baseUrl: string;
7295
- reasoning: true;
7296
- input: ("image" | "text")[];
7297
- cost: {
7298
- input: number;
7299
- output: number;
7300
- cacheRead: number;
7301
- cacheWrite: number;
7302
- };
7303
- contextWindow: number;
7304
- maxTokens: number;
7305
- };
7306
- readonly "mimo-v2-pro": {
7307
- id: string;
7308
- name: string;
7309
- api: "openai-completions";
7310
- provider: string;
7311
- baseUrl: string;
7312
- reasoning: true;
7313
- input: "text"[];
7314
- cost: {
7315
- input: number;
7316
- output: number;
7317
- cacheRead: number;
7318
- cacheWrite: number;
7319
- };
7320
- contextWindow: number;
7321
- maxTokens: number;
7322
- };
7323
7272
  readonly "mimo-v2.5": {
7324
7273
  id: string;
7325
7274
  name: string;
@@ -7458,23 +7407,6 @@ export declare const MODELS: {
7458
7407
  contextWindow: number;
7459
7408
  maxTokens: number;
7460
7409
  };
7461
- readonly "allenai/olmo-3.1-32b-instruct": {
7462
- id: string;
7463
- name: string;
7464
- api: "openai-completions";
7465
- provider: string;
7466
- baseUrl: string;
7467
- reasoning: false;
7468
- input: "text"[];
7469
- cost: {
7470
- input: number;
7471
- output: number;
7472
- cacheRead: number;
7473
- cacheWrite: number;
7474
- };
7475
- contextWindow: number;
7476
- maxTokens: number;
7477
- };
7478
7410
  readonly "amazon/nova-2-lite-v1": {
7479
7411
  id: string;
7480
7412
  name: string;
@@ -7883,6 +7815,23 @@ export declare const MODELS: {
7883
7815
  contextWindow: number;
7884
7816
  maxTokens: number;
7885
7817
  };
7818
+ readonly "baidu/cobuddy:free": {
7819
+ id: string;
7820
+ name: string;
7821
+ api: "openai-completions";
7822
+ provider: string;
7823
+ baseUrl: string;
7824
+ reasoning: true;
7825
+ input: "text"[];
7826
+ cost: {
7827
+ input: number;
7828
+ output: number;
7829
+ cacheRead: number;
7830
+ cacheWrite: number;
7831
+ };
7832
+ contextWindow: number;
7833
+ maxTokens: number;
7834
+ };
7886
7835
  readonly "baidu/ernie-4.5-21b-a3b": {
7887
7836
  id: string;
7888
7837
  name: string;
@@ -8359,6 +8308,23 @@ export declare const MODELS: {
8359
8308
  contextWindow: number;
8360
8309
  maxTokens: number;
8361
8310
  };
8311
+ readonly "google/gemini-3.1-flash-lite": {
8312
+ id: string;
8313
+ name: string;
8314
+ api: "openai-completions";
8315
+ provider: string;
8316
+ baseUrl: string;
8317
+ reasoning: true;
8318
+ input: ("image" | "text")[];
8319
+ cost: {
8320
+ input: number;
8321
+ output: number;
8322
+ cacheRead: number;
8323
+ cacheWrite: number;
8324
+ };
8325
+ contextWindow: number;
8326
+ maxTokens: number;
8327
+ };
8362
8328
  readonly "google/gemini-3.1-flash-lite-preview": {
8363
8329
  id: string;
8364
8330
  name: string;
@@ -8546,7 +8512,7 @@ export declare const MODELS: {
8546
8512
  contextWindow: number;
8547
8513
  maxTokens: number;
8548
8514
  };
8549
- readonly "inclusionai/ling-2.6-1t:free": {
8515
+ readonly "inclusionai/ling-2.6-1t": {
8550
8516
  id: string;
8551
8517
  name: string;
8552
8518
  api: "openai-completions";
@@ -8580,13 +8546,13 @@ export declare const MODELS: {
8580
8546
  contextWindow: number;
8581
8547
  maxTokens: number;
8582
8548
  };
8583
- readonly "kwaipilot/kat-coder-pro-v2": {
8549
+ readonly "inclusionai/ring-2.6-1t:free": {
8584
8550
  id: string;
8585
8551
  name: string;
8586
8552
  api: "openai-completions";
8587
8553
  provider: string;
8588
8554
  baseUrl: string;
8589
- reasoning: false;
8555
+ reasoning: true;
8590
8556
  input: "text"[];
8591
8557
  cost: {
8592
8558
  input: number;
@@ -8597,7 +8563,7 @@ export declare const MODELS: {
8597
8563
  contextWindow: number;
8598
8564
  maxTokens: number;
8599
8565
  };
8600
- readonly "meta-llama/llama-3-8b-instruct": {
8566
+ readonly "kwaipilot/kat-coder-pro-v2": {
8601
8567
  id: string;
8602
8568
  name: string;
8603
8569
  api: "openai-completions";
@@ -9005,13 +8971,13 @@ export declare const MODELS: {
9005
8971
  contextWindow: number;
9006
8972
  maxTokens: number;
9007
8973
  };
9008
- readonly "mistralai/mistral-medium-3.1": {
8974
+ readonly "mistralai/mistral-medium-3-5": {
9009
8975
  id: string;
9010
8976
  name: string;
9011
8977
  api: "openai-completions";
9012
8978
  provider: string;
9013
8979
  baseUrl: string;
9014
- reasoning: false;
8980
+ reasoning: true;
9015
8981
  input: ("image" | "text")[];
9016
8982
  cost: {
9017
8983
  input: number;
@@ -9022,14 +8988,14 @@ export declare const MODELS: {
9022
8988
  contextWindow: number;
9023
8989
  maxTokens: number;
9024
8990
  };
9025
- readonly "mistralai/mistral-nemo": {
8991
+ readonly "mistralai/mistral-medium-3.1": {
9026
8992
  id: string;
9027
8993
  name: string;
9028
8994
  api: "openai-completions";
9029
8995
  provider: string;
9030
8996
  baseUrl: string;
9031
8997
  reasoning: false;
9032
- input: "text"[];
8998
+ input: ("image" | "text")[];
9033
8999
  cost: {
9034
9000
  input: number;
9035
9001
  output: number;
@@ -9039,7 +9005,7 @@ export declare const MODELS: {
9039
9005
  contextWindow: number;
9040
9006
  maxTokens: number;
9041
9007
  };
9042
- readonly "mistralai/mistral-saba": {
9008
+ readonly "mistralai/mistral-nemo": {
9043
9009
  id: string;
9044
9010
  name: string;
9045
9011
  api: "openai-completions";
@@ -9056,14 +9022,14 @@ export declare const MODELS: {
9056
9022
  contextWindow: number;
9057
9023
  maxTokens: number;
9058
9024
  };
9059
- readonly "mistralai/mistral-small-2603": {
9025
+ readonly "mistralai/mistral-saba": {
9060
9026
  id: string;
9061
9027
  name: string;
9062
9028
  api: "openai-completions";
9063
9029
  provider: string;
9064
9030
  baseUrl: string;
9065
- reasoning: true;
9066
- input: ("image" | "text")[];
9031
+ reasoning: false;
9032
+ input: "text"[];
9067
9033
  cost: {
9068
9034
  input: number;
9069
9035
  output: number;
@@ -9073,13 +9039,13 @@ export declare const MODELS: {
9073
9039
  contextWindow: number;
9074
9040
  maxTokens: number;
9075
9041
  };
9076
- readonly "mistralai/mistral-small-3.2-24b-instruct": {
9042
+ readonly "mistralai/mistral-small-2603": {
9077
9043
  id: string;
9078
9044
  name: string;
9079
9045
  api: "openai-completions";
9080
9046
  provider: string;
9081
9047
  baseUrl: string;
9082
- reasoning: false;
9048
+ reasoning: true;
9083
9049
  input: ("image" | "text")[];
9084
9050
  cost: {
9085
9051
  input: number;
@@ -9090,14 +9056,14 @@ export declare const MODELS: {
9090
9056
  contextWindow: number;
9091
9057
  maxTokens: number;
9092
9058
  };
9093
- readonly "mistralai/mixtral-8x22b-instruct": {
9059
+ readonly "mistralai/mistral-small-3.2-24b-instruct": {
9094
9060
  id: string;
9095
9061
  name: string;
9096
9062
  api: "openai-completions";
9097
9063
  provider: string;
9098
9064
  baseUrl: string;
9099
9065
  reasoning: false;
9100
- input: "text"[];
9066
+ input: ("image" | "text")[];
9101
9067
  cost: {
9102
9068
  input: number;
9103
9069
  output: number;
@@ -9107,7 +9073,7 @@ export declare const MODELS: {
9107
9073
  contextWindow: number;
9108
9074
  maxTokens: number;
9109
9075
  };
9110
- readonly "mistralai/mixtral-8x7b-instruct": {
9076
+ readonly "mistralai/mixtral-8x22b-instruct": {
9111
9077
  id: string;
9112
9078
  name: string;
9113
9079
  api: "openai-completions";
@@ -9260,23 +9226,6 @@ export declare const MODELS: {
9260
9226
  contextWindow: number;
9261
9227
  maxTokens: number;
9262
9228
  };
9263
- readonly "nvidia/llama-3.1-nemotron-70b-instruct": {
9264
- id: string;
9265
- name: string;
9266
- api: "openai-completions";
9267
- provider: string;
9268
- baseUrl: string;
9269
- reasoning: false;
9270
- input: "text"[];
9271
- cost: {
9272
- input: number;
9273
- output: number;
9274
- cacheRead: number;
9275
- cacheWrite: number;
9276
- };
9277
- contextWindow: number;
9278
- maxTokens: number;
9279
- };
9280
9229
  readonly "nvidia/llama-3.3-nemotron-super-49b-v1.5": {
9281
9230
  id: string;
9282
9231
  name: string;
@@ -10144,6 +10093,23 @@ export declare const MODELS: {
10144
10093
  contextWindow: number;
10145
10094
  maxTokens: number;
10146
10095
  };
10096
+ readonly "openai/gpt-chat-latest": {
10097
+ id: string;
10098
+ name: string;
10099
+ api: "openai-completions";
10100
+ provider: string;
10101
+ baseUrl: string;
10102
+ reasoning: false;
10103
+ input: ("image" | "text")[];
10104
+ cost: {
10105
+ input: number;
10106
+ output: number;
10107
+ cacheRead: number;
10108
+ cacheWrite: number;
10109
+ };
10110
+ contextWindow: number;
10111
+ maxTokens: number;
10112
+ };
10147
10113
  readonly "openai/gpt-oss-120b": {
10148
10114
  id: string;
10149
10115
  name: string;
@@ -11232,6 +11198,23 @@ export declare const MODELS: {
11232
11198
  contextWindow: number;
11233
11199
  maxTokens: number;
11234
11200
  };
11201
+ readonly "qwen/qwen3.6-35b-a3b": {
11202
+ id: string;
11203
+ name: string;
11204
+ api: "openai-completions";
11205
+ provider: string;
11206
+ baseUrl: string;
11207
+ reasoning: true;
11208
+ input: ("image" | "text")[];
11209
+ cost: {
11210
+ input: number;
11211
+ output: number;
11212
+ cacheRead: number;
11213
+ cacheWrite: number;
11214
+ };
11215
+ contextWindow: number;
11216
+ maxTokens: number;
11217
+ };
11235
11218
  readonly "qwen/qwen3.6-flash": {
11236
11219
  id: string;
11237
11220
  name: string;
@@ -11368,7 +11351,7 @@ export declare const MODELS: {
11368
11351
  contextWindow: number;
11369
11352
  maxTokens: number;
11370
11353
  };
11371
- readonly "tencent/hy3-preview:free": {
11354
+ readonly "tencent/hy3-preview": {
11372
11355
  id: string;
11373
11356
  name: string;
11374
11357
  api: "openai-completions";
@@ -11419,23 +11402,6 @@ export declare const MODELS: {
11419
11402
  contextWindow: number;
11420
11403
  maxTokens: number;
11421
11404
  };
11422
- readonly "tngtech/deepseek-r1t2-chimera": {
11423
- id: string;
11424
- name: string;
11425
- api: "openai-completions";
11426
- provider: string;
11427
- baseUrl: string;
11428
- reasoning: true;
11429
- input: "text"[];
11430
- cost: {
11431
- input: number;
11432
- output: number;
11433
- cacheRead: number;
11434
- cacheWrite: number;
11435
- };
11436
- contextWindow: number;
11437
- maxTokens: number;
11438
- };
11439
11405
  readonly "upstage/solar-pro-3": {
11440
11406
  id: string;
11441
11407
  name: string;
@@ -12900,6 +12866,23 @@ export declare const MODELS: {
12900
12866
  contextWindow: number;
12901
12867
  maxTokens: number;
12902
12868
  };
12869
+ readonly "google/gemini-3.1-flash-lite": {
12870
+ id: string;
12871
+ name: string;
12872
+ api: "anthropic-messages";
12873
+ provider: string;
12874
+ baseUrl: string;
12875
+ reasoning: true;
12876
+ input: ("image" | "text")[];
12877
+ cost: {
12878
+ input: number;
12879
+ output: number;
12880
+ cacheRead: number;
12881
+ cacheWrite: number;
12882
+ };
12883
+ contextWindow: number;
12884
+ maxTokens: number;
12885
+ };
12903
12886
  readonly "google/gemini-3.1-flash-lite-preview": {
12904
12887
  id: string;
12905
12888
  name: string;
@@ -13461,23 +13444,6 @@ export declare const MODELS: {
13461
13444
  contextWindow: number;
13462
13445
  maxTokens: number;
13463
13446
  };
13464
- readonly "moonshotai/kimi-k2-0905": {
13465
- id: string;
13466
- name: string;
13467
- api: "anthropic-messages";
13468
- provider: string;
13469
- baseUrl: string;
13470
- reasoning: false;
13471
- input: "text"[];
13472
- cost: {
13473
- input: number;
13474
- output: number;
13475
- cacheRead: number;
13476
- cacheWrite: number;
13477
- };
13478
- contextWindow: number;
13479
- maxTokens: number;
13480
- };
13481
13447
  readonly "moonshotai/kimi-k2-thinking": {
13482
13448
  id: string;
13483
13449
  name: string;