@lenylvt/pi-ai 0.64.0
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 +203 -0
- package/dist/api-registry.d.ts +20 -0
- package/dist/api-registry.d.ts.map +1 -0
- package/dist/api-registry.js +44 -0
- package/dist/api-registry.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +119 -0
- package/dist/cli.js.map +1 -0
- package/dist/env-api-keys.d.ts +7 -0
- package/dist/env-api-keys.d.ts.map +1 -0
- package/dist/env-api-keys.js +13 -0
- package/dist/env-api-keys.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/models.d.ts +24 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.generated.d.ts +2332 -0
- package/dist/models.generated.d.ts.map +1 -0
- package/dist/models.generated.js +2186 -0
- package/dist/models.generated.js.map +1 -0
- package/dist/models.js +60 -0
- package/dist/models.js.map +1 -0
- package/dist/oauth.d.ts +2 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +2 -0
- package/dist/oauth.js.map +1 -0
- package/dist/providers/anthropic.d.ts +40 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +749 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/faux.d.ts +56 -0
- package/dist/providers/faux.d.ts.map +1 -0
- package/dist/providers/faux.js +367 -0
- package/dist/providers/faux.js.map +1 -0
- package/dist/providers/github-copilot-headers.d.ts +8 -0
- package/dist/providers/github-copilot-headers.d.ts.map +1 -0
- package/dist/providers/github-copilot-headers.js +29 -0
- package/dist/providers/github-copilot-headers.js.map +1 -0
- package/dist/providers/openai-codex-responses.d.ts +9 -0
- package/dist/providers/openai-codex-responses.d.ts.map +1 -0
- package/dist/providers/openai-codex-responses.js +741 -0
- package/dist/providers/openai-codex-responses.js.map +1 -0
- package/dist/providers/openai-completions.d.ts +15 -0
- package/dist/providers/openai-completions.d.ts.map +1 -0
- package/dist/providers/openai-completions.js +687 -0
- package/dist/providers/openai-completions.js.map +1 -0
- package/dist/providers/openai-responses-shared.d.ts +17 -0
- package/dist/providers/openai-responses-shared.d.ts.map +1 -0
- package/dist/providers/openai-responses-shared.js +458 -0
- package/dist/providers/openai-responses-shared.js.map +1 -0
- package/dist/providers/openai-responses.d.ts +13 -0
- package/dist/providers/openai-responses.d.ts.map +1 -0
- package/dist/providers/openai-responses.js +190 -0
- package/dist/providers/openai-responses.js.map +1 -0
- package/dist/providers/register-builtins.d.ts +16 -0
- package/dist/providers/register-builtins.d.ts.map +1 -0
- package/dist/providers/register-builtins.js +140 -0
- package/dist/providers/register-builtins.js.map +1 -0
- package/dist/providers/simple-options.d.ts +8 -0
- package/dist/providers/simple-options.d.ts.map +1 -0
- package/dist/providers/simple-options.js +35 -0
- package/dist/providers/simple-options.js.map +1 -0
- package/dist/providers/transform-messages.d.ts +8 -0
- package/dist/providers/transform-messages.d.ts.map +1 -0
- package/dist/providers/transform-messages.js +155 -0
- package/dist/providers/transform-messages.js.map +1 -0
- package/dist/stream.d.ts +8 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +27 -0
- package/dist/stream.js.map +1 -0
- package/dist/types.d.ts +283 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/event-stream.d.ts +21 -0
- package/dist/utils/event-stream.d.ts.map +1 -0
- package/dist/utils/event-stream.js +81 -0
- package/dist/utils/event-stream.js.map +1 -0
- package/dist/utils/hash.d.ts +3 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +14 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/json-parse.d.ts +9 -0
- package/dist/utils/json-parse.d.ts.map +1 -0
- package/dist/utils/json-parse.js +29 -0
- package/dist/utils/json-parse.js.map +1 -0
- package/dist/utils/oauth/anthropic.d.ts +25 -0
- package/dist/utils/oauth/anthropic.d.ts.map +1 -0
- package/dist/utils/oauth/anthropic.js +335 -0
- package/dist/utils/oauth/anthropic.js.map +1 -0
- package/dist/utils/oauth/github-copilot.d.ts +30 -0
- package/dist/utils/oauth/github-copilot.d.ts.map +1 -0
- package/dist/utils/oauth/github-copilot.js +292 -0
- package/dist/utils/oauth/github-copilot.js.map +1 -0
- package/dist/utils/oauth/index.d.ts +36 -0
- package/dist/utils/oauth/index.d.ts.map +1 -0
- package/dist/utils/oauth/index.js +92 -0
- package/dist/utils/oauth/index.js.map +1 -0
- package/dist/utils/oauth/oauth-page.d.ts +3 -0
- package/dist/utils/oauth/oauth-page.d.ts.map +1 -0
- package/dist/utils/oauth/oauth-page.js +105 -0
- package/dist/utils/oauth/oauth-page.js.map +1 -0
- package/dist/utils/oauth/openai-codex.d.ts +34 -0
- package/dist/utils/oauth/openai-codex.d.ts.map +1 -0
- package/dist/utils/oauth/openai-codex.js +373 -0
- package/dist/utils/oauth/openai-codex.js.map +1 -0
- package/dist/utils/oauth/pkce.d.ts +13 -0
- package/dist/utils/oauth/pkce.d.ts.map +1 -0
- package/dist/utils/oauth/pkce.js +31 -0
- package/dist/utils/oauth/pkce.js.map +1 -0
- package/dist/utils/oauth/types.d.ts +47 -0
- package/dist/utils/oauth/types.d.ts.map +1 -0
- package/dist/utils/oauth/types.js +2 -0
- package/dist/utils/oauth/types.js.map +1 -0
- package/dist/utils/overflow.d.ts +53 -0
- package/dist/utils/overflow.d.ts.map +1 -0
- package/dist/utils/overflow.js +119 -0
- package/dist/utils/overflow.js.map +1 -0
- package/dist/utils/sanitize-unicode.d.ts +22 -0
- package/dist/utils/sanitize-unicode.d.ts.map +1 -0
- package/dist/utils/sanitize-unicode.js +26 -0
- package/dist/utils/sanitize-unicode.js.map +1 -0
- package/dist/utils/typebox-helpers.d.ts +17 -0
- package/dist/utils/typebox-helpers.d.ts.map +1 -0
- package/dist/utils/typebox-helpers.js +21 -0
- package/dist/utils/typebox-helpers.js.map +1 -0
- package/dist/utils/validation.d.ts +18 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +80 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +89 -0
- package/src/api-registry.ts +98 -0
- package/src/cli.ts +136 -0
- package/src/env-api-keys.ts +22 -0
- package/src/index.ts +29 -0
- package/src/models.generated.ts +2188 -0
- package/src/models.ts +82 -0
- package/src/oauth.ts +1 -0
- package/src/providers/anthropic.ts +905 -0
- package/src/providers/faux.ts +498 -0
- package/src/providers/github-copilot-headers.ts +37 -0
- package/src/providers/openai-codex-responses.ts +929 -0
- package/src/providers/openai-completions.ts +811 -0
- package/src/providers/openai-responses-shared.ts +513 -0
- package/src/providers/openai-responses.ts +251 -0
- package/src/providers/register-builtins.ts +232 -0
- package/src/providers/simple-options.ts +46 -0
- package/src/providers/transform-messages.ts +172 -0
- package/src/stream.ts +59 -0
- package/src/types.ts +294 -0
- package/src/utils/event-stream.ts +87 -0
- package/src/utils/hash.ts +13 -0
- package/src/utils/json-parse.ts +28 -0
- package/src/utils/oauth/anthropic.ts +402 -0
- package/src/utils/oauth/github-copilot.ts +396 -0
- package/src/utils/oauth/index.ts +123 -0
- package/src/utils/oauth/oauth-page.ts +109 -0
- package/src/utils/oauth/openai-codex.ts +450 -0
- package/src/utils/oauth/pkce.ts +34 -0
- package/src/utils/oauth/types.ts +59 -0
- package/src/utils/overflow.ts +125 -0
- package/src/utils/sanitize-unicode.ts +25 -0
- package/src/utils/typebox-helpers.ts +24 -0
- package/src/utils/validation.ts +93 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.generated.js","sourceRoot":"","sources":["../src/models.generated.ts"],"names":[],"mappings":"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","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'bun packages/ai/scripts/generate-models.ts' to update\n\nimport type { Model } from \"./types.js\";\n\nexport const MODELS = {\n\t\"anthropic\": {\n\t\t\"claude-3-5-haiku-20241022\": {\n\t\t\tid: \"claude-3-5-haiku-20241022\",\n\t\t\tname: \"Claude Haiku 3.5\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.8,\n\t\t\t\toutput: 4,\n\t\t\t\tcacheRead: 0.08,\n\t\t\t\tcacheWrite: 1,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 8192,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-3-5-haiku-latest\": {\n\t\t\tid: \"claude-3-5-haiku-latest\",\n\t\t\tname: \"Claude Haiku 3.5 (latest)\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.8,\n\t\t\t\toutput: 4,\n\t\t\t\tcacheRead: 0.08,\n\t\t\t\tcacheWrite: 1,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 8192,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-3-5-sonnet-20240620\": {\n\t\t\tid: \"claude-3-5-sonnet-20240620\",\n\t\t\tname: \"Claude Sonnet 3.5\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 8192,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-3-5-sonnet-20241022\": {\n\t\t\tid: \"claude-3-5-sonnet-20241022\",\n\t\t\tname: \"Claude Sonnet 3.5 v2\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 8192,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-3-7-sonnet-20250219\": {\n\t\t\tid: \"claude-3-7-sonnet-20250219\",\n\t\t\tname: \"Claude Sonnet 3.7\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-3-haiku-20240307\": {\n\t\t\tid: \"claude-3-haiku-20240307\",\n\t\t\tname: \"Claude Haiku 3\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.25,\n\t\t\t\toutput: 1.25,\n\t\t\t\tcacheRead: 0.03,\n\t\t\t\tcacheWrite: 0.3,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-3-opus-20240229\": {\n\t\t\tid: \"claude-3-opus-20240229\",\n\t\t\tname: \"Claude Opus 3\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 15,\n\t\t\t\toutput: 75,\n\t\t\t\tcacheRead: 1.5,\n\t\t\t\tcacheWrite: 18.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-3-sonnet-20240229\": {\n\t\t\tid: \"claude-3-sonnet-20240229\",\n\t\t\tname: \"Claude Sonnet 3\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 0.3,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-haiku-4-5\": {\n\t\t\tid: \"claude-haiku-4-5\",\n\t\t\tname: \"Claude Haiku 4.5 (latest)\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1,\n\t\t\t\toutput: 5,\n\t\t\t\tcacheRead: 0.1,\n\t\t\t\tcacheWrite: 1.25,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-haiku-4-5-20251001\": {\n\t\t\tid: \"claude-haiku-4-5-20251001\",\n\t\t\tname: \"Claude Haiku 4.5\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1,\n\t\t\t\toutput: 5,\n\t\t\t\tcacheRead: 0.1,\n\t\t\t\tcacheWrite: 1.25,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-opus-4-0\": {\n\t\t\tid: \"claude-opus-4-0\",\n\t\t\tname: \"Claude Opus 4 (latest)\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 15,\n\t\t\t\toutput: 75,\n\t\t\t\tcacheRead: 1.5,\n\t\t\t\tcacheWrite: 18.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 32000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-opus-4-1\": {\n\t\t\tid: \"claude-opus-4-1\",\n\t\t\tname: \"Claude Opus 4.1 (latest)\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 15,\n\t\t\t\toutput: 75,\n\t\t\t\tcacheRead: 1.5,\n\t\t\t\tcacheWrite: 18.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 32000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-opus-4-1-20250805\": {\n\t\t\tid: \"claude-opus-4-1-20250805\",\n\t\t\tname: \"Claude Opus 4.1\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 15,\n\t\t\t\toutput: 75,\n\t\t\t\tcacheRead: 1.5,\n\t\t\t\tcacheWrite: 18.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 32000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-opus-4-20250514\": {\n\t\t\tid: \"claude-opus-4-20250514\",\n\t\t\tname: \"Claude Opus 4\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 15,\n\t\t\t\toutput: 75,\n\t\t\t\tcacheRead: 1.5,\n\t\t\t\tcacheWrite: 18.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 32000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-opus-4-5\": {\n\t\t\tid: \"claude-opus-4-5\",\n\t\t\tname: \"Claude Opus 4.5 (latest)\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 5,\n\t\t\t\toutput: 25,\n\t\t\t\tcacheRead: 0.5,\n\t\t\t\tcacheWrite: 6.25,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-opus-4-5-20251101\": {\n\t\t\tid: \"claude-opus-4-5-20251101\",\n\t\t\tname: \"Claude Opus 4.5\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 5,\n\t\t\t\toutput: 25,\n\t\t\t\tcacheRead: 0.5,\n\t\t\t\tcacheWrite: 6.25,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-opus-4-6\": {\n\t\t\tid: \"claude-opus-4-6\",\n\t\t\tname: \"Claude Opus 4.6\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 5,\n\t\t\t\toutput: 25,\n\t\t\t\tcacheRead: 0.5,\n\t\t\t\tcacheWrite: 6.25,\n\t\t\t},\n\t\t\tcontextWindow: 1000000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-sonnet-4-0\": {\n\t\t\tid: \"claude-sonnet-4-0\",\n\t\t\tname: \"Claude Sonnet 4 (latest)\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-sonnet-4-20250514\": {\n\t\t\tid: \"claude-sonnet-4-20250514\",\n\t\t\tname: \"Claude Sonnet 4\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-sonnet-4-5\": {\n\t\t\tid: \"claude-sonnet-4-5\",\n\t\t\tname: \"Claude Sonnet 4.5 (latest)\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-sonnet-4-5-20250929\": {\n\t\t\tid: \"claude-sonnet-4-5-20250929\",\n\t\t\tname: \"Claude Sonnet 4.5\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-sonnet-4-6\": {\n\t\t\tid: \"claude-sonnet-4-6\",\n\t\t\tname: \"Claude Sonnet 4.6\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"anthropic\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 1000000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t},\n\t\"github-copilot\": {\n\t\t\"claude-haiku-4.5\": {\n\t\t\tid: \"claude-haiku-4.5\",\n\t\t\tname: \"Claude Haiku 4.5\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 144000,\n\t\t\tmaxTokens: 32000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-opus-4.5\": {\n\t\t\tid: \"claude-opus-4.5\",\n\t\t\tname: \"Claude Opus 4.5\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 160000,\n\t\t\tmaxTokens: 32000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-opus-4.6\": {\n\t\t\tid: \"claude-opus-4.6\",\n\t\t\tname: \"Claude Opus 4.6\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 144000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-sonnet-4\": {\n\t\t\tid: \"claude-sonnet-4\",\n\t\t\tname: \"Claude Sonnet 4\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 216000,\n\t\t\tmaxTokens: 16000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-sonnet-4.5\": {\n\t\t\tid: \"claude-sonnet-4.5\",\n\t\t\tname: \"Claude Sonnet 4.5\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 144000,\n\t\t\tmaxTokens: 32000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"claude-sonnet-4.6\": {\n\t\t\tid: \"claude-sonnet-4.6\",\n\t\t\tname: \"Claude Sonnet 4.6\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 32000,\n\t\t} satisfies Model<\"anthropic-messages\">,\n\t\t\"gemini-2.5-pro\": {\n\t\t\tid: \"gemini-2.5-pro\",\n\t\t\tname: \"Gemini 2.5 Pro\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\tcompat: {\"supportsStore\":false,\"supportsDeveloperRole\":false,\"supportsReasoningEffort\":false},\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"gemini-3-flash-preview\": {\n\t\t\tid: \"gemini-3-flash-preview\",\n\t\t\tname: \"Gemini 3 Flash\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\tcompat: {\"supportsStore\":false,\"supportsDeveloperRole\":false,\"supportsReasoningEffort\":false},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"gemini-3-pro-preview\": {\n\t\t\tid: \"gemini-3-pro-preview\",\n\t\t\tname: \"Gemini 3 Pro Preview\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\tcompat: {\"supportsStore\":false,\"supportsDeveloperRole\":false,\"supportsReasoningEffort\":false},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"gemini-3.1-pro-preview\": {\n\t\t\tid: \"gemini-3.1-pro-preview\",\n\t\t\tname: \"Gemini 3.1 Pro Preview\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\tcompat: {\"supportsStore\":false,\"supportsDeveloperRole\":false,\"supportsReasoningEffort\":false},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"gpt-4.1\": {\n\t\t\tid: \"gpt-4.1\",\n\t\t\tname: \"GPT-4.1\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\tcompat: {\"supportsStore\":false,\"supportsDeveloperRole\":false,\"supportsReasoningEffort\":false},\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 16384,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"gpt-4o\": {\n\t\t\tid: \"gpt-4o\",\n\t\t\tname: \"GPT-4o\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\tcompat: {\"supportsStore\":false,\"supportsDeveloperRole\":false,\"supportsReasoningEffort\":false},\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"gpt-5\": {\n\t\t\tid: \"gpt-5\",\n\t\t\tname: \"GPT-5\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-responses\">,\n\t\t\"gpt-5-mini\": {\n\t\t\tid: \"gpt-5-mini\",\n\t\t\tname: \"GPT-5-mini\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 264000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-responses\">,\n\t\t\"gpt-5.1\": {\n\t\t\tid: \"gpt-5.1\",\n\t\t\tname: \"GPT-5.1\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 264000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-responses\">,\n\t\t\"gpt-5.1-codex\": {\n\t\t\tid: \"gpt-5.1-codex\",\n\t\t\tname: \"GPT-5.1-Codex\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-responses\">,\n\t\t\"gpt-5.1-codex-max\": {\n\t\t\tid: \"gpt-5.1-codex-max\",\n\t\t\tname: \"GPT-5.1-Codex-max\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-responses\">,\n\t\t\"gpt-5.1-codex-mini\": {\n\t\t\tid: \"gpt-5.1-codex-mini\",\n\t\t\tname: \"GPT-5.1-Codex-mini\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-responses\">,\n\t\t\"gpt-5.2\": {\n\t\t\tid: \"gpt-5.2\",\n\t\t\tname: \"GPT-5.2\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 264000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-responses\">,\n\t\t\"gpt-5.2-codex\": {\n\t\t\tid: \"gpt-5.2-codex\",\n\t\t\tname: \"GPT-5.2-Codex\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-responses\">,\n\t\t\"gpt-5.3-codex\": {\n\t\t\tid: \"gpt-5.3-codex\",\n\t\t\tname: \"GPT-5.3-Codex\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-responses\">,\n\t\t\"gpt-5.4\": {\n\t\t\tid: \"gpt-5.4\",\n\t\t\tname: \"GPT-5.4\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-responses\">,\n\t\t\"gpt-5.4-mini\": {\n\t\t\tid: \"gpt-5.4-mini\",\n\t\t\tname: \"GPT-5.4 mini\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-responses\">,\n\t\t\"grok-code-fast-1\": {\n\t\t\tid: \"grok-code-fast-1\",\n\t\t\tname: \"Grok Code Fast 1\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"github-copilot\",\n\t\t\tbaseUrl: \"https://api.individual.githubcopilot.com\",\n\t\t\theaders: {\"User-Agent\":\"GitHubCopilotChat/0.35.0\",\"Editor-Version\":\"vscode/1.107.0\",\"Editor-Plugin-Version\":\"copilot-chat/0.35.0\",\"Copilot-Integration-Id\":\"vscode-chat\"},\n\t\t\tcompat: {\"supportsStore\":false,\"supportsDeveloperRole\":false,\"supportsReasoningEffort\":false},\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t},\n\t\"openai-codex\": {\n\t\t\"gpt-5.1\": {\n\t\t\tid: \"gpt-5.1\",\n\t\t\tname: \"GPT-5.1\",\n\t\t\tapi: \"openai-codex-responses\",\n\t\t\tprovider: \"openai-codex\",\n\t\t\tbaseUrl: \"https://chatgpt.com/backend-api\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.25,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 0.125,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 272000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-codex-responses\">,\n\t\t\"gpt-5.1-codex-max\": {\n\t\t\tid: \"gpt-5.1-codex-max\",\n\t\t\tname: \"GPT-5.1 Codex Max\",\n\t\t\tapi: \"openai-codex-responses\",\n\t\t\tprovider: \"openai-codex\",\n\t\t\tbaseUrl: \"https://chatgpt.com/backend-api\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.25,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 0.125,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 272000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-codex-responses\">,\n\t\t\"gpt-5.1-codex-mini\": {\n\t\t\tid: \"gpt-5.1-codex-mini\",\n\t\t\tname: \"GPT-5.1 Codex Mini\",\n\t\t\tapi: \"openai-codex-responses\",\n\t\t\tprovider: \"openai-codex\",\n\t\t\tbaseUrl: \"https://chatgpt.com/backend-api\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.25,\n\t\t\t\toutput: 2,\n\t\t\t\tcacheRead: 0.025,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 272000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-codex-responses\">,\n\t\t\"gpt-5.2\": {\n\t\t\tid: \"gpt-5.2\",\n\t\t\tname: \"GPT-5.2\",\n\t\t\tapi: \"openai-codex-responses\",\n\t\t\tprovider: \"openai-codex\",\n\t\t\tbaseUrl: \"https://chatgpt.com/backend-api\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.75,\n\t\t\t\toutput: 14,\n\t\t\t\tcacheRead: 0.175,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 272000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-codex-responses\">,\n\t\t\"gpt-5.2-codex\": {\n\t\t\tid: \"gpt-5.2-codex\",\n\t\t\tname: \"GPT-5.2 Codex\",\n\t\t\tapi: \"openai-codex-responses\",\n\t\t\tprovider: \"openai-codex\",\n\t\t\tbaseUrl: \"https://chatgpt.com/backend-api\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.75,\n\t\t\t\toutput: 14,\n\t\t\t\tcacheRead: 0.175,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 272000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-codex-responses\">,\n\t\t\"gpt-5.3-codex\": {\n\t\t\tid: \"gpt-5.3-codex\",\n\t\t\tname: \"GPT-5.3 Codex\",\n\t\t\tapi: \"openai-codex-responses\",\n\t\t\tprovider: \"openai-codex\",\n\t\t\tbaseUrl: \"https://chatgpt.com/backend-api\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.75,\n\t\t\t\toutput: 14,\n\t\t\t\tcacheRead: 0.175,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 272000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-codex-responses\">,\n\t\t\"gpt-5.3-codex-spark\": {\n\t\t\tid: \"gpt-5.3-codex-spark\",\n\t\t\tname: \"GPT-5.3 Codex Spark\",\n\t\t\tapi: \"openai-codex-responses\",\n\t\t\tprovider: \"openai-codex\",\n\t\t\tbaseUrl: \"https://chatgpt.com/backend-api\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-codex-responses\">,\n\t\t\"gpt-5.4\": {\n\t\t\tid: \"gpt-5.4\",\n\t\t\tname: \"GPT-5.4\",\n\t\t\tapi: \"openai-codex-responses\",\n\t\t\tprovider: \"openai-codex\",\n\t\t\tbaseUrl: \"https://chatgpt.com/backend-api\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 2.5,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.25,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 272000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-codex-responses\">,\n\t\t\"gpt-5.4-mini\": {\n\t\t\tid: \"gpt-5.4-mini\",\n\t\t\tname: \"GPT-5.4 Mini\",\n\t\t\tapi: \"openai-codex-responses\",\n\t\t\tprovider: \"openai-codex\",\n\t\t\tbaseUrl: \"https://chatgpt.com/backend-api\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.75,\n\t\t\t\toutput: 4.5,\n\t\t\t\tcacheRead: 0.075,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 272000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-codex-responses\">,\n\t},\n\t\"openrouter\": {\n\t\t\"anthropic/claude-3-haiku\": {\n\t\t\tid: \"anthropic/claude-3-haiku\",\n\t\t\tname: \"Anthropic: Claude 3 Haiku\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.25,\n\t\t\t\toutput: 1.25,\n\t\t\t\tcacheRead: 0.03,\n\t\t\t\tcacheWrite: 0.3,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"anthropic/claude-3.5-haiku\": {\n\t\t\tid: \"anthropic/claude-3.5-haiku\",\n\t\t\tname: \"Anthropic: Claude 3.5 Haiku\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.7999999999999999,\n\t\t\t\toutput: 4,\n\t\t\t\tcacheRead: 0.08,\n\t\t\t\tcacheWrite: 1,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 8192,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"anthropic/claude-3.5-sonnet\": {\n\t\t\tid: \"anthropic/claude-3.5-sonnet\",\n\t\t\tname: \"Anthropic: Claude 3.5 Sonnet\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 6,\n\t\t\t\toutput: 30,\n\t\t\t\tcacheRead: 0.6,\n\t\t\t\tcacheWrite: 7.5,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 8192,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"anthropic/claude-3.7-sonnet\": {\n\t\t\tid: \"anthropic/claude-3.7-sonnet\",\n\t\t\tname: \"Anthropic: Claude 3.7 Sonnet\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"anthropic/claude-3.7-sonnet:thinking\": {\n\t\t\tid: \"anthropic/claude-3.7-sonnet:thinking\",\n\t\t\tname: \"Anthropic: Claude 3.7 Sonnet (thinking)\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"anthropic/claude-haiku-4.5\": {\n\t\t\tid: \"anthropic/claude-haiku-4.5\",\n\t\t\tname: \"Anthropic: Claude Haiku 4.5\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1,\n\t\t\t\toutput: 5,\n\t\t\t\tcacheRead: 0.09999999999999999,\n\t\t\t\tcacheWrite: 1.25,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"anthropic/claude-opus-4\": {\n\t\t\tid: \"anthropic/claude-opus-4\",\n\t\t\tname: \"Anthropic: Claude Opus 4\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 15,\n\t\t\t\toutput: 75,\n\t\t\t\tcacheRead: 1.5,\n\t\t\t\tcacheWrite: 18.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 32000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"anthropic/claude-opus-4.1\": {\n\t\t\tid: \"anthropic/claude-opus-4.1\",\n\t\t\tname: \"Anthropic: Claude Opus 4.1\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 15,\n\t\t\t\toutput: 75,\n\t\t\t\tcacheRead: 1.5,\n\t\t\t\tcacheWrite: 18.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 32000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"anthropic/claude-opus-4.5\": {\n\t\t\tid: \"anthropic/claude-opus-4.5\",\n\t\t\tname: \"Anthropic: Claude Opus 4.5\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 5,\n\t\t\t\toutput: 25,\n\t\t\t\tcacheRead: 0.5,\n\t\t\t\tcacheWrite: 6.25,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"anthropic/claude-opus-4.6\": {\n\t\t\tid: \"anthropic/claude-opus-4.6\",\n\t\t\tname: \"Anthropic: Claude Opus 4.6\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 5,\n\t\t\t\toutput: 25,\n\t\t\t\tcacheRead: 0.5,\n\t\t\t\tcacheWrite: 6.25,\n\t\t\t},\n\t\t\tcontextWindow: 1000000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"anthropic/claude-sonnet-4\": {\n\t\t\tid: \"anthropic/claude-sonnet-4\",\n\t\t\tname: \"Anthropic: Claude Sonnet 4\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"anthropic/claude-sonnet-4.5\": {\n\t\t\tid: \"anthropic/claude-sonnet-4.5\",\n\t\t\tname: \"Anthropic: Claude Sonnet 4.5\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 1000000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"anthropic/claude-sonnet-4.6\": {\n\t\t\tid: \"anthropic/claude-sonnet-4.6\",\n\t\t\tname: \"Anthropic: Claude Sonnet 4.6\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.3,\n\t\t\t\tcacheWrite: 3.75,\n\t\t\t},\n\t\t\tcontextWindow: 1000000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"auto\": {\n\t\t\tid: \"auto\",\n\t\t\tname: \"Auto\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 2000000,\n\t\t\tmaxTokens: 30000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-3.5-turbo\": {\n\t\t\tid: \"openai/gpt-3.5-turbo\",\n\t\t\tname: \"OpenAI: GPT-3.5 Turbo\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.5,\n\t\t\t\toutput: 1.5,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 16385,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-3.5-turbo-0613\": {\n\t\t\tid: \"openai/gpt-3.5-turbo-0613\",\n\t\t\tname: \"OpenAI: GPT-3.5 Turbo (older v0613)\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1,\n\t\t\t\toutput: 2,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 4095,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-3.5-turbo-16k\": {\n\t\t\tid: \"openai/gpt-3.5-turbo-16k\",\n\t\t\tname: \"OpenAI: GPT-3.5 Turbo 16k\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 3,\n\t\t\t\toutput: 4,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 16385,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4\": {\n\t\t\tid: \"openai/gpt-4\",\n\t\t\tname: \"OpenAI: GPT-4\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 30,\n\t\t\t\toutput: 60,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 8191,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4-0314\": {\n\t\t\tid: \"openai/gpt-4-0314\",\n\t\t\tname: \"OpenAI: GPT-4 (older v0314)\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 30,\n\t\t\t\toutput: 60,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 8191,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4-1106-preview\": {\n\t\t\tid: \"openai/gpt-4-1106-preview\",\n\t\t\tname: \"OpenAI: GPT-4 Turbo (older v1106)\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 10,\n\t\t\t\toutput: 30,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4-turbo\": {\n\t\t\tid: \"openai/gpt-4-turbo\",\n\t\t\tname: \"OpenAI: GPT-4 Turbo\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 10,\n\t\t\t\toutput: 30,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4-turbo-preview\": {\n\t\t\tid: \"openai/gpt-4-turbo-preview\",\n\t\t\tname: \"OpenAI: GPT-4 Turbo Preview\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 10,\n\t\t\t\toutput: 30,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4.1\": {\n\t\t\tid: \"openai/gpt-4.1\",\n\t\t\tname: \"OpenAI: GPT-4.1\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 2,\n\t\t\t\toutput: 8,\n\t\t\t\tcacheRead: 0.5,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 1047576,\n\t\t\tmaxTokens: 32768,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4.1-mini\": {\n\t\t\tid: \"openai/gpt-4.1-mini\",\n\t\t\tname: \"OpenAI: GPT-4.1 Mini\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.39999999999999997,\n\t\t\t\toutput: 1.5999999999999999,\n\t\t\t\tcacheRead: 0.09999999999999999,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 1047576,\n\t\t\tmaxTokens: 32768,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4.1-nano\": {\n\t\t\tid: \"openai/gpt-4.1-nano\",\n\t\t\tname: \"OpenAI: GPT-4.1 Nano\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.09999999999999999,\n\t\t\t\toutput: 0.39999999999999997,\n\t\t\t\tcacheRead: 0.024999999999999998,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 1047576,\n\t\t\tmaxTokens: 32768,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4o\": {\n\t\t\tid: \"openai/gpt-4o\",\n\t\t\tname: \"OpenAI: GPT-4o\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 2.5,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 1.25,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 16384,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4o-2024-05-13\": {\n\t\t\tid: \"openai/gpt-4o-2024-05-13\",\n\t\t\tname: \"OpenAI: GPT-4o (2024-05-13)\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 5,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4o-2024-08-06\": {\n\t\t\tid: \"openai/gpt-4o-2024-08-06\",\n\t\t\tname: \"OpenAI: GPT-4o (2024-08-06)\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 2.5,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 1.25,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 16384,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4o-2024-11-20\": {\n\t\t\tid: \"openai/gpt-4o-2024-11-20\",\n\t\t\tname: \"OpenAI: GPT-4o (2024-11-20)\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 2.5,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 1.25,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 16384,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4o-audio-preview\": {\n\t\t\tid: \"openai/gpt-4o-audio-preview\",\n\t\t\tname: \"OpenAI: GPT-4o Audio\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 2.5,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 16384,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4o-mini\": {\n\t\t\tid: \"openai/gpt-4o-mini\",\n\t\t\tname: \"OpenAI: GPT-4o-mini\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.15,\n\t\t\t\toutput: 0.6,\n\t\t\t\tcacheRead: 0.075,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 16384,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4o-mini-2024-07-18\": {\n\t\t\tid: \"openai/gpt-4o-mini-2024-07-18\",\n\t\t\tname: \"OpenAI: GPT-4o-mini (2024-07-18)\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.15,\n\t\t\t\toutput: 0.6,\n\t\t\t\tcacheRead: 0.075,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 16384,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-4o:extended\": {\n\t\t\tid: \"openai/gpt-4o:extended\",\n\t\t\tname: \"OpenAI: GPT-4o (extended)\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 6,\n\t\t\t\toutput: 18,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 64000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5\": {\n\t\t\tid: \"openai/gpt-5\",\n\t\t\tname: \"OpenAI: GPT-5\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.25,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 0.125,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5-codex\": {\n\t\t\tid: \"openai/gpt-5-codex\",\n\t\t\tname: \"OpenAI: GPT-5 Codex\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.25,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 0.125,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5-image\": {\n\t\t\tid: \"openai/gpt-5-image\",\n\t\t\tname: \"OpenAI: GPT-5 Image\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 10,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 1.25,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5-image-mini\": {\n\t\t\tid: \"openai/gpt-5-image-mini\",\n\t\t\tname: \"OpenAI: GPT-5 Image Mini\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 2.5,\n\t\t\t\toutput: 2,\n\t\t\t\tcacheRead: 0.25,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5-mini\": {\n\t\t\tid: \"openai/gpt-5-mini\",\n\t\t\tname: \"OpenAI: GPT-5 Mini\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.25,\n\t\t\t\toutput: 2,\n\t\t\t\tcacheRead: 0.024999999999999998,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5-nano\": {\n\t\t\tid: \"openai/gpt-5-nano\",\n\t\t\tname: \"OpenAI: GPT-5 Nano\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.049999999999999996,\n\t\t\t\toutput: 0.39999999999999997,\n\t\t\t\tcacheRead: 0.005,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5-pro\": {\n\t\t\tid: \"openai/gpt-5-pro\",\n\t\t\tname: \"OpenAI: GPT-5 Pro\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 15,\n\t\t\t\toutput: 120,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.1\": {\n\t\t\tid: \"openai/gpt-5.1\",\n\t\t\tname: \"OpenAI: GPT-5.1\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.25,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 0.125,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.1-chat\": {\n\t\t\tid: \"openai/gpt-5.1-chat\",\n\t\t\tname: \"OpenAI: GPT-5.1 Chat\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.25,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 0.125,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 16384,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.1-codex\": {\n\t\t\tid: \"openai/gpt-5.1-codex\",\n\t\t\tname: \"OpenAI: GPT-5.1-Codex\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.25,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 0.125,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.1-codex-max\": {\n\t\t\tid: \"openai/gpt-5.1-codex-max\",\n\t\t\tname: \"OpenAI: GPT-5.1-Codex-Max\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.25,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 0.125,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.1-codex-mini\": {\n\t\t\tid: \"openai/gpt-5.1-codex-mini\",\n\t\t\tname: \"OpenAI: GPT-5.1-Codex-Mini\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.25,\n\t\t\t\toutput: 2,\n\t\t\t\tcacheRead: 0.024999999999999998,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 100000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.2\": {\n\t\t\tid: \"openai/gpt-5.2\",\n\t\t\tname: \"OpenAI: GPT-5.2\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.75,\n\t\t\t\toutput: 14,\n\t\t\t\tcacheRead: 0.175,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.2-chat\": {\n\t\t\tid: \"openai/gpt-5.2-chat\",\n\t\t\tname: \"OpenAI: GPT-5.2 Chat\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.75,\n\t\t\t\toutput: 14,\n\t\t\t\tcacheRead: 0.175,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 16384,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.2-codex\": {\n\t\t\tid: \"openai/gpt-5.2-codex\",\n\t\t\tname: \"OpenAI: GPT-5.2-Codex\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.75,\n\t\t\t\toutput: 14,\n\t\t\t\tcacheRead: 0.175,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.2-pro\": {\n\t\t\tid: \"openai/gpt-5.2-pro\",\n\t\t\tname: \"OpenAI: GPT-5.2 Pro\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 21,\n\t\t\t\toutput: 168,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.3-chat\": {\n\t\t\tid: \"openai/gpt-5.3-chat\",\n\t\t\tname: \"OpenAI: GPT-5.3 Chat\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.75,\n\t\t\t\toutput: 14,\n\t\t\t\tcacheRead: 0.175,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 16384,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.3-codex\": {\n\t\t\tid: \"openai/gpt-5.3-codex\",\n\t\t\tname: \"OpenAI: GPT-5.3-Codex\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.75,\n\t\t\t\toutput: 14,\n\t\t\t\tcacheRead: 0.175,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.4\": {\n\t\t\tid: \"openai/gpt-5.4\",\n\t\t\tname: \"OpenAI: GPT-5.4\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 2.5,\n\t\t\t\toutput: 15,\n\t\t\t\tcacheRead: 0.25,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 1050000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.4-mini\": {\n\t\t\tid: \"openai/gpt-5.4-mini\",\n\t\t\tname: \"OpenAI: GPT-5.4 Mini\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.75,\n\t\t\t\toutput: 4.5,\n\t\t\t\tcacheRead: 0.075,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.4-nano\": {\n\t\t\tid: \"openai/gpt-5.4-nano\",\n\t\t\tname: \"OpenAI: GPT-5.4 Nano\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.19999999999999998,\n\t\t\t\toutput: 1.25,\n\t\t\t\tcacheRead: 0.02,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 400000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-5.4-pro\": {\n\t\t\tid: \"openai/gpt-5.4-pro\",\n\t\t\tname: \"OpenAI: GPT-5.4 Pro\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 30,\n\t\t\t\toutput: 180,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 1050000,\n\t\t\tmaxTokens: 128000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-audio\": {\n\t\t\tid: \"openai/gpt-audio\",\n\t\t\tname: \"OpenAI: GPT Audio\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 2.5,\n\t\t\t\toutput: 10,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 16384,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-audio-mini\": {\n\t\t\tid: \"openai/gpt-audio-mini\",\n\t\t\tname: \"OpenAI: GPT Audio Mini\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: false,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.6,\n\t\t\t\toutput: 2.4,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 128000,\n\t\t\tmaxTokens: 16384,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-oss-120b\": {\n\t\t\tid: \"openai/gpt-oss-120b\",\n\t\t\tname: \"OpenAI: gpt-oss-120b\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.039,\n\t\t\t\toutput: 0.19,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 131072,\n\t\t\tmaxTokens: 4096,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-oss-120b:free\": {\n\t\t\tid: \"openai/gpt-oss-120b:free\",\n\t\t\tname: \"OpenAI: gpt-oss-120b (free)\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 131072,\n\t\t\tmaxTokens: 131072,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-oss-20b\": {\n\t\t\tid: \"openai/gpt-oss-20b\",\n\t\t\tname: \"OpenAI: gpt-oss-20b\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.03,\n\t\t\t\toutput: 0.11,\n\t\t\t\tcacheRead: 0.015,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 131072,\n\t\t\tmaxTokens: 131072,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-oss-20b:free\": {\n\t\t\tid: \"openai/gpt-oss-20b:free\",\n\t\t\tname: \"OpenAI: gpt-oss-20b (free)\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 131072,\n\t\t\tmaxTokens: 131072,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/gpt-oss-safeguard-20b\": {\n\t\t\tid: \"openai/gpt-oss-safeguard-20b\",\n\t\t\tname: \"OpenAI: gpt-oss-safeguard-20b\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 0.075,\n\t\t\t\toutput: 0.3,\n\t\t\t\tcacheRead: 0.037,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 131072,\n\t\t\tmaxTokens: 65536,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/o1\": {\n\t\t\tid: \"openai/o1\",\n\t\t\tname: \"OpenAI: o1\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 15,\n\t\t\t\toutput: 60,\n\t\t\t\tcacheRead: 7.5,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 100000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/o3\": {\n\t\t\tid: \"openai/o3\",\n\t\t\tname: \"OpenAI: o3\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 2,\n\t\t\t\toutput: 8,\n\t\t\t\tcacheRead: 0.5,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 100000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/o3-deep-research\": {\n\t\t\tid: \"openai/o3-deep-research\",\n\t\t\tname: \"OpenAI: o3 Deep Research\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 10,\n\t\t\t\toutput: 40,\n\t\t\t\tcacheRead: 2.5,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 100000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/o3-mini\": {\n\t\t\tid: \"openai/o3-mini\",\n\t\t\tname: \"OpenAI: o3 Mini\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.1,\n\t\t\t\toutput: 4.4,\n\t\t\t\tcacheRead: 0.55,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 100000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/o3-mini-high\": {\n\t\t\tid: \"openai/o3-mini-high\",\n\t\t\tname: \"OpenAI: o3 Mini High\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.1,\n\t\t\t\toutput: 4.4,\n\t\t\t\tcacheRead: 0.55,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 100000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/o3-pro\": {\n\t\t\tid: \"openai/o3-pro\",\n\t\t\tname: \"OpenAI: o3 Pro\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 20,\n\t\t\t\toutput: 80,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 100000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/o4-mini\": {\n\t\t\tid: \"openai/o4-mini\",\n\t\t\tname: \"OpenAI: o4 Mini\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.1,\n\t\t\t\toutput: 4.4,\n\t\t\t\tcacheRead: 0.275,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 100000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/o4-mini-deep-research\": {\n\t\t\tid: \"openai/o4-mini-deep-research\",\n\t\t\tname: \"OpenAI: o4 Mini Deep Research\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 2,\n\t\t\t\toutput: 8,\n\t\t\t\tcacheRead: 0.5,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 100000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t\t\"openai/o4-mini-high\": {\n\t\t\tid: \"openai/o4-mini-high\",\n\t\t\tname: \"OpenAI: o4 Mini High\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tprovider: \"openrouter\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\treasoning: true,\n\t\t\tinput: [\"text\", \"image\"],\n\t\t\tcost: {\n\t\t\t\tinput: 1.1,\n\t\t\t\toutput: 4.4,\n\t\t\t\tcacheRead: 0.275,\n\t\t\t\tcacheWrite: 0,\n\t\t\t},\n\t\t\tcontextWindow: 200000,\n\t\t\tmaxTokens: 100000,\n\t\t} satisfies Model<\"openai-completions\">,\n\t},\n} as const;\n"]}
|
package/dist/models.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { MODELS } from "./models.generated.js";
|
|
2
|
+
import { SUPPORTED_PROVIDERS } from "./types.js";
|
|
3
|
+
const modelRegistry = new Map();
|
|
4
|
+
const supportedProviders = new Set(SUPPORTED_PROVIDERS);
|
|
5
|
+
// Initialize registry from MODELS on module load
|
|
6
|
+
for (const [provider, models] of Object.entries(MODELS)) {
|
|
7
|
+
if (!supportedProviders.has(provider)) {
|
|
8
|
+
continue;
|
|
9
|
+
}
|
|
10
|
+
const providerModels = new Map();
|
|
11
|
+
for (const [id, model] of Object.entries(models)) {
|
|
12
|
+
providerModels.set(id, model);
|
|
13
|
+
}
|
|
14
|
+
modelRegistry.set(provider, providerModels);
|
|
15
|
+
}
|
|
16
|
+
export function getModel(provider, modelId) {
|
|
17
|
+
const providerModels = modelRegistry.get(provider);
|
|
18
|
+
return providerModels?.get(modelId);
|
|
19
|
+
}
|
|
20
|
+
export function getProviders() {
|
|
21
|
+
return Array.from(modelRegistry.keys());
|
|
22
|
+
}
|
|
23
|
+
export function getModels(provider) {
|
|
24
|
+
const models = modelRegistry.get(provider);
|
|
25
|
+
return models ? Array.from(models.values()) : [];
|
|
26
|
+
}
|
|
27
|
+
export function calculateCost(model, usage) {
|
|
28
|
+
usage.cost.input = (model.cost.input / 1000000) * usage.input;
|
|
29
|
+
usage.cost.output = (model.cost.output / 1000000) * usage.output;
|
|
30
|
+
usage.cost.cacheRead = (model.cost.cacheRead / 1000000) * usage.cacheRead;
|
|
31
|
+
usage.cost.cacheWrite = (model.cost.cacheWrite / 1000000) * usage.cacheWrite;
|
|
32
|
+
usage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;
|
|
33
|
+
return usage.cost;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if a model supports xhigh thinking level.
|
|
37
|
+
*
|
|
38
|
+
* Supported today:
|
|
39
|
+
* - GPT-5.2 / GPT-5.3 / GPT-5.4 model families
|
|
40
|
+
* - Opus 4.6 models (xhigh maps to adaptive effort "max" on Anthropic-compatible providers)
|
|
41
|
+
*/
|
|
42
|
+
export function supportsXhigh(model) {
|
|
43
|
+
if (model.id.includes("gpt-5.2") || model.id.includes("gpt-5.3") || model.id.includes("gpt-5.4")) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
if (model.id.includes("opus-4-6") || model.id.includes("opus-4.6")) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if two models are equal by comparing both their id and provider.
|
|
53
|
+
* Returns false if either model is null or undefined.
|
|
54
|
+
*/
|
|
55
|
+
export function modelsAreEqual(a, b) {
|
|
56
|
+
if (!a || !b)
|
|
57
|
+
return false;
|
|
58
|
+
return a.id === b.id && a.provider === b.provider;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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","sourcesContent":["import { MODELS } from \"./models.generated.js\";\nimport { type Api, type KnownProvider, type Model, SUPPORTED_PROVIDERS, type Usage } from \"./types.js\";\n\nconst modelRegistry: Map<string, Map<string, Model<Api>>> = new Map();\nconst supportedProviders = new Set<string>(SUPPORTED_PROVIDERS);\n\n// Initialize registry from MODELS on module load\nfor (const [provider, models] of Object.entries(MODELS)) {\n\tif (!supportedProviders.has(provider)) {\n\t\tcontinue;\n\t}\n\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 * - 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 (model.id.includes(\"opus-4-6\") || model.id.includes(\"opus-4.6\")) {\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"]}
|
package/dist/oauth.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC","sourcesContent":["export * from \"./utils/oauth/index.js\";\n"]}
|
package/dist/oauth.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC","sourcesContent":["export * from \"./utils/oauth/index.js\";\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
2
|
+
import type { SimpleStreamOptions, StreamFunction, StreamOptions } from "../types.js";
|
|
3
|
+
export type AnthropicEffort = "low" | "medium" | "high" | "max";
|
|
4
|
+
export interface AnthropicOptions extends StreamOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Enable extended thinking.
|
|
7
|
+
* For Opus 4.6 and Sonnet 4.6: uses adaptive thinking (model decides when/how much to think).
|
|
8
|
+
* For older models: uses budget-based thinking with thinkingBudgetTokens.
|
|
9
|
+
*/
|
|
10
|
+
thinkingEnabled?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Token budget for extended thinking (older models only).
|
|
13
|
+
* Ignored for Opus 4.6 and Sonnet 4.6, which use adaptive thinking.
|
|
14
|
+
*/
|
|
15
|
+
thinkingBudgetTokens?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Effort level for adaptive thinking (Opus 4.6 and Sonnet 4.6).
|
|
18
|
+
* Controls how much thinking Claude allocates:
|
|
19
|
+
* - "max": Always thinks with no constraints (Opus 4.6 only)
|
|
20
|
+
* - "high": Always thinks, deep reasoning (default)
|
|
21
|
+
* - "medium": Moderate thinking, may skip for simple queries
|
|
22
|
+
* - "low": Minimal thinking, skips for simple tasks
|
|
23
|
+
* Ignored for older models.
|
|
24
|
+
*/
|
|
25
|
+
effort?: AnthropicEffort;
|
|
26
|
+
interleavedThinking?: boolean;
|
|
27
|
+
toolChoice?: "auto" | "any" | "none" | {
|
|
28
|
+
type: "tool";
|
|
29
|
+
name: string;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Pre-built Anthropic client instance. When provided, skips internal client
|
|
33
|
+
* construction entirely. Use this to inject alternative SDK clients such as
|
|
34
|
+
* `AnthropicVertex` that shares the same messaging API.
|
|
35
|
+
*/
|
|
36
|
+
client?: Anthropic;
|
|
37
|
+
}
|
|
38
|
+
export declare const streamAnthropic: StreamFunction<"anthropic-messages", AnthropicOptions>;
|
|
39
|
+
export declare const streamSimpleAnthropic: StreamFunction<"anthropic-messages", SimpleStreamOptions>;
|
|
40
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAQ1C,OAAO,KAAK,EAQX,mBAAmB,EAEnB,cAAc,EACd,aAAa,EAMb,MAAM,aAAa,CAAC;AAiIrB,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhE,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACtD;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACnB;AAYD,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,oBAAoB,EAAE,gBAAgB,CAkPlF,CAAC;AAoCF,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,oBAAoB,EAAE,mBAAmB,CAuC3F,CAAC","sourcesContent":["import Anthropic from \"@anthropic-ai/sdk\";\nimport type {\n\tContentBlockParam,\n\tMessageCreateParamsStreaming,\n\tMessageParam,\n} from \"@anthropic-ai/sdk/resources/messages.js\";\nimport { getEnvApiKey } from \"../env-api-keys.js\";\nimport { calculateCost } from \"../models.js\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tCacheRetention,\n\tContext,\n\tImageContent,\n\tMessage,\n\tModel,\n\tSimpleStreamOptions,\n\tStopReason,\n\tStreamFunction,\n\tStreamOptions,\n\tTextContent,\n\tThinkingContent,\n\tTool,\n\tToolCall,\n\tToolResultMessage,\n} from \"../types.js\";\nimport { AssistantMessageEventStream } from \"../utils/event-stream.js\";\nimport { parseStreamingJson } from \"../utils/json-parse.js\";\nimport { sanitizeSurrogates } from \"../utils/sanitize-unicode.js\";\n\nimport { buildCopilotDynamicHeaders, hasCopilotVisionInput } from \"./github-copilot-headers.js\";\nimport { adjustMaxTokensForThinking, buildBaseOptions } from \"./simple-options.js\";\nimport { transformMessages } from \"./transform-messages.js\";\n\n/**\n * Resolve cache retention preference.\n * Defaults to \"short\" and uses PI_CACHE_RETENTION for backward compatibility.\n */\nfunction resolveCacheRetention(cacheRetention?: CacheRetention): CacheRetention {\n\tif (cacheRetention) {\n\t\treturn cacheRetention;\n\t}\n\tif (typeof process !== \"undefined\" && process.env.PI_CACHE_RETENTION === \"long\") {\n\t\treturn \"long\";\n\t}\n\treturn \"short\";\n}\n\nfunction getCacheControl(\n\tbaseUrl: string,\n\tcacheRetention?: CacheRetention,\n): { retention: CacheRetention; cacheControl?: { type: \"ephemeral\"; ttl?: \"1h\" } } {\n\tconst retention = resolveCacheRetention(cacheRetention);\n\tif (retention === \"none\") {\n\t\treturn { retention };\n\t}\n\tconst ttl = retention === \"long\" && baseUrl.includes(\"api.anthropic.com\") ? \"1h\" : undefined;\n\treturn {\n\t\tretention,\n\t\tcacheControl: { type: \"ephemeral\", ...(ttl && { ttl }) },\n\t};\n}\n\n// Stealth mode: Mimic Claude Code's tool naming exactly\nconst claudeCodeVersion = \"2.1.75\";\n\n// Claude Code 2.x tool names (canonical casing)\n// Source: https://cchistory.mariozechner.at/data/prompts-2.1.11.md\n// To update: https://github.com/badlogic/cchistory\nconst claudeCodeTools = [\n\t\"Read\",\n\t\"Write\",\n\t\"Edit\",\n\t\"Bash\",\n\t\"Grep\",\n\t\"Glob\",\n\t\"AskUserQuestion\",\n\t\"EnterPlanMode\",\n\t\"ExitPlanMode\",\n\t\"KillShell\",\n\t\"NotebookEdit\",\n\t\"Skill\",\n\t\"Task\",\n\t\"TaskOutput\",\n\t\"TodoWrite\",\n\t\"WebFetch\",\n\t\"WebSearch\",\n];\n\nconst ccToolLookup = new Map(claudeCodeTools.map((t) => [t.toLowerCase(), t]));\n\n// Convert tool name to CC canonical casing if it matches (case-insensitive)\nconst toClaudeCodeName = (name: string) => ccToolLookup.get(name.toLowerCase()) ?? name;\nconst fromClaudeCodeName = (name: string, tools?: Tool[]) => {\n\tif (tools && tools.length > 0) {\n\t\tconst lowerName = name.toLowerCase();\n\t\tconst matchedTool = tools.find((tool) => tool.name.toLowerCase() === lowerName);\n\t\tif (matchedTool) return matchedTool.name;\n\t}\n\treturn name;\n};\n\n/**\n * Convert content blocks to Anthropic API format\n */\nfunction convertContentBlocks(content: (TextContent | ImageContent)[]):\n\t| string\n\t| Array<\n\t\t\t| { type: \"text\"; text: string }\n\t\t\t| {\n\t\t\t\t\ttype: \"image\";\n\t\t\t\t\tsource: {\n\t\t\t\t\t\ttype: \"base64\";\n\t\t\t\t\t\tmedia_type: \"image/jpeg\" | \"image/png\" | \"image/gif\" | \"image/webp\";\n\t\t\t\t\t\tdata: string;\n\t\t\t\t\t};\n\t\t\t }\n\t > {\n\t// If only text blocks, return as concatenated string for simplicity\n\tconst hasImages = content.some((c) => c.type === \"image\");\n\tif (!hasImages) {\n\t\treturn sanitizeSurrogates(content.map((c) => (c as TextContent).text).join(\"\\n\"));\n\t}\n\n\t// If we have images, convert to content block array\n\tconst blocks = content.map((block) => {\n\t\tif (block.type === \"text\") {\n\t\t\treturn {\n\t\t\t\ttype: \"text\" as const,\n\t\t\t\ttext: sanitizeSurrogates(block.text),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\ttype: \"image\" as const,\n\t\t\tsource: {\n\t\t\t\ttype: \"base64\" as const,\n\t\t\t\tmedia_type: block.mimeType as \"image/jpeg\" | \"image/png\" | \"image/gif\" | \"image/webp\",\n\t\t\t\tdata: block.data,\n\t\t\t},\n\t\t};\n\t});\n\n\t// If only images (no text), add placeholder text block\n\tconst hasText = blocks.some((b) => b.type === \"text\");\n\tif (!hasText) {\n\t\tblocks.unshift({\n\t\t\ttype: \"text\" as const,\n\t\t\ttext: \"(see attached image)\",\n\t\t});\n\t}\n\n\treturn blocks;\n}\n\nexport type AnthropicEffort = \"low\" | \"medium\" | \"high\" | \"max\";\n\nexport interface AnthropicOptions extends StreamOptions {\n\t/**\n\t * Enable extended thinking.\n\t * For Opus 4.6 and Sonnet 4.6: uses adaptive thinking (model decides when/how much to think).\n\t * For older models: uses budget-based thinking with thinkingBudgetTokens.\n\t */\n\tthinkingEnabled?: boolean;\n\t/**\n\t * Token budget for extended thinking (older models only).\n\t * Ignored for Opus 4.6 and Sonnet 4.6, which use adaptive thinking.\n\t */\n\tthinkingBudgetTokens?: number;\n\t/**\n\t * Effort level for adaptive thinking (Opus 4.6 and Sonnet 4.6).\n\t * Controls how much thinking Claude allocates:\n\t * - \"max\": Always thinks with no constraints (Opus 4.6 only)\n\t * - \"high\": Always thinks, deep reasoning (default)\n\t * - \"medium\": Moderate thinking, may skip for simple queries\n\t * - \"low\": Minimal thinking, skips for simple tasks\n\t * Ignored for older models.\n\t */\n\teffort?: AnthropicEffort;\n\tinterleavedThinking?: boolean;\n\ttoolChoice?: \"auto\" | \"any\" | \"none\" | { type: \"tool\"; name: string };\n\t/**\n\t * Pre-built Anthropic client instance. When provided, skips internal client\n\t * construction entirely. Use this to inject alternative SDK clients such as\n\t * `AnthropicVertex` that shares the same messaging API.\n\t */\n\tclient?: Anthropic;\n}\n\nfunction mergeHeaders(...headerSources: (Record<string, string> | undefined)[]): Record<string, string> {\n\tconst merged: Record<string, string> = {};\n\tfor (const headers of headerSources) {\n\t\tif (headers) {\n\t\t\tObject.assign(merged, headers);\n\t\t}\n\t}\n\treturn merged;\n}\n\nexport const streamAnthropic: StreamFunction<\"anthropic-messages\", AnthropicOptions> = (\n\tmodel: Model<\"anthropic-messages\">,\n\tcontext: Context,\n\toptions?: AnthropicOptions,\n): AssistantMessageEventStream => {\n\tconst stream = new AssistantMessageEventStream();\n\n\t(async () => {\n\t\tconst output: AssistantMessage = {\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [],\n\t\t\tapi: model.api as Api,\n\t\t\tprovider: model.provider,\n\t\t\tmodel: model.id,\n\t\t\tusage: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: \"stop\",\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\ttry {\n\t\t\tlet client: Anthropic;\n\t\t\tlet isOAuth: boolean;\n\n\t\t\tif (options?.client) {\n\t\t\t\tclient = options.client;\n\t\t\t\tisOAuth = false;\n\t\t\t} else {\n\t\t\t\tconst apiKey = options?.apiKey ?? getEnvApiKey(model.provider) ?? \"\";\n\n\t\t\t\tlet copilotDynamicHeaders: Record<string, string> | undefined;\n\t\t\t\tif (model.provider === \"github-copilot\") {\n\t\t\t\t\tconst hasImages = hasCopilotVisionInput(context.messages);\n\t\t\t\t\tcopilotDynamicHeaders = buildCopilotDynamicHeaders({\n\t\t\t\t\t\tmessages: context.messages,\n\t\t\t\t\t\thasImages,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst created = createClient(\n\t\t\t\t\tmodel,\n\t\t\t\t\tapiKey,\n\t\t\t\t\toptions?.interleavedThinking ?? true,\n\t\t\t\t\toptions?.headers,\n\t\t\t\t\tcopilotDynamicHeaders,\n\t\t\t\t);\n\t\t\t\tclient = created.client;\n\t\t\t\tisOAuth = created.isOAuthToken;\n\t\t\t}\n\t\t\tlet params = buildParams(model, context, isOAuth, options);\n\t\t\tconst nextParams = await options?.onPayload?.(params, model);\n\t\t\tif (nextParams !== undefined) {\n\t\t\t\tparams = nextParams as MessageCreateParamsStreaming;\n\t\t\t}\n\t\t\tconst anthropicStream = client.messages.stream({ ...params, stream: true }, { signal: options?.signal });\n\t\t\tstream.push({ type: \"start\", partial: output });\n\n\t\t\ttype Block = (ThinkingContent | TextContent | (ToolCall & { partialJson: string })) & { index: number };\n\t\t\tconst blocks = output.content as Block[];\n\n\t\t\tfor await (const event of anthropicStream) {\n\t\t\t\tif (event.type === \"message_start\") {\n\t\t\t\t\toutput.responseId = event.message.id;\n\t\t\t\t\t// Capture initial token usage from message_start event\n\t\t\t\t\t// This ensures we have input token counts even if the stream is aborted early\n\t\t\t\t\toutput.usage.input = event.message.usage.input_tokens || 0;\n\t\t\t\t\toutput.usage.output = event.message.usage.output_tokens || 0;\n\t\t\t\t\toutput.usage.cacheRead = event.message.usage.cache_read_input_tokens || 0;\n\t\t\t\t\toutput.usage.cacheWrite = event.message.usage.cache_creation_input_tokens || 0;\n\t\t\t\t\t// Anthropic doesn't provide total_tokens, compute from components\n\t\t\t\t\toutput.usage.totalTokens =\n\t\t\t\t\t\toutput.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite;\n\t\t\t\t\tcalculateCost(model, output.usage);\n\t\t\t\t} else if (event.type === \"content_block_start\") {\n\t\t\t\t\tif (event.content_block.type === \"text\") {\n\t\t\t\t\t\tconst block: Block = {\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\tindex: event.index,\n\t\t\t\t\t\t};\n\t\t\t\t\t\toutput.content.push(block);\n\t\t\t\t\t\tstream.push({ type: \"text_start\", contentIndex: output.content.length - 1, partial: output });\n\t\t\t\t\t} else if (event.content_block.type === \"thinking\") {\n\t\t\t\t\t\tconst block: Block = {\n\t\t\t\t\t\t\ttype: \"thinking\",\n\t\t\t\t\t\t\tthinking: \"\",\n\t\t\t\t\t\t\tthinkingSignature: \"\",\n\t\t\t\t\t\t\tindex: event.index,\n\t\t\t\t\t\t};\n\t\t\t\t\t\toutput.content.push(block);\n\t\t\t\t\t\tstream.push({ type: \"thinking_start\", contentIndex: output.content.length - 1, partial: output });\n\t\t\t\t\t} else if (event.content_block.type === \"redacted_thinking\") {\n\t\t\t\t\t\tconst block: Block = {\n\t\t\t\t\t\t\ttype: \"thinking\",\n\t\t\t\t\t\t\tthinking: \"[Reasoning redacted]\",\n\t\t\t\t\t\t\tthinkingSignature: event.content_block.data,\n\t\t\t\t\t\t\tredacted: true,\n\t\t\t\t\t\t\tindex: event.index,\n\t\t\t\t\t\t};\n\t\t\t\t\t\toutput.content.push(block);\n\t\t\t\t\t\tstream.push({ type: \"thinking_start\", contentIndex: output.content.length - 1, partial: output });\n\t\t\t\t\t} else if (event.content_block.type === \"tool_use\") {\n\t\t\t\t\t\tconst block: Block = {\n\t\t\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\t\t\tid: event.content_block.id,\n\t\t\t\t\t\t\tname: isOAuth\n\t\t\t\t\t\t\t\t? fromClaudeCodeName(event.content_block.name, context.tools)\n\t\t\t\t\t\t\t\t: event.content_block.name,\n\t\t\t\t\t\t\targuments: (event.content_block.input as Record<string, any>) ?? {},\n\t\t\t\t\t\t\tpartialJson: \"\",\n\t\t\t\t\t\t\tindex: event.index,\n\t\t\t\t\t\t};\n\t\t\t\t\t\toutput.content.push(block);\n\t\t\t\t\t\tstream.push({ type: \"toolcall_start\", contentIndex: output.content.length - 1, partial: output });\n\t\t\t\t\t}\n\t\t\t\t} else if (event.type === \"content_block_delta\") {\n\t\t\t\t\tif (event.delta.type === \"text_delta\") {\n\t\t\t\t\t\tconst index = blocks.findIndex((b) => b.index === event.index);\n\t\t\t\t\t\tconst block = blocks[index];\n\t\t\t\t\t\tif (block && block.type === \"text\") {\n\t\t\t\t\t\t\tblock.text += event.delta.text;\n\t\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\t\t\tcontentIndex: index,\n\t\t\t\t\t\t\t\tdelta: event.delta.text,\n\t\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (event.delta.type === \"thinking_delta\") {\n\t\t\t\t\t\tconst index = blocks.findIndex((b) => b.index === event.index);\n\t\t\t\t\t\tconst block = blocks[index];\n\t\t\t\t\t\tif (block && block.type === \"thinking\") {\n\t\t\t\t\t\t\tblock.thinking += event.delta.thinking;\n\t\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\t\t\tcontentIndex: index,\n\t\t\t\t\t\t\t\tdelta: event.delta.thinking,\n\t\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (event.delta.type === \"input_json_delta\") {\n\t\t\t\t\t\tconst index = blocks.findIndex((b) => b.index === event.index);\n\t\t\t\t\t\tconst block = blocks[index];\n\t\t\t\t\t\tif (block && block.type === \"toolCall\") {\n\t\t\t\t\t\t\tblock.partialJson += event.delta.partial_json;\n\t\t\t\t\t\t\tblock.arguments = parseStreamingJson(block.partialJson);\n\t\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\t\t\t\tcontentIndex: index,\n\t\t\t\t\t\t\t\tdelta: event.delta.partial_json,\n\t\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (event.delta.type === \"signature_delta\") {\n\t\t\t\t\t\tconst index = blocks.findIndex((b) => b.index === event.index);\n\t\t\t\t\t\tconst block = blocks[index];\n\t\t\t\t\t\tif (block && block.type === \"thinking\") {\n\t\t\t\t\t\t\tblock.thinkingSignature = block.thinkingSignature || \"\";\n\t\t\t\t\t\t\tblock.thinkingSignature += event.delta.signature;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (event.type === \"content_block_stop\") {\n\t\t\t\t\tconst index = blocks.findIndex((b) => b.index === event.index);\n\t\t\t\t\tconst block = blocks[index];\n\t\t\t\t\tif (block) {\n\t\t\t\t\t\tdelete (block as any).index;\n\t\t\t\t\t\tif (block.type === \"text\") {\n\t\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\t\ttype: \"text_end\",\n\t\t\t\t\t\t\t\tcontentIndex: index,\n\t\t\t\t\t\t\t\tcontent: block.text,\n\t\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if (block.type === \"thinking\") {\n\t\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\t\ttype: \"thinking_end\",\n\t\t\t\t\t\t\t\tcontentIndex: index,\n\t\t\t\t\t\t\t\tcontent: block.thinking,\n\t\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if (block.type === \"toolCall\") {\n\t\t\t\t\t\t\tblock.arguments = parseStreamingJson(block.partialJson);\n\t\t\t\t\t\t\tdelete (block as any).partialJson;\n\t\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\t\t\t\tcontentIndex: index,\n\t\t\t\t\t\t\t\ttoolCall: block,\n\t\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (event.type === \"message_delta\") {\n\t\t\t\t\tif (event.delta.stop_reason) {\n\t\t\t\t\t\toutput.stopReason = mapStopReason(event.delta.stop_reason);\n\t\t\t\t\t}\n\t\t\t\t\t// Only update usage fields if present (not null).\n\t\t\t\t\t// Preserves input_tokens from message_start when proxies omit it in message_delta.\n\t\t\t\t\tif (event.usage.input_tokens != null) {\n\t\t\t\t\t\toutput.usage.input = event.usage.input_tokens;\n\t\t\t\t\t}\n\t\t\t\t\tif (event.usage.output_tokens != null) {\n\t\t\t\t\t\toutput.usage.output = event.usage.output_tokens;\n\t\t\t\t\t}\n\t\t\t\t\tif (event.usage.cache_read_input_tokens != null) {\n\t\t\t\t\t\toutput.usage.cacheRead = event.usage.cache_read_input_tokens;\n\t\t\t\t\t}\n\t\t\t\t\tif (event.usage.cache_creation_input_tokens != null) {\n\t\t\t\t\t\toutput.usage.cacheWrite = event.usage.cache_creation_input_tokens;\n\t\t\t\t\t}\n\t\t\t\t\t// Anthropic doesn't provide total_tokens, compute from components\n\t\t\t\t\toutput.usage.totalTokens =\n\t\t\t\t\t\toutput.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite;\n\t\t\t\t\tcalculateCost(model, output.usage);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options?.signal?.aborted) {\n\t\t\t\tthrow new Error(\"Request was aborted\");\n\t\t\t}\n\n\t\t\tif (output.stopReason === \"aborted\" || output.stopReason === \"error\") {\n\t\t\t\tthrow new Error(\"An unknown error occurred\");\n\t\t\t}\n\n\t\t\tstream.push({ type: \"done\", reason: output.stopReason, message: output });\n\t\t\tstream.end();\n\t\t} catch (error) {\n\t\t\tfor (const block of output.content) delete (block as any).index;\n\t\t\toutput.stopReason = options?.signal?.aborted ? \"aborted\" : \"error\";\n\t\t\toutput.errorMessage = error instanceof Error ? error.message : JSON.stringify(error);\n\t\t\tstream.push({ type: \"error\", reason: output.stopReason, error: output });\n\t\t\tstream.end();\n\t\t}\n\t})();\n\n\treturn stream;\n};\n\n/**\n * Check if a model supports adaptive thinking (Opus 4.6 and Sonnet 4.6)\n */\nfunction supportsAdaptiveThinking(modelId: string): boolean {\n\t// Opus 4.6 and Sonnet 4.6 model IDs (with or without date suffix)\n\treturn (\n\t\tmodelId.includes(\"opus-4-6\") ||\n\t\tmodelId.includes(\"opus-4.6\") ||\n\t\tmodelId.includes(\"sonnet-4-6\") ||\n\t\tmodelId.includes(\"sonnet-4.6\")\n\t);\n}\n\n/**\n * Map ThinkingLevel to Anthropic effort levels for adaptive thinking.\n * Note: effort \"max\" is only valid on Opus 4.6.\n */\nfunction mapThinkingLevelToEffort(level: SimpleStreamOptions[\"reasoning\"], modelId: string): AnthropicEffort {\n\tswitch (level) {\n\t\tcase \"minimal\":\n\t\t\treturn \"low\";\n\t\tcase \"low\":\n\t\t\treturn \"low\";\n\t\tcase \"medium\":\n\t\t\treturn \"medium\";\n\t\tcase \"high\":\n\t\t\treturn \"high\";\n\t\tcase \"xhigh\":\n\t\t\treturn modelId.includes(\"opus-4-6\") || modelId.includes(\"opus-4.6\") ? \"max\" : \"high\";\n\t\tdefault:\n\t\t\treturn \"high\";\n\t}\n}\n\nexport const streamSimpleAnthropic: StreamFunction<\"anthropic-messages\", SimpleStreamOptions> = (\n\tmodel: Model<\"anthropic-messages\">,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n): AssistantMessageEventStream => {\n\tconst apiKey = options?.apiKey || getEnvApiKey(model.provider);\n\tif (!apiKey) {\n\t\tthrow new Error(`No API key for provider: ${model.provider}`);\n\t}\n\n\tconst base = buildBaseOptions(model, options, apiKey);\n\tif (!options?.reasoning) {\n\t\treturn streamAnthropic(model, context, { ...base, thinkingEnabled: false } satisfies AnthropicOptions);\n\t}\n\n\t// For Opus 4.6 and Sonnet 4.6: use adaptive thinking with effort level\n\t// For older models: use budget-based thinking\n\tif (supportsAdaptiveThinking(model.id)) {\n\t\tconst effort = mapThinkingLevelToEffort(options.reasoning, model.id);\n\t\treturn streamAnthropic(model, context, {\n\t\t\t...base,\n\t\t\tthinkingEnabled: true,\n\t\t\teffort,\n\t\t} satisfies AnthropicOptions);\n\t}\n\n\tconst adjusted = adjustMaxTokensForThinking(\n\t\tbase.maxTokens || 0,\n\t\tmodel.maxTokens,\n\t\toptions.reasoning,\n\t\toptions.thinkingBudgets,\n\t);\n\n\treturn streamAnthropic(model, context, {\n\t\t...base,\n\t\tmaxTokens: adjusted.maxTokens,\n\t\tthinkingEnabled: true,\n\t\tthinkingBudgetTokens: adjusted.thinkingBudget,\n\t} satisfies AnthropicOptions);\n};\n\nfunction isOAuthToken(apiKey: string): boolean {\n\treturn apiKey.includes(\"sk-ant-oat\");\n}\n\nfunction createClient(\n\tmodel: Model<\"anthropic-messages\">,\n\tapiKey: string,\n\tinterleavedThinking: boolean,\n\toptionsHeaders?: Record<string, string>,\n\tdynamicHeaders?: Record<string, string>,\n): { client: Anthropic; isOAuthToken: boolean } {\n\t// Adaptive thinking models (Opus 4.6, Sonnet 4.6) have interleaved thinking built-in.\n\t// The beta header is deprecated on Opus 4.6 and redundant on Sonnet 4.6, so skip it.\n\tconst needsInterleavedBeta = interleavedThinking && !supportsAdaptiveThinking(model.id);\n\n\t// Copilot: Bearer auth, selective betas (no fine-grained-tool-streaming)\n\tif (model.provider === \"github-copilot\") {\n\t\tconst betaFeatures: string[] = [];\n\t\tif (needsInterleavedBeta) {\n\t\t\tbetaFeatures.push(\"interleaved-thinking-2025-05-14\");\n\t\t}\n\n\t\tconst client = new Anthropic({\n\t\t\tapiKey: null,\n\t\t\tauthToken: apiKey,\n\t\t\tbaseURL: model.baseUrl,\n\t\t\tdangerouslyAllowBrowser: true,\n\t\t\tdefaultHeaders: mergeHeaders(\n\t\t\t\t{\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"anthropic-dangerous-direct-browser-access\": \"true\",\n\t\t\t\t\t...(betaFeatures.length > 0 ? { \"anthropic-beta\": betaFeatures.join(\",\") } : {}),\n\t\t\t\t},\n\t\t\t\tmodel.headers,\n\t\t\t\tdynamicHeaders,\n\t\t\t\toptionsHeaders,\n\t\t\t),\n\t\t});\n\n\t\treturn { client, isOAuthToken: false };\n\t}\n\n\tconst betaFeatures = [\"fine-grained-tool-streaming-2025-05-14\"];\n\tif (needsInterleavedBeta) {\n\t\tbetaFeatures.push(\"interleaved-thinking-2025-05-14\");\n\t}\n\n\t// OAuth: Bearer auth, Claude Code identity headers\n\tif (isOAuthToken(apiKey)) {\n\t\tconst client = new Anthropic({\n\t\t\tapiKey: null,\n\t\t\tauthToken: apiKey,\n\t\t\tbaseURL: model.baseUrl,\n\t\t\tdangerouslyAllowBrowser: true,\n\t\t\tdefaultHeaders: mergeHeaders(\n\t\t\t\t{\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"anthropic-dangerous-direct-browser-access\": \"true\",\n\t\t\t\t\t\"anthropic-beta\": `claude-code-20250219,oauth-2025-04-20,${betaFeatures.join(\",\")}`,\n\t\t\t\t\t\"user-agent\": `claude-cli/${claudeCodeVersion}`,\n\t\t\t\t\t\"x-app\": \"cli\",\n\t\t\t\t},\n\t\t\t\tmodel.headers,\n\t\t\t\toptionsHeaders,\n\t\t\t),\n\t\t});\n\n\t\treturn { client, isOAuthToken: true };\n\t}\n\n\t// API key auth\n\tconst client = new Anthropic({\n\t\tapiKey,\n\t\tbaseURL: model.baseUrl,\n\t\tdangerouslyAllowBrowser: true,\n\t\tdefaultHeaders: mergeHeaders(\n\t\t\t{\n\t\t\t\taccept: \"application/json\",\n\t\t\t\t\"anthropic-dangerous-direct-browser-access\": \"true\",\n\t\t\t\t\"anthropic-beta\": betaFeatures.join(\",\"),\n\t\t\t},\n\t\t\tmodel.headers,\n\t\t\toptionsHeaders,\n\t\t),\n\t});\n\n\treturn { client, isOAuthToken: false };\n}\n\nfunction buildParams(\n\tmodel: Model<\"anthropic-messages\">,\n\tcontext: Context,\n\tisOAuthToken: boolean,\n\toptions?: AnthropicOptions,\n): MessageCreateParamsStreaming {\n\tconst { cacheControl } = getCacheControl(model.baseUrl, options?.cacheRetention);\n\tconst params: MessageCreateParamsStreaming = {\n\t\tmodel: model.id,\n\t\tmessages: convertMessages(context.messages, model, isOAuthToken, cacheControl),\n\t\tmax_tokens: options?.maxTokens || (model.maxTokens / 3) | 0,\n\t\tstream: true,\n\t};\n\n\t// For OAuth tokens, we MUST include Claude Code identity\n\tif (isOAuthToken) {\n\t\tparams.system = [\n\t\t\t{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: \"You are Claude Code, Anthropic's official CLI for Claude.\",\n\t\t\t\t...(cacheControl ? { cache_control: cacheControl } : {}),\n\t\t\t},\n\t\t];\n\t\tif (context.systemPrompt) {\n\t\t\tparams.system.push({\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: sanitizeSurrogates(context.systemPrompt),\n\t\t\t\t...(cacheControl ? { cache_control: cacheControl } : {}),\n\t\t\t});\n\t\t}\n\t} else if (context.systemPrompt) {\n\t\t// Add cache control to system prompt for non-OAuth tokens\n\t\tparams.system = [\n\t\t\t{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: sanitizeSurrogates(context.systemPrompt),\n\t\t\t\t...(cacheControl ? { cache_control: cacheControl } : {}),\n\t\t\t},\n\t\t];\n\t}\n\n\t// Temperature is incompatible with extended thinking (adaptive or budget-based).\n\tif (options?.temperature !== undefined && !options?.thinkingEnabled) {\n\t\tparams.temperature = options.temperature;\n\t}\n\n\tif (context.tools) {\n\t\tparams.tools = convertTools(context.tools, isOAuthToken);\n\t}\n\n\t// Configure thinking mode: adaptive (Opus 4.6 and Sonnet 4.6),\n\t// budget-based (older models), or explicitly disabled.\n\tif (model.reasoning) {\n\t\tif (options?.thinkingEnabled) {\n\t\t\tif (supportsAdaptiveThinking(model.id)) {\n\t\t\t\t// Adaptive thinking: Claude decides when and how much to think\n\t\t\t\tparams.thinking = { type: \"adaptive\" };\n\t\t\t\tif (options.effort) {\n\t\t\t\t\tparams.output_config = { effort: options.effort };\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Budget-based thinking for older models\n\t\t\t\tparams.thinking = {\n\t\t\t\t\ttype: \"enabled\",\n\t\t\t\t\tbudget_tokens: options.thinkingBudgetTokens || 1024,\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (options?.thinkingEnabled === false) {\n\t\t\tparams.thinking = { type: \"disabled\" };\n\t\t}\n\t}\n\n\tif (options?.metadata) {\n\t\tconst userId = options.metadata.user_id;\n\t\tif (typeof userId === \"string\") {\n\t\t\tparams.metadata = { user_id: userId };\n\t\t}\n\t}\n\n\tif (options?.toolChoice) {\n\t\tif (typeof options.toolChoice === \"string\") {\n\t\t\tparams.tool_choice = { type: options.toolChoice };\n\t\t} else {\n\t\t\tparams.tool_choice = options.toolChoice;\n\t\t}\n\t}\n\n\treturn params;\n}\n\n// Normalize tool call IDs to match Anthropic's required pattern and length\nfunction normalizeToolCallId(id: string): string {\n\treturn id.replace(/[^a-zA-Z0-9_-]/g, \"_\").slice(0, 64);\n}\n\nfunction convertMessages(\n\tmessages: Message[],\n\tmodel: Model<\"anthropic-messages\">,\n\tisOAuthToken: boolean,\n\tcacheControl?: { type: \"ephemeral\"; ttl?: \"1h\" },\n): MessageParam[] {\n\tconst params: MessageParam[] = [];\n\n\t// Transform messages for cross-provider compatibility\n\tconst transformedMessages = transformMessages(messages, model, normalizeToolCallId);\n\n\tfor (let i = 0; i < transformedMessages.length; i++) {\n\t\tconst msg = transformedMessages[i];\n\n\t\tif (msg.role === \"user\") {\n\t\t\tif (typeof msg.content === \"string\") {\n\t\t\t\tif (msg.content.trim().length > 0) {\n\t\t\t\t\tparams.push({\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: sanitizeSurrogates(msg.content),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst blocks: ContentBlockParam[] = msg.content.map((item) => {\n\t\t\t\t\tif (item.type === \"text\") {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: sanitizeSurrogates(item.text),\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: \"image\",\n\t\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\t\ttype: \"base64\",\n\t\t\t\t\t\t\t\tmedia_type: item.mimeType as \"image/jpeg\" | \"image/png\" | \"image/gif\" | \"image/webp\",\n\t\t\t\t\t\t\t\tdata: item.data,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlet filteredBlocks = !model?.input.includes(\"image\") ? blocks.filter((b) => b.type !== \"image\") : blocks;\n\t\t\t\tfilteredBlocks = filteredBlocks.filter((b) => {\n\t\t\t\t\tif (b.type === \"text\") {\n\t\t\t\t\t\treturn b.text.trim().length > 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t\tif (filteredBlocks.length === 0) continue;\n\t\t\t\tparams.push({\n\t\t\t\t\trole: \"user\",\n\t\t\t\t\tcontent: filteredBlocks,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (msg.role === \"assistant\") {\n\t\t\tconst blocks: ContentBlockParam[] = [];\n\n\t\t\tfor (const block of msg.content) {\n\t\t\t\tif (block.type === \"text\") {\n\t\t\t\t\tif (block.text.trim().length === 0) continue;\n\t\t\t\t\tblocks.push({\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: sanitizeSurrogates(block.text),\n\t\t\t\t\t});\n\t\t\t\t} else if (block.type === \"thinking\") {\n\t\t\t\t\t// Redacted thinking: pass the opaque payload back as redacted_thinking\n\t\t\t\t\tif (block.redacted) {\n\t\t\t\t\t\tblocks.push({\n\t\t\t\t\t\t\ttype: \"redacted_thinking\",\n\t\t\t\t\t\t\tdata: block.thinkingSignature!,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (block.thinking.trim().length === 0) continue;\n\t\t\t\t\t// If thinking signature is missing/empty (e.g., from aborted stream),\n\t\t\t\t\t// convert to plain text block without <thinking> tags to avoid API rejection\n\t\t\t\t\t// and prevent Claude from mimicking the tags in responses\n\t\t\t\t\tif (!block.thinkingSignature || block.thinkingSignature.trim().length === 0) {\n\t\t\t\t\t\tblocks.push({\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: sanitizeSurrogates(block.thinking),\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tblocks.push({\n\t\t\t\t\t\t\ttype: \"thinking\",\n\t\t\t\t\t\t\tthinking: sanitizeSurrogates(block.thinking),\n\t\t\t\t\t\t\tsignature: block.thinkingSignature,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (block.type === \"toolCall\") {\n\t\t\t\t\tblocks.push({\n\t\t\t\t\t\ttype: \"tool_use\",\n\t\t\t\t\t\tid: block.id,\n\t\t\t\t\t\tname: isOAuthToken ? toClaudeCodeName(block.name) : block.name,\n\t\t\t\t\t\tinput: block.arguments ?? {},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (blocks.length === 0) continue;\n\t\t\tparams.push({\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: blocks,\n\t\t\t});\n\t\t} else if (msg.role === \"toolResult\") {\n\t\t\t// Collect all consecutive toolResult messages, needed for z.ai Anthropic endpoint\n\t\t\tconst toolResults: ContentBlockParam[] = [];\n\n\t\t\t// Add the current tool result\n\t\t\ttoolResults.push({\n\t\t\t\ttype: \"tool_result\",\n\t\t\t\ttool_use_id: msg.toolCallId,\n\t\t\t\tcontent: convertContentBlocks(msg.content),\n\t\t\t\tis_error: msg.isError,\n\t\t\t});\n\n\t\t\t// Look ahead for consecutive toolResult messages\n\t\t\tlet j = i + 1;\n\t\t\twhile (j < transformedMessages.length && transformedMessages[j].role === \"toolResult\") {\n\t\t\t\tconst nextMsg = transformedMessages[j] as ToolResultMessage; // We know it's a toolResult\n\t\t\t\ttoolResults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: nextMsg.toolCallId,\n\t\t\t\t\tcontent: convertContentBlocks(nextMsg.content),\n\t\t\t\t\tis_error: nextMsg.isError,\n\t\t\t\t});\n\t\t\t\tj++;\n\t\t\t}\n\n\t\t\t// Skip the messages we've already processed\n\t\t\ti = j - 1;\n\n\t\t\t// Add a single user message with all tool results\n\t\t\tparams.push({\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: toolResults,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Add cache_control to the last user message to cache conversation history\n\tif (cacheControl && params.length > 0) {\n\t\tconst lastMessage = params[params.length - 1];\n\t\tif (lastMessage.role === \"user\") {\n\t\t\tif (Array.isArray(lastMessage.content)) {\n\t\t\t\tconst lastBlock = lastMessage.content[lastMessage.content.length - 1];\n\t\t\t\tif (\n\t\t\t\t\tlastBlock &&\n\t\t\t\t\t(lastBlock.type === \"text\" || lastBlock.type === \"image\" || lastBlock.type === \"tool_result\")\n\t\t\t\t) {\n\t\t\t\t\t(lastBlock as any).cache_control = cacheControl;\n\t\t\t\t}\n\t\t\t} else if (typeof lastMessage.content === \"string\") {\n\t\t\t\tlastMessage.content = [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: lastMessage.content,\n\t\t\t\t\t\tcache_control: cacheControl,\n\t\t\t\t\t},\n\t\t\t\t] as any;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn params;\n}\n\nfunction convertTools(tools: Tool[], isOAuthToken: boolean): Anthropic.Messages.Tool[] {\n\tif (!tools) return [];\n\n\treturn tools.map((tool) => {\n\t\tconst jsonSchema = tool.parameters as any; // TypeBox already generates JSON Schema\n\n\t\treturn {\n\t\t\tname: isOAuthToken ? toClaudeCodeName(tool.name) : tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tinput_schema: {\n\t\t\t\ttype: \"object\" as const,\n\t\t\t\tproperties: jsonSchema.properties || {},\n\t\t\t\trequired: jsonSchema.required || [],\n\t\t\t},\n\t\t};\n\t});\n}\n\nfunction mapStopReason(reason: Anthropic.Messages.StopReason | string): StopReason {\n\tswitch (reason) {\n\t\tcase \"end_turn\":\n\t\t\treturn \"stop\";\n\t\tcase \"max_tokens\":\n\t\t\treturn \"length\";\n\t\tcase \"tool_use\":\n\t\t\treturn \"toolUse\";\n\t\tcase \"refusal\":\n\t\t\treturn \"error\";\n\t\tcase \"pause_turn\": // Stop is good enough -> resubmit\n\t\t\treturn \"stop\";\n\t\tcase \"stop_sequence\":\n\t\t\treturn \"stop\"; // We don't supply stop sequences, so this should never happen\n\t\tcase \"sensitive\": // Content flagged by safety filters (not yet in SDK types)\n\t\t\treturn \"error\";\n\t\tdefault:\n\t\t\t// Handle unknown stop reasons gracefully (API may add new values)\n\t\t\tthrow new Error(`Unhandled stop reason: ${reason}`);\n\t}\n}\n"]}
|