@codeworksh/aikit 0.11.0 → 0.12.0-canary.50.1.g9fe7a616

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/cli.mjs +3 -3
  2. package/{copilot-JLgwmznn.mjs → copilot-DvUXC6Kx.mjs} +2 -2
  3. package/{copilot-JLgwmznn.mjs.map → copilot-DvUXC6Kx.mjs.map} +1 -1
  4. package/{copilot-headers-BvQ3FFn-.mjs → copilot-headers-BLnBaJyp.mjs} +2 -2
  5. package/{copilot-headers-BvQ3FFn-.mjs.map → copilot-headers-BLnBaJyp.mjs.map} +1 -1
  6. package/{github-copilot-C7oJ2Tfp.mjs → github-copilot-BcmOr0jd.mjs} +2 -2
  7. package/{github-copilot-C7oJ2Tfp.mjs.map → github-copilot-BcmOr0jd.mjs.map} +1 -1
  8. package/github-copilot-llyP2NK4.mjs +3 -0
  9. package/index.d.mts +3 -3
  10. package/index.mjs +5 -5
  11. package/index.mjs.map +1 -1
  12. package/model-Cjp-Dr8V.mjs +13955 -0
  13. package/model-Cjp-Dr8V.mjs.map +1 -0
  14. package/{model-DCfjY0fS.d.mts → model-D3wc9-u4.d.mts} +42 -19
  15. package/modelgen-DXMmI80T.mjs +731 -0
  16. package/modelgen-DXMmI80T.mjs.map +1 -0
  17. package/modelgen.d.mts +20 -3
  18. package/modelgen.mjs +61 -2
  19. package/modelgen.mjs.map +1 -0
  20. package/oauth/github/copilot.mjs +1 -1
  21. package/{openai-codex-Dj0oh0UV.mjs → openai-codex-C1Yb02kM.mjs} +2 -2
  22. package/{openai-codex-Dj0oh0UV.mjs.map → openai-codex-C1Yb02kM.mjs.map} +1 -1
  23. package/openai-codex-CHxShIN3.mjs +2 -0
  24. package/package.json +10 -10
  25. package/{registry-CfGgGfSs.mjs → registry-u49t0S4S.mjs} +4 -4
  26. package/{registry-CfGgGfSs.mjs.map → registry-u49t0S4S.mjs.map} +1 -1
  27. package/github-copilot-CLJx-bcP.mjs +0 -3
  28. package/model-D-FoGzVN.mjs +0 -522
  29. package/model-D-FoGzVN.mjs.map +0 -1
  30. package/modelgen-D6UBM1fq.mjs +0 -561
  31. package/modelgen-D6UBM1fq.mjs.map +0 -1
  32. package/openai-codex-CIBVNhQx.mjs +0 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeworksh/aikit",
3
- "version": "0.11.0",
3
+ "version": "0.12.0-canary.50.1.g9fe7a616",
4
4
  "description": "TypeScript SDK that provides a unified API for working with multiple LLM providers, automatic model discovery, and more.",
5
5
  "keywords": [
6
6
  "agent",
@@ -78,15 +78,15 @@
78
78
  "node": ">=22.0.0"
79
79
  },
80
80
  "dependencies": {
81
- "@ai-sdk/anthropic": "^4.0.53",
82
- "@ai-sdk/google": "^4.0.69",
83
- "@ai-sdk/google-vertex": "^5.0.81",
84
- "@ai-sdk/openai": "^4.0.81",
85
- "@ai-sdk/openai-compatible": "^3.0.48",
86
- "@ai-sdk/provider": "^4.0.19",
87
- "@ai-sdk/xai": "^4.0.58",
88
- "@openrouter/ai-sdk-provider": "^3.0.0",
89
- "ai": "^7.0.99",
81
+ "@ai-sdk/anthropic": "^4.0.82",
82
+ "@ai-sdk/google": "^4.0.99",
83
+ "@ai-sdk/google-vertex": "^5.0.115",
84
+ "@ai-sdk/openai": "^4.0.96",
85
+ "@ai-sdk/openai-compatible": "^3.0.71",
86
+ "@ai-sdk/provider": "^4.0.29",
87
+ "@ai-sdk/xai": "^5.0.24",
88
+ "@openrouter/ai-sdk-provider": "^3.1.0",
89
+ "ai": "^7.0.143",
90
90
  "dedent": "^1.7.2",
91
91
  "eventsource-parser": "^4.1.0",
92
92
  "partial-json": "^0.1.7",
@@ -1,4 +1,4 @@
1
- import { i as KnownProviderEnum, t as APIMethodEnum } from "./model-D-FoGzVN.mjs";
1
+ import { i as KnownProviderEnum, t as APIMethodEnum } from "./model-Cjp-Dr8V.mjs";
2
2
  //#region src/llm/registry.ts
3
3
  const DEFAULT_AI_SDK_FALLBACK = "@ai-sdk/openai-compatible";
4
4
  const AI_SDK_PACKAGE_TO_PROTOCOL = {
@@ -22,8 +22,8 @@ const PROVIDER_LOADERS = {
22
22
  "@ai-sdk/openai-compatible": () => import("@ai-sdk/openai-compatible").then((m) => m.createOpenAICompatible),
23
23
  "@openrouter/ai-sdk-provider": () => import("@openrouter/ai-sdk-provider").then((m) => m.createOpenRouter),
24
24
  "@ai-sdk/xai": () => import("@ai-sdk/xai").then((m) => m.createXai),
25
- "@codeworksh/ai-sdk-openai-codex": () => import("./openai-codex-CIBVNhQx.mjs").then((m) => m.createOpenAICodex),
26
- "@codeworksh/ai-sdk-github-copilot": () => import("./github-copilot-CLJx-bcP.mjs").then((m) => m.createGitHubCopilot)
25
+ "@codeworksh/ai-sdk-openai-codex": () => import("./openai-codex-CHxShIN3.mjs").then((m) => m.createOpenAICodex),
26
+ "@codeworksh/ai-sdk-github-copilot": () => import("./github-copilot-llyP2NK4.mjs").then((m) => m.createGitHubCopilot)
27
27
  };
28
28
  function isAISDKPackage(value) {
29
29
  return value in AI_SDK_PACKAGE_TO_PROTOCOL;
@@ -64,4 +64,4 @@ function resolveLanguageModel(provider, model, methodOverride) {
64
64
  //#endregion
65
65
  export { protocolForPackage as a, packageForModel as i, isAISDKPackage as n, resolveLanguageModel as o, loadProviderFactory as r, DEFAULT_AI_SDK_FALLBACK as t };
66
66
 
67
- //# sourceMappingURL=registry-CfGgGfSs.mjs.map
67
+ //# sourceMappingURL=registry-u49t0S4S.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry-CfGgGfSs.mjs","names":[],"sources":["../../src/llm/registry.ts"],"sourcesContent":["import type { LanguageModel } from \"ai\";\nimport * as Model from \"../model/model.ts\";\n\nexport const DEFAULT_AI_SDK_FALLBACK = \"@ai-sdk/openai-compatible\";\n\nexport const AI_SDK_PACKAGE_TO_PROTOCOL = {\n\t\"@ai-sdk/anthropic\": Model.KnownProviderEnum.anthropic,\n\t\"@ai-sdk/google\": Model.KnownProviderEnum.google,\n\t\"@ai-sdk/google-vertex\": Model.KnownProviderEnum.googleVertex,\n\t\"@ai-sdk/google-vertex/anthropic\": Model.KnownProviderEnum.googleVertexAnthropic,\n\t\"@ai-sdk/openai\": Model.KnownProviderEnum.openai,\n\t\"@ai-sdk/openai-compatible\": Model.KnownProviderEnum.openaiCompatible,\n\t\"@codeworksh/ai-sdk-openai-codex\": Model.KnownProviderEnum.openaiCodex, // custom provider npm ID\n\t\"@codeworksh/ai-sdk-github-copilot\": Model.KnownProviderEnum.githubCopilot, // custom provider npm ID\n\t\"@openrouter/ai-sdk-provider\": Model.KnownProviderEnum.openrouter,\n\t\"@ai-sdk/xai\": Model.KnownProviderEnum.xai,\n} as const;\n\nexport type AISDKPackage = keyof typeof AI_SDK_PACKAGE_TO_PROTOCOL;\nexport type AISDKProtocol = (typeof AI_SDK_PACKAGE_TO_PROTOCOL)[AISDKPackage];\n\ntype ProviderFactory = (options?: Record<string, unknown>) => unknown;\n\nconst PROVIDER_LOADERS: Record<AISDKPackage, () => Promise<ProviderFactory>> = {\n\t\"@ai-sdk/anthropic\": () => import(\"@ai-sdk/anthropic\").then((m) => m.createAnthropic as ProviderFactory),\n\t\"@ai-sdk/google\": () => import(\"@ai-sdk/google\").then((m) => m.createGoogleGenerativeAI as ProviderFactory),\n\t\"@ai-sdk/google-vertex\": () => import(\"@ai-sdk/google-vertex\").then((m) => m.createVertex as ProviderFactory),\n\t\"@ai-sdk/google-vertex/anthropic\": () =>\n\t\timport(\"@ai-sdk/google-vertex/anthropic\").then((m) => m.createVertexAnthropic as ProviderFactory),\n\t\"@ai-sdk/openai\": () => import(\"@ai-sdk/openai\").then((m) => m.createOpenAI as ProviderFactory),\n\t\"@ai-sdk/openai-compatible\": () =>\n\t\timport(\"@ai-sdk/openai-compatible\").then((m) => m.createOpenAICompatible as unknown as ProviderFactory),\n\t\"@openrouter/ai-sdk-provider\": () =>\n\t\timport(\"@openrouter/ai-sdk-provider\").then((m) => m.createOpenRouter as ProviderFactory),\n\t\"@ai-sdk/xai\": () => import(\"@ai-sdk/xai\").then((m) => m.createXai as ProviderFactory),\n\t// Local provider for OpenAI Codex subscriptions (ChatGPT OAuth); the package\n\t// name is virtual and resolves to src/providers/openai-codex.\n\t\"@codeworksh/ai-sdk-openai-codex\": () =>\n\t\timport(\"../providers/openai-codex/index.ts\").then((m) => m.createOpenAICodex as ProviderFactory),\n\t// Local provider for GitHub Copilot; the package name is virtual and resolves\n\t// to src/providers/github-copilot.\n\t\"@codeworksh/ai-sdk-github-copilot\": () =>\n\t\timport(\"../providers/github-copilot/index.ts\").then((m) => m.createGitHubCopilot as ProviderFactory),\n};\n\nexport function isAISDKPackage(value: string): value is AISDKPackage {\n\treturn value in AI_SDK_PACKAGE_TO_PROTOCOL;\n}\n\nexport function packageForModel(model: Model.Info): AISDKPackage {\n\tconst npm = model.npm ?? DEFAULT_AI_SDK_FALLBACK;\n\treturn isAISDKPackage(npm) ? npm : DEFAULT_AI_SDK_FALLBACK;\n}\n\nexport function protocolForPackage(npm: string | undefined): AISDKProtocol {\n\tconst resolved = npm && isAISDKPackage(npm) ? npm : DEFAULT_AI_SDK_FALLBACK;\n\treturn AI_SDK_PACKAGE_TO_PROTOCOL[resolved];\n}\n\nexport async function loadProviderFactory(npm: AISDKPackage): Promise<ProviderFactory> {\n\treturn PROVIDER_LOADERS[npm]();\n}\n\ntype ProviderWithMethods = {\n\t(modelId: string): LanguageModel;\n\tlanguageModel?: (modelId: string) => LanguageModel;\n\tchat?: (modelId: string) => LanguageModel;\n\tchatModel?: (modelId: string) => LanguageModel;\n\tcompletion?: (modelId: string) => LanguageModel;\n\tcompletionModel?: (modelId: string) => LanguageModel;\n\tmessages?: (modelId: string) => LanguageModel;\n\tresponses?: (modelId: string) => LanguageModel;\n};\n\nfunction defaultMethodForModel(model: Model.Info): Model.APIMethodEnum {\n\tif (\n\t\tmodel.protocol === Model.KnownProviderEnum.openai ||\n\t\tmodel.protocol === Model.KnownProviderEnum.openaiCodex ||\n\t\tmodel.protocol === Model.KnownProviderEnum.xai\n\t) {\n\t\treturn Model.APIMethodEnum.responses;\n\t}\n\treturn Model.APIMethodEnum.languageModel;\n}\n\nexport function resolveLanguageModel(\n\tprovider: unknown,\n\tmodel: Model.Info,\n\tmethodOverride?: Model.APIMethodEnum,\n): LanguageModel {\n\tconst modelId = model.api?.id ?? model.id;\n\tconst method = methodOverride ?? model.api?.method ?? defaultMethodForModel(model);\n\tconst callable = provider as ProviderWithMethods;\n\n\tif (method === Model.APIMethodEnum.responses && callable.responses) return callable.responses(modelId);\n\tif (method === Model.APIMethodEnum.messages && callable.messages) return callable.messages(modelId);\n\tif (method === Model.APIMethodEnum.chat) {\n\t\tif (callable.chat) return callable.chat(modelId);\n\t\tif (callable.chatModel) return callable.chatModel(modelId);\n\t}\n\tif (method === Model.APIMethodEnum.completion) {\n\t\tif (callable.completion) return callable.completion(modelId);\n\t\tif (callable.completionModel) return callable.completionModel(modelId);\n\t}\n\tif (method === Model.APIMethodEnum.completionModel && callable.completionModel) {\n\t\treturn callable.completionModel(modelId);\n\t}\n\tif (callable.languageModel) return callable.languageModel(modelId);\n\treturn callable(modelId);\n}\n"],"mappings":";;AAGA,MAAa,0BAA0B;AAEvC,MAAa,6BAA6B;CACzC,qBAAA,kBAA6C;CAC7C,kBAAA,kBAA0C;CAC1C,yBAAA,kBAAiD;CACjD,mCAAA,kBAA2D;CAC3D,kBAAA,kBAA0C;CAC1C,6BAAA,kBAAqD;CACrD,mCAAA,kBAA2D;CAC3D,qCAAA,kBAA6D;CAC7D,+BAAA,kBAAuD;CACvD,eAAA,kBAAuC;AACxC;AAOA,MAAM,mBAAyE;CAC9E,2BAA2B,OAAO,oBAAoB,CAAC,MAAM,MAAM,EAAE,eAAkC;CACvG,wBAAwB,OAAO,iBAAiB,CAAC,MAAM,MAAM,EAAE,wBAA2C;CAC1G,+BAA+B,OAAO,wBAAwB,CAAC,MAAM,MAAM,EAAE,YAA+B;CAC5G,yCACC,OAAO,kCAAkC,CAAC,MAAM,MAAM,EAAE,qBAAwC;CACjG,wBAAwB,OAAO,iBAAiB,CAAC,MAAM,MAAM,EAAE,YAA+B;CAC9F,mCACC,OAAO,4BAA4B,CAAC,MAAM,MAAM,EAAE,sBAAoD;CACvG,qCACC,OAAO,8BAA8B,CAAC,MAAM,MAAM,EAAE,gBAAmC;CACxF,qBAAqB,OAAO,cAAc,CAAC,MAAM,MAAM,EAAE,SAA4B;CAGrF,yCACC,OAAO,8BAAqC,CAAC,MAAM,MAAM,EAAE,iBAAoC;CAGhG,2CACC,OAAO,gCAAuC,CAAC,MAAM,MAAM,EAAE,mBAAsC;AACrG;AAEA,SAAgB,eAAe,OAAsC;CACpE,OAAO,SAAS;AACjB;AAEA,SAAgB,gBAAgB,OAAiC;CAChE,MAAM,MAAM,MAAM,OAAA;CAClB,OAAO,eAAe,GAAG,IAAI,MAAM;AACpC;AAEA,SAAgB,mBAAmB,KAAwC;CAC1E,MAAM,WAAW,OAAO,eAAe,GAAG,IAAI,MAAM;CACpD,OAAO,2BAA2B;AACnC;AAEA,eAAsB,oBAAoB,KAA6C;CACtF,OAAO,iBAAiB,IAAI,CAAC;AAC9B;AAaA,SAAS,sBAAsB,OAAwC;CACtE,IACC,MAAM,aAAA,kBAAqC,UAC3C,MAAM,aAAA,kBAAqC,eAC3C,MAAM,aAAA,kBAAqC,KAE3C,OAAA,cAA2B;CAE5B,OAAA,cAA2B;AAC5B;AAEA,SAAgB,qBACf,UACA,OACA,gBACgB;CAChB,MAAM,UAAU,MAAM,KAAK,MAAM,MAAM;CACvC,MAAM,SAAS,kBAAkB,MAAM,KAAK,UAAU,sBAAsB,KAAK;CACjF,MAAM,WAAW;CAEjB,IAAI,WAAA,cAA+B,aAAa,SAAS,WAAW,OAAO,SAAS,UAAU,OAAO;CACrG,IAAI,WAAA,cAA+B,YAAY,SAAS,UAAU,OAAO,SAAS,SAAS,OAAO;CAClG,IAAI,WAAA,cAA+B,MAAM;EACxC,IAAI,SAAS,MAAM,OAAO,SAAS,KAAK,OAAO;EAC/C,IAAI,SAAS,WAAW,OAAO,SAAS,UAAU,OAAO;CAC1D;CACA,IAAI,WAAA,cAA+B,YAAY;EAC9C,IAAI,SAAS,YAAY,OAAO,SAAS,WAAW,OAAO;EAC3D,IAAI,SAAS,iBAAiB,OAAO,SAAS,gBAAgB,OAAO;CACtE;CACA,IAAI,WAAA,cAA+B,mBAAmB,SAAS,iBAC9D,OAAO,SAAS,gBAAgB,OAAO;CAExC,IAAI,SAAS,eAAe,OAAO,SAAS,cAAc,OAAO;CACjE,OAAO,SAAS,OAAO;AACxB"}
1
+ {"version":3,"file":"registry-u49t0S4S.mjs","names":[],"sources":["../../src/llm/registry.ts"],"sourcesContent":["import type { LanguageModel } from \"ai\";\nimport * as Model from \"../model/model.ts\";\n\nexport const DEFAULT_AI_SDK_FALLBACK = \"@ai-sdk/openai-compatible\";\n\nexport const AI_SDK_PACKAGE_TO_PROTOCOL = {\n\t\"@ai-sdk/anthropic\": Model.KnownProviderEnum.anthropic,\n\t\"@ai-sdk/google\": Model.KnownProviderEnum.google,\n\t\"@ai-sdk/google-vertex\": Model.KnownProviderEnum.googleVertex,\n\t\"@ai-sdk/google-vertex/anthropic\": Model.KnownProviderEnum.googleVertexAnthropic,\n\t\"@ai-sdk/openai\": Model.KnownProviderEnum.openai,\n\t\"@ai-sdk/openai-compatible\": Model.KnownProviderEnum.openaiCompatible,\n\t\"@codeworksh/ai-sdk-openai-codex\": Model.KnownProviderEnum.openaiCodex, // custom provider npm ID\n\t\"@codeworksh/ai-sdk-github-copilot\": Model.KnownProviderEnum.githubCopilot, // custom provider npm ID\n\t\"@openrouter/ai-sdk-provider\": Model.KnownProviderEnum.openrouter,\n\t\"@ai-sdk/xai\": Model.KnownProviderEnum.xai,\n} as const;\n\nexport type AISDKPackage = keyof typeof AI_SDK_PACKAGE_TO_PROTOCOL;\nexport type AISDKProtocol = (typeof AI_SDK_PACKAGE_TO_PROTOCOL)[AISDKPackage];\n\ntype ProviderFactory = (options?: Record<string, unknown>) => unknown;\n\nconst PROVIDER_LOADERS: Record<AISDKPackage, () => Promise<ProviderFactory>> = {\n\t\"@ai-sdk/anthropic\": () => import(\"@ai-sdk/anthropic\").then((m) => m.createAnthropic as ProviderFactory),\n\t\"@ai-sdk/google\": () => import(\"@ai-sdk/google\").then((m) => m.createGoogleGenerativeAI as ProviderFactory),\n\t\"@ai-sdk/google-vertex\": () => import(\"@ai-sdk/google-vertex\").then((m) => m.createVertex as ProviderFactory),\n\t\"@ai-sdk/google-vertex/anthropic\": () =>\n\t\timport(\"@ai-sdk/google-vertex/anthropic\").then((m) => m.createVertexAnthropic as ProviderFactory),\n\t\"@ai-sdk/openai\": () => import(\"@ai-sdk/openai\").then((m) => m.createOpenAI as ProviderFactory),\n\t\"@ai-sdk/openai-compatible\": () =>\n\t\timport(\"@ai-sdk/openai-compatible\").then((m) => m.createOpenAICompatible as unknown as ProviderFactory),\n\t\"@openrouter/ai-sdk-provider\": () =>\n\t\timport(\"@openrouter/ai-sdk-provider\").then((m) => m.createOpenRouter as ProviderFactory),\n\t\"@ai-sdk/xai\": () => import(\"@ai-sdk/xai\").then((m) => m.createXai as ProviderFactory),\n\t// Local provider for OpenAI Codex subscriptions (ChatGPT OAuth); the package\n\t// name is virtual and resolves to src/providers/openai-codex.\n\t\"@codeworksh/ai-sdk-openai-codex\": () =>\n\t\timport(\"../providers/openai-codex/index.ts\").then((m) => m.createOpenAICodex as ProviderFactory),\n\t// Local provider for GitHub Copilot; the package name is virtual and resolves\n\t// to src/providers/github-copilot.\n\t\"@codeworksh/ai-sdk-github-copilot\": () =>\n\t\timport(\"../providers/github-copilot/index.ts\").then((m) => m.createGitHubCopilot as ProviderFactory),\n};\n\nexport function isAISDKPackage(value: string): value is AISDKPackage {\n\treturn value in AI_SDK_PACKAGE_TO_PROTOCOL;\n}\n\nexport function packageForModel(model: Model.Info): AISDKPackage {\n\tconst npm = model.npm ?? DEFAULT_AI_SDK_FALLBACK;\n\treturn isAISDKPackage(npm) ? npm : DEFAULT_AI_SDK_FALLBACK;\n}\n\nexport function protocolForPackage(npm: string | undefined): AISDKProtocol {\n\tconst resolved = npm && isAISDKPackage(npm) ? npm : DEFAULT_AI_SDK_FALLBACK;\n\treturn AI_SDK_PACKAGE_TO_PROTOCOL[resolved];\n}\n\nexport async function loadProviderFactory(npm: AISDKPackage): Promise<ProviderFactory> {\n\treturn PROVIDER_LOADERS[npm]();\n}\n\ntype ProviderWithMethods = {\n\t(modelId: string): LanguageModel;\n\tlanguageModel?: (modelId: string) => LanguageModel;\n\tchat?: (modelId: string) => LanguageModel;\n\tchatModel?: (modelId: string) => LanguageModel;\n\tcompletion?: (modelId: string) => LanguageModel;\n\tcompletionModel?: (modelId: string) => LanguageModel;\n\tmessages?: (modelId: string) => LanguageModel;\n\tresponses?: (modelId: string) => LanguageModel;\n};\n\nfunction defaultMethodForModel(model: Model.Info): Model.APIMethodEnum {\n\tif (\n\t\tmodel.protocol === Model.KnownProviderEnum.openai ||\n\t\tmodel.protocol === Model.KnownProviderEnum.openaiCodex ||\n\t\tmodel.protocol === Model.KnownProviderEnum.xai\n\t) {\n\t\treturn Model.APIMethodEnum.responses;\n\t}\n\treturn Model.APIMethodEnum.languageModel;\n}\n\nexport function resolveLanguageModel(\n\tprovider: unknown,\n\tmodel: Model.Info,\n\tmethodOverride?: Model.APIMethodEnum,\n): LanguageModel {\n\tconst modelId = model.api?.id ?? model.id;\n\tconst method = methodOverride ?? model.api?.method ?? defaultMethodForModel(model);\n\tconst callable = provider as ProviderWithMethods;\n\n\tif (method === Model.APIMethodEnum.responses && callable.responses) return callable.responses(modelId);\n\tif (method === Model.APIMethodEnum.messages && callable.messages) return callable.messages(modelId);\n\tif (method === Model.APIMethodEnum.chat) {\n\t\tif (callable.chat) return callable.chat(modelId);\n\t\tif (callable.chatModel) return callable.chatModel(modelId);\n\t}\n\tif (method === Model.APIMethodEnum.completion) {\n\t\tif (callable.completion) return callable.completion(modelId);\n\t\tif (callable.completionModel) return callable.completionModel(modelId);\n\t}\n\tif (method === Model.APIMethodEnum.completionModel && callable.completionModel) {\n\t\treturn callable.completionModel(modelId);\n\t}\n\tif (callable.languageModel) return callable.languageModel(modelId);\n\treturn callable(modelId);\n}\n"],"mappings":";;AAGA,MAAa,0BAA0B;AAEvC,MAAa,6BAA6B;CACzC,qBAAA,kBAA6C;CAC7C,kBAAA,kBAA0C;CAC1C,yBAAA,kBAAiD;CACjD,mCAAA,kBAA2D;CAC3D,kBAAA,kBAA0C;CAC1C,6BAAA,kBAAqD;CACrD,mCAAA,kBAA2D;CAC3D,qCAAA,kBAA6D;CAC7D,+BAAA,kBAAuD;CACvD,eAAA,kBAAuC;AACxC;AAOA,MAAM,mBAAyE;CAC9E,2BAA2B,OAAO,oBAAoB,CAAC,MAAM,MAAM,EAAE,eAAkC;CACvG,wBAAwB,OAAO,iBAAiB,CAAC,MAAM,MAAM,EAAE,wBAA2C;CAC1G,+BAA+B,OAAO,wBAAwB,CAAC,MAAM,MAAM,EAAE,YAA+B;CAC5G,yCACC,OAAO,kCAAkC,CAAC,MAAM,MAAM,EAAE,qBAAwC;CACjG,wBAAwB,OAAO,iBAAiB,CAAC,MAAM,MAAM,EAAE,YAA+B;CAC9F,mCACC,OAAO,4BAA4B,CAAC,MAAM,MAAM,EAAE,sBAAoD;CACvG,qCACC,OAAO,8BAA8B,CAAC,MAAM,MAAM,EAAE,gBAAmC;CACxF,qBAAqB,OAAO,cAAc,CAAC,MAAM,MAAM,EAAE,SAA4B;CAGrF,yCACC,OAAO,8BAAqC,CAAC,MAAM,MAAM,EAAE,iBAAoC;CAGhG,2CACC,OAAO,gCAAuC,CAAC,MAAM,MAAM,EAAE,mBAAsC;AACrG;AAEA,SAAgB,eAAe,OAAsC;CACpE,OAAO,SAAS;AACjB;AAEA,SAAgB,gBAAgB,OAAiC;CAChE,MAAM,MAAM,MAAM,OAAA;CAClB,OAAO,eAAe,GAAG,IAAI,MAAM;AACpC;AAEA,SAAgB,mBAAmB,KAAwC;CAC1E,MAAM,WAAW,OAAO,eAAe,GAAG,IAAI,MAAM;CACpD,OAAO,2BAA2B;AACnC;AAEA,eAAsB,oBAAoB,KAA6C;CACtF,OAAO,iBAAiB,IAAI,CAAC;AAC9B;AAaA,SAAS,sBAAsB,OAAwC;CACtE,IACC,MAAM,aAAA,kBAAqC,UAC3C,MAAM,aAAA,kBAAqC,eAC3C,MAAM,aAAA,kBAAqC,KAE3C,OAAA,cAA2B;CAE5B,OAAA,cAA2B;AAC5B;AAEA,SAAgB,qBACf,UACA,OACA,gBACgB;CAChB,MAAM,UAAU,MAAM,KAAK,MAAM,MAAM;CACvC,MAAM,SAAS,kBAAkB,MAAM,KAAK,UAAU,sBAAsB,KAAK;CACjF,MAAM,WAAW;CAEjB,IAAI,WAAA,cAA+B,aAAa,SAAS,WAAW,OAAO,SAAS,UAAU,OAAO;CACrG,IAAI,WAAA,cAA+B,YAAY,SAAS,UAAU,OAAO,SAAS,SAAS,OAAO;CAClG,IAAI,WAAA,cAA+B,MAAM;EACxC,IAAI,SAAS,MAAM,OAAO,SAAS,KAAK,OAAO;EAC/C,IAAI,SAAS,WAAW,OAAO,SAAS,UAAU,OAAO;CAC1D;CACA,IAAI,WAAA,cAA+B,YAAY;EAC9C,IAAI,SAAS,YAAY,OAAO,SAAS,WAAW,OAAO;EAC3D,IAAI,SAAS,iBAAiB,OAAO,SAAS,gBAAgB,OAAO;CACtE;CACA,IAAI,WAAA,cAA+B,mBAAmB,SAAS,iBAC9D,OAAO,SAAS,gBAAgB,OAAO;CAExC,IAAI,SAAS,eAAe,OAAO,SAAS,cAAc,OAAO;CACjE,OAAO,SAAS,OAAO;AACxB"}
@@ -1,3 +0,0 @@
1
- import "./copilot-headers-BvQ3FFn-.mjs";
2
- import { r as createGitHubCopilot } from "./github-copilot-C7oJ2Tfp.mjs";
3
- export { createGitHubCopilot };
@@ -1,522 +0,0 @@
1
- import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
- import Type$1 from "typebox";
3
- import { join, resolve } from "node:path";
4
- import { mkdir, readFile, rename, rm, writeFile } from "fs/promises";
5
- import { dirname } from "path";
6
- //#region src/utils/lazy.ts
7
- function lazy(fn) {
8
- let value;
9
- let loaded = false;
10
- const result = () => {
11
- if (loaded) return value;
12
- value = fn();
13
- loaded = true;
14
- return value;
15
- };
16
- result.reset = () => {
17
- loaded = false;
18
- value = void 0;
19
- };
20
- return result;
21
- }
22
- //#endregion
23
- //#region src/utils/error.ts
24
- var NamedError = class NamedError extends Error {
25
- static create(name, data) {
26
- const schema = {
27
- $id: name,
28
- type: "object",
29
- required: ["name", "data"],
30
- properties: {
31
- name: { const: name },
32
- data
33
- }
34
- };
35
- const result = class extends NamedError {
36
- static Schema = schema;
37
- name = name;
38
- data;
39
- constructor(data, options) {
40
- super(name, options);
41
- this.data = data;
42
- this.name = name;
43
- }
44
- static isInstance(input) {
45
- return typeof input === "object" && input !== null && "name" in input && input.name === name;
46
- }
47
- schema() {
48
- return schema;
49
- }
50
- toObject() {
51
- return {
52
- name,
53
- data: this.data
54
- };
55
- }
56
- };
57
- Object.defineProperty(result, "name", { value: name });
58
- return result;
59
- }
60
- static Unknown = NamedError.create("UnknownError", {
61
- type: "object",
62
- required: ["message"],
63
- properties: { message: { type: "string" } }
64
- });
65
- };
66
- //#endregion
67
- //#region src/utils/filesystem.ts
68
- async function readText(path) {
69
- return readFile(path, "utf-8");
70
- }
71
- async function readJson(path) {
72
- return JSON.parse(await readFile(path, "utf-8"));
73
- }
74
- function isEnoent(error) {
75
- return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
76
- }
77
- async function write(path, content, mode) {
78
- try {
79
- if (mode) await writeFile(path, content, { mode });
80
- else await writeFile(path, content);
81
- } catch (error) {
82
- if (isEnoent(error)) {
83
- await mkdir(dirname(path), { recursive: true });
84
- if (mode) await writeFile(path, content, { mode });
85
- else await writeFile(path, content);
86
- return;
87
- }
88
- throw error;
89
- }
90
- }
91
- async function writeJson(path, data, mode) {
92
- return write(path, JSON.stringify(data, null, 2), mode);
93
- }
94
- /**
95
- * Write through a temp file and rename it into place, so a concurrent reader
96
- * sees either the old content or the new, never a partial file.
97
- */
98
- async function writeJsonAtomic(path, data) {
99
- const temp = `${path}.${process.pid}.${Date.now()}.tmp`;
100
- try {
101
- await writeJson(temp, data);
102
- await rename(temp, path);
103
- } catch (error) {
104
- await rm(temp, { force: true });
105
- throw error;
106
- }
107
- }
108
- //#endregion
109
- //#region src/model/catalog.ts
110
- const KnownProviderEnum$1 = {
111
- anthropic: "anthropic",
112
- google: "google",
113
- googleVertex: "google-vertex",
114
- googleVertexAnthropic: "google-vertex-anthropic",
115
- githubCopilot: "github-copilot",
116
- openai: "openai",
117
- openaiCompatible: "openai-compatible",
118
- openaiCodex: "openai-codex",
119
- openrouter: "openrouter",
120
- xai: "xai"
121
- };
122
- const KnownProviderEnumSchema$1 = Type$1.Union([
123
- Type$1.Literal(KnownProviderEnum$1.anthropic),
124
- Type$1.Literal(KnownProviderEnum$1.google),
125
- Type$1.Literal(KnownProviderEnum$1.googleVertex),
126
- Type$1.Literal(KnownProviderEnum$1.googleVertexAnthropic),
127
- Type$1.Literal(KnownProviderEnum$1.githubCopilot),
128
- Type$1.Literal(KnownProviderEnum$1.openai),
129
- Type$1.Literal(KnownProviderEnum$1.openaiCompatible),
130
- Type$1.Literal(KnownProviderEnum$1.openaiCodex),
131
- Type$1.Literal(KnownProviderEnum$1.openrouter),
132
- Type$1.Literal(KnownProviderEnum$1.xai)
133
- ]);
134
- const ModelCatalogLoadError$1 = NamedError.create("ModelCatalogLoadError", Type$1.Object({
135
- path: Type$1.String(),
136
- reason: Type$1.Union([
137
- Type$1.Literal("missing"),
138
- Type$1.Literal("unreadable"),
139
- Type$1.Literal("empty"),
140
- Type$1.Literal("invalid")
141
- ]),
142
- message: Type$1.String()
143
- }));
144
- function projectRoot() {
145
- return process.cwd();
146
- }
147
- let configured;
148
- /**
149
- * Read the catalog from `catalogPath` instead of `./models.gen.json`, for an
150
- * embedder that keeps it elsewhere. `CODEWORK_MODELS_FILE` still wins.
151
- */
152
- function configure(catalogPath) {
153
- configured = resolve(catalogPath);
154
- data.reset();
155
- }
156
- function path() {
157
- return resolve(process.env.CODEWORK_MODELS_FILE ?? configured ?? join(projectRoot(), "models.gen.json"));
158
- }
159
- async function load(catalogPath = path()) {
160
- let content;
161
- try {
162
- content = await readText(catalogPath);
163
- } catch (cause) {
164
- const reason = (typeof cause === "object" && cause !== null && "code" in cause && typeof cause.code === "string" ? cause.code : void 0) === "ENOENT" ? "missing" : "unreadable";
165
- throw new ModelCatalogLoadError$1({
166
- path: catalogPath,
167
- reason,
168
- message: reason === "missing" ? `model catalog not found at ${catalogPath}` : `model catalog could not be read at ${catalogPath}`
169
- }, { cause });
170
- }
171
- if (!content.trim()) throw new ModelCatalogLoadError$1({
172
- path: catalogPath,
173
- reason: "empty",
174
- message: `model catalog is empty at ${catalogPath}`
175
- });
176
- try {
177
- const parsed = JSON.parse(content);
178
- if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) throw new Error("expected an object");
179
- return parsed;
180
- } catch (cause) {
181
- throw new ModelCatalogLoadError$1({
182
- path: catalogPath,
183
- reason: "invalid",
184
- message: `model catalog contains invalid json at ${catalogPath}`
185
- }, { cause });
186
- }
187
- }
188
- const data = lazy(() => load());
189
- async function get() {
190
- return data();
191
- }
192
- //#endregion
193
- //#region src/model/model.ts
194
- var model_exports = /* @__PURE__ */ __exportAll({
195
- APIMetadataSchema: () => APIMetadataSchema,
196
- APIMethodEnum: () => APIMethodEnum,
197
- APIMethodEnumSchema: () => APIMethodEnumSchema,
198
- ActiveThinkingLevel: () => ActiveThinkingLevel,
199
- CompatibilitySchema: () => CompatibilitySchema,
200
- ExtrasSchema: () => ExtrasSchema,
201
- Info: () => Info,
202
- KnownProviderEnum: () => KnownProviderEnum,
203
- KnownProviderEnumSchema: () => KnownProviderEnumSchema,
204
- ModelCatalogLoadError: () => ModelCatalogLoadError,
205
- ProviderInfo: () => ProviderInfo,
206
- Schema: () => Schema,
207
- ThinkingBudgets: () => ThinkingBudgets,
208
- ThinkingLevel: () => ThinkingLevel,
209
- ThinkingLevelEnum: () => ThinkingLevelEnum,
210
- ThinkingLevelMapSchema: () => ThinkingLevelMapSchema,
211
- calculateCost: () => calculateCost,
212
- catalogPath: () => catalogPath,
213
- clampThinkingLevel: () => clampThinkingLevel,
214
- configureCatalog: () => configureCatalog,
215
- getBuiltInModels: () => getBuiltInModels,
216
- getModel: () => getModel,
217
- getModels: () => getModels,
218
- getProviders: () => getProviders,
219
- getSupportedThinkingLevels: () => getSupportedThinkingLevels,
220
- isAnthropicAdaptiveThinkingModel: () => isAnthropicAdaptiveThinkingModel,
221
- modelsAreEqual: () => modelsAreEqual,
222
- normalizeInput: () => normalizeInput,
223
- optionsKey: () => optionsKey,
224
- registry: () => registry,
225
- reloadCatalog: () => reloadCatalog,
226
- supportsProtocol: () => supportsProtocol,
227
- thinkingTokenBudgetField: () => thinkingTokenBudgetField
228
- });
229
- const KnownProviderEnum = KnownProviderEnum$1;
230
- const KnownProviderEnumSchema = KnownProviderEnumSchema$1;
231
- const ModelCatalogLoadError = ModelCatalogLoadError$1;
232
- const ThinkingLevelEnum = {
233
- off: "off",
234
- minimal: "minimal",
235
- low: "low",
236
- medium: "medium",
237
- high: "high",
238
- xhigh: "xhigh",
239
- max: "max"
240
- };
241
- const ThinkingLevel = Type$1.Union([
242
- Type$1.Literal(ThinkingLevelEnum.off),
243
- Type$1.Literal(ThinkingLevelEnum.minimal),
244
- Type$1.Literal(ThinkingLevelEnum.low),
245
- Type$1.Literal(ThinkingLevelEnum.medium),
246
- Type$1.Literal(ThinkingLevelEnum.high),
247
- Type$1.Literal(ThinkingLevelEnum.xhigh),
248
- Type$1.Literal(ThinkingLevelEnum.max)
249
- ]);
250
- const ActiveThinkingLevel = Type$1.Union([
251
- Type$1.Literal(ThinkingLevelEnum.minimal),
252
- Type$1.Literal(ThinkingLevelEnum.low),
253
- Type$1.Literal(ThinkingLevelEnum.medium),
254
- Type$1.Literal(ThinkingLevelEnum.high),
255
- Type$1.Literal(ThinkingLevelEnum.xhigh),
256
- Type$1.Literal(ThinkingLevelEnum.max)
257
- ]);
258
- const ThinkingBudgets = Type$1.Partial(Type$1.Record(ActiveThinkingLevel, Type$1.Number()));
259
- const ACTIVE_THINKING_LEVELS = [
260
- ThinkingLevelEnum.minimal,
261
- ThinkingLevelEnum.low,
262
- ThinkingLevelEnum.medium,
263
- ThinkingLevelEnum.high,
264
- ThinkingLevelEnum.xhigh,
265
- ThinkingLevelEnum.max
266
- ];
267
- const MODEL_THINKING_LEVELS = [ThinkingLevelEnum.off, ...ACTIVE_THINKING_LEVELS];
268
- const ProviderInfo = Type$1.Object({
269
- id: Type$1.String(),
270
- name: Type$1.String(),
271
- source: Type$1.Enum([
272
- "env",
273
- "config",
274
- "custom",
275
- "api",
276
- "unknown"
277
- ]),
278
- env: Type$1.Array(Type$1.String()),
279
- key: Type$1.Optional(Type$1.String()),
280
- options: Type$1.Optional(Type$1.Record(Type$1.String(), Type$1.Any()))
281
- });
282
- const InputSchema = Type$1.Array(Type$1.Union([Type$1.Literal("text"), Type$1.Literal("image")]));
283
- const CostRatesSchema = Type$1.Object({
284
- input: Type$1.Number(),
285
- output: Type$1.Number(),
286
- cacheRead: Type$1.Number(),
287
- cacheWrite: Type$1.Number()
288
- });
289
- const CostTierSchema = Type$1.Object({
290
- ...CostRatesSchema.properties,
291
- inputTokensAbove: Type$1.Number()
292
- });
293
- const CostSchema = Type$1.Object({
294
- ...CostRatesSchema.properties,
295
- tiers: Type$1.Optional(Type$1.Array(CostTierSchema)),
296
- serviceTierMultipliers: Type$1.Optional(Type$1.Record(Type$1.String(), Type$1.Number()))
297
- });
298
- const SupportedProtocolsSchema = Type$1.Partial(Type$1.Object({
299
- anthropic: KnownProviderEnumSchema,
300
- google: KnownProviderEnumSchema,
301
- googleVertex: KnownProviderEnumSchema,
302
- googleVertexAnthropic: KnownProviderEnumSchema,
303
- githubCopilot: KnownProviderEnumSchema,
304
- openai: KnownProviderEnumSchema,
305
- openaiCompatible: KnownProviderEnumSchema,
306
- openaiCodex: KnownProviderEnumSchema,
307
- openrouter: KnownProviderEnumSchema,
308
- xai: KnownProviderEnumSchema
309
- }));
310
- const APIMethodEnum = {
311
- languageModel: "languageModel",
312
- chat: "chat",
313
- completion: "completion",
314
- completionModel: "completionModel",
315
- messages: "messages",
316
- responses: "responses"
317
- };
318
- const APIMethodEnumSchema = Type$1.Union([
319
- Type$1.Literal(APIMethodEnum.languageModel),
320
- Type$1.Literal(APIMethodEnum.chat),
321
- Type$1.Literal(APIMethodEnum.completion),
322
- Type$1.Literal(APIMethodEnum.completionModel),
323
- Type$1.Literal(APIMethodEnum.messages),
324
- Type$1.Literal(APIMethodEnum.responses)
325
- ]);
326
- const APIMetadataSchema = Type$1.Object({
327
- id: Type$1.Optional(Type$1.String()),
328
- url: Type$1.Optional(Type$1.String()),
329
- method: Type$1.Optional(APIMethodEnumSchema)
330
- });
331
- const ThinkingLevelMapSchema = Type$1.Partial(Type$1.Record(ThinkingLevel, Type$1.Union([Type$1.String(), Type$1.Null()])));
332
- const CompatibilitySchema = Type$1.Object({
333
- /** The Google protocol accepts thinking levels rather than a token budget. */
334
- supportsThinkingLevel: Type$1.Optional(Type$1.Boolean()),
335
- supportsToolSearch: Type$1.Optional(Type$1.Boolean()),
336
- supportsAdditionalTools: Type$1.Optional(Type$1.Boolean()),
337
- supportsStrictMode: Type$1.Optional(Type$1.Boolean()),
338
- supportsOpenAIGrammarTools: Type$1.Optional(Type$1.Boolean()),
339
- /** The model takes a thinking-token budget as a top-level request field. */
340
- supportsThinkingTokenBudget: Type$1.Optional(Type$1.Boolean()),
341
- /** Claude model that sizes its own thinking, driven by `effort` instead of a token budget. */
342
- forceAdaptiveThinking: Type$1.Optional(Type$1.Boolean()),
343
- /** Name of that field, when it is not the conventional `thinking_token_budget`. */
344
- thinkingTokenBudgetField: Type$1.Optional(Type$1.String())
345
- });
346
- /**
347
- * Claude models that decide their own thinking depth.
348
- *
349
- * These take an `effort` level and let the model size each turn's reasoning; the
350
- * older models take a fixed `budget_tokens` instead. Sending a budget to an
351
- * adaptive model pins it to one depth for every turn, which is the thing adaptive
352
- * thinking exists to avoid.
353
- */
354
- function isAnthropicAdaptiveThinkingModel(modelId) {
355
- return [
356
- "opus-4-6",
357
- "opus-4.6",
358
- "opus-4-7",
359
- "opus-4.7",
360
- "opus-4-8",
361
- "opus-4.8",
362
- "opus-5",
363
- "opus.5",
364
- "sonnet-4-6",
365
- "sonnet-4.6",
366
- "sonnet-5",
367
- "sonnet.5",
368
- "fable-5",
369
- "haiku-5",
370
- "haiku.5"
371
- ].some((needle) => modelId.includes(needle));
372
- }
373
- const Schema = Type$1.Object({
374
- id: Type$1.String(),
375
- name: Type$1.String(),
376
- provider: ProviderInfo,
377
- baseUrl: Type$1.String(),
378
- reasoning: Type$1.Boolean(),
379
- thinkingLevelMap: Type$1.Optional(ThinkingLevelMapSchema),
380
- /** Default budgets; request-level thinkingBudgets take precedence. */
381
- thinkingBudgets: Type$1.Optional(ThinkingBudgets),
382
- input: InputSchema,
383
- cost: CostSchema,
384
- contextWindow: Type$1.Number(),
385
- maxTokens: Type$1.Number(),
386
- headers: Type$1.Optional(Type$1.Record(Type$1.String(), Type$1.String())),
387
- npm: Type$1.Optional(Type$1.String()),
388
- api: Type$1.Optional(APIMetadataSchema),
389
- providerOptionsKey: Type$1.Optional(Type$1.String()),
390
- options: Type$1.Optional(Type$1.Record(Type$1.String(), Type$1.Unknown())),
391
- providerOptions: Type$1.Optional(Type$1.Record(Type$1.String(), Type$1.Unknown())),
392
- compat: Type$1.Optional(CompatibilitySchema),
393
- protocol: KnownProviderEnumSchema,
394
- supportedProtocols: Type$1.Optional(SupportedProtocolsSchema)
395
- });
396
- const ExtrasSchema = Type$1.Object({});
397
- const Info = Type$1.Evaluate(Type$1.Intersect([Schema, ExtrasSchema]));
398
- function calculateCost(model, usage) {
399
- const inputTokens = usage.input + usage.cacheRead + usage.cacheWrite;
400
- let rates = model.cost;
401
- let matchedThreshold = -1;
402
- for (const tier of model.cost.tiers ?? []) if (inputTokens > tier.inputTokensAbove && tier.inputTokensAbove > matchedThreshold) {
403
- rates = tier;
404
- matchedThreshold = tier.inputTokensAbove;
405
- }
406
- const longWrite = usage.cacheWrite1h ?? 0;
407
- const shortWrite = usage.cacheWrite - longWrite;
408
- usage.cost.input = usage.input / 1e6 * rates.input;
409
- usage.cost.output = usage.output / 1e6 * rates.output;
410
- usage.cost.cacheRead = usage.cacheRead / 1e6 * rates.cacheRead;
411
- usage.cost.cacheWrite = (rates.cacheWrite * shortWrite + rates.input * 2 * longWrite) / 1e6;
412
- usage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;
413
- }
414
- function normalizeInput(input) {
415
- const normalized = /* @__PURE__ */ new Set();
416
- for (const modality of input ?? ["text"]) if (modality === "text" || modality === "image") normalized.add(modality);
417
- if (normalized.size === 0) normalized.add("text");
418
- return [...normalized];
419
- }
420
- /** Where the catalog is read from: `CODEWORK_MODELS_FILE`, the configured path, or `./models.gen.json`. */
421
- const catalogPath = path;
422
- /** Read the catalog from `path` from now on, dropping whatever was already loaded. */
423
- function configureCatalog(path) {
424
- configure(path);
425
- registry.reset();
426
- }
427
- /** Drop the loaded catalog, so the next lookup re-reads the file -- after it was regenerated. */
428
- function reloadCatalog() {
429
- data.reset();
430
- registry.reset();
431
- }
432
- async function getBuiltInModels() {
433
- return await get();
434
- }
435
- const registry = lazy(async () => {
436
- const registry = /* @__PURE__ */ new Map();
437
- const models = await getBuiltInModels();
438
- for (const [provider, value] of Object.entries(models)) {
439
- const providerModels = /* @__PURE__ */ new Map();
440
- for (const [id, model] of Object.entries(value)) providerModels.set(id, model);
441
- registry.set(provider, providerModels);
442
- }
443
- return registry;
444
- });
445
- /**
446
- * The key a provider's own option bag is filed under.
447
- *
448
- * Providers that speak another provider's protocol still carry their own option
449
- * namespace, so this is not always the protocol.
450
- */
451
- /**
452
- * The request-body field a model takes its thinking-token budget in, if any.
453
- *
454
- * OpenAI-compatible endpoints have no standard place for this, so each one names
455
- * its own field; a bare `supportsThinkingTokenBudget` means the conventional name.
456
- */
457
- function thinkingTokenBudgetField(model) {
458
- if (model.compat?.thinkingTokenBudgetField) return model.compat.thinkingTokenBudgetField;
459
- return model.compat?.supportsThinkingTokenBudget ? "thinking_token_budget" : void 0;
460
- }
461
- function optionsKey(model) {
462
- return model.providerOptionsKey ?? model.protocol;
463
- }
464
- function supportsProtocol(model, protocol) {
465
- if (model.protocol === protocol) return true;
466
- return Object.values(model.supportedProtocols ?? {}).includes(protocol);
467
- }
468
- async function getModel(provider, model, overrides) {
469
- const result = (await registry()).get(provider)?.get(model);
470
- if (result && overrides) {
471
- if (overrides.protocol && !supportsProtocol(result, overrides.protocol)) return;
472
- return {
473
- ...result,
474
- ...overrides
475
- };
476
- }
477
- return result;
478
- }
479
- async function getProviders() {
480
- const data = await registry();
481
- return Array.from(data.keys());
482
- }
483
- async function getModels(provider) {
484
- const models = (await registry()).get(provider);
485
- return models ? Array.from(models.values()) : [];
486
- }
487
- /**
488
- * Check if two models are equal by comparing both their id and provider id.
489
- * Returns false if either model is null or undefined.
490
- */
491
- function modelsAreEqual(a, b) {
492
- if (!a || !b) return false;
493
- return a.id === b.id && a.provider.id === b.provider.id;
494
- }
495
- function getSupportedThinkingLevels(model) {
496
- if (!model.reasoning) return ["off"];
497
- return MODEL_THINKING_LEVELS.filter((level) => {
498
- const mapped = model.thinkingLevelMap?.[level];
499
- if (mapped === null) return false;
500
- if (level === "xhigh" || level === "max") return mapped !== void 0;
501
- return true;
502
- });
503
- }
504
- function clampThinkingLevel(model, level) {
505
- const availableLevels = getSupportedThinkingLevels(model);
506
- if (availableLevels.includes(level)) return level;
507
- const requestedIndex = MODEL_THINKING_LEVELS.indexOf(level);
508
- if (requestedIndex === -1) return availableLevels[0] ?? "off";
509
- for (let i = requestedIndex; i < MODEL_THINKING_LEVELS.length; i++) {
510
- const candidate = MODEL_THINKING_LEVELS[i];
511
- if (availableLevels.includes(candidate)) return candidate;
512
- }
513
- for (let i = requestedIndex - 1; i >= 0; i--) {
514
- const candidate = MODEL_THINKING_LEVELS[i];
515
- if (availableLevels.includes(candidate)) return candidate;
516
- }
517
- return availableLevels[0] ?? "off";
518
- }
519
- //#endregion
520
- export { writeJsonAtomic as C, readJson as S, normalizeInput as _, KnownProviderEnumSchema as a, thinkingTokenBudgetField as b, ThinkingLevel as c, getModel as d, getModels as f, modelsAreEqual as g, model_exports as h, KnownProviderEnum as i, calculateCost as l, isAnthropicAdaptiveThinkingModel as m, APIMethodEnumSchema as n, ProviderInfo as o, getProviders as p, ActiveThinkingLevel as r, ThinkingBudgets as s, APIMethodEnum as t, clampThinkingLevel as u, optionsKey as v, NamedError as w, path as x, registry as y };
521
-
522
- //# sourceMappingURL=model-D-FoGzVN.mjs.map