| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- import { Config } from "effect"
- import { Auth } from "../src/route"
- import type { ModelFactory } from "../src/route/auth-options"
- import * as OpenAIChat from "../src/protocols/openai-chat"
- import * as AmazonBedrock from "../src/providers/amazon-bedrock"
- import * as Anthropic from "../src/providers/anthropic"
- import * as AnthropicCompatible from "../src/providers/anthropic-compatible"
- import * as Azure from "../src/providers/azure"
- import * as Cloudflare from "../src/providers/cloudflare"
- import * as GitHubCopilot from "../src/providers/github-copilot"
- import * as Google from "../src/providers/google"
- import * as GoogleVertex from "../src/providers/google-vertex"
- import * as GoogleVertexChat from "../src/providers/google-vertex-chat"
- import * as GoogleVertexMessages from "../src/providers/google-vertex-messages"
- import * as GoogleVertexResponses from "../src/providers/google-vertex-responses"
- import * as OpenAI from "../src/providers/openai"
- import * as OpenAICompatible from "../src/providers/openai-compatible"
- import * as OpenRouter from "../src/providers/openrouter"
- import * as XAI from "../src/providers/xai"
- type BaseOptions = {
- readonly baseURL?: string
- readonly headers?: Record<string, string>
- }
- type Model = {
- readonly id: string
- }
- declare const auth: Auth.Definition
- declare const optionalAuthModel: ModelFactory<BaseOptions, "optional", Model>
- declare const requiredAuthModel: ModelFactory<BaseOptions, "required", Model>
- const configApiKey = Config.redacted("OPENAI_API_KEY")
- OpenAIChat.route.model({ id: "gpt-4.1-mini" })
- // @ts-expect-error route model selection does not configure endpoints.
- OpenAIChat.route.model({ id: "gpt-4.1-mini", baseURL: "https://gateway.example.com/v1" })
- // @ts-expect-error route model selection does not configure query params.
- OpenAIChat.route.model({ id: "gpt-4.1-mini", queryParams: { debug: "1" } })
- // @ts-expect-error route model selection does not configure auth.
- OpenAIChat.route.model({ id: "gpt-4.1-mini", auth })
- // @ts-expect-error route model selection does not configure api keys.
- OpenAIChat.route.model({ id: "gpt-4.1-mini", apiKey: "sk-test" })
- optionalAuthModel("gpt-4.1-mini")
- optionalAuthModel("gpt-4.1-mini", {})
- optionalAuthModel("gpt-4.1-mini", { apiKey: "sk-test" })
- optionalAuthModel("gpt-4.1-mini", { apiKey: configApiKey })
- optionalAuthModel("gpt-4.1-mini", { auth })
- optionalAuthModel("gpt-4.1-mini", { auth, baseURL: "https://gateway.example.com/v1" })
- optionalAuthModel("gpt-4.1-mini", { apiKey: "sk-test", headers: { "x-source": "test" } })
- // @ts-expect-error auth is an override, so apiKey cannot be supplied with it.
- optionalAuthModel("gpt-4.1-mini", { apiKey: "sk-test", auth })
- requiredAuthModel("custom-model", { apiKey: "key" })
- requiredAuthModel("custom-model", { apiKey: configApiKey })
- requiredAuthModel("custom-model", { auth })
- requiredAuthModel("custom-model", { auth, headers: { "x-tenant-id": "tenant" } })
- // @ts-expect-error providers without config fallback need apiKey or auth.
- requiredAuthModel("custom-model")
- // @ts-expect-error providers without config fallback need apiKey or auth.
- requiredAuthModel("custom-model", {})
- // @ts-expect-error auth is an override, so apiKey cannot be supplied with it.
- requiredAuthModel("custom-model", { apiKey: "key", auth })
- OpenAI.responses("gpt-4.1-mini")
- OpenAI.configure({}).responses("gpt-4.1-mini")
- OpenAI.configure({ apiKey: "sk-test" }).responses("gpt-4.1-mini")
- OpenAI.configure({ apiKey: configApiKey }).responses("gpt-4.1-mini")
- OpenAI.configure({ auth: Auth.bearer("oauth-token") }).responses("gpt-4.1-mini")
- OpenAI.configure({
- auth: Auth.headers({ authorization: "Bearer gateway" }),
- baseURL: "https://gateway.example.com/v1",
- }).responses("gpt-4.1-mini")
- OpenAI.configure({
- generation: { maxTokens: 100 },
- providerOptions: { openai: { store: false } },
- }).responses("gpt-4.1-mini")
- // @ts-expect-error OpenAI model selectors only accept model ids.
- OpenAI.configure({ apiKey: "sk-test" }).responses("gpt-4.1-mini", {})
- // @ts-expect-error apiKey only accepts string, Redacted<string>, or Config<string | Redacted<string>>.
- OpenAI.configure({ apiKey: 123 })
- // @ts-expect-error provider helpers reject unknown top-level options.
- OpenAI.configure({ bogus: true })
- // @ts-expect-error common generation options remain typed.
- OpenAI.configure({ generation: { maxTokens: "many" } })
- // @ts-expect-error provider-native options remain typed.
- OpenAI.configure({ providerOptions: { openai: { store: "false" } } })
- // @ts-expect-error auth is an override, so OpenAI rejects apiKey with auth.
- OpenAI.configure({ apiKey: "sk-test", auth: Auth.bearer("oauth-token") })
- OpenAI.chat("gpt-4.1-mini")
- OpenAI.configure({ apiKey: "sk-test" }).chat("gpt-4.1-mini")
- OpenAI.configure({ apiKey: configApiKey }).chat("gpt-4.1-mini")
- OpenAI.configure({ auth: Auth.bearer("oauth-token") }).chat("gpt-4.1-mini")
- // @ts-expect-error OpenAI chat selectors only accept model ids.
- OpenAI.configure({ apiKey: "sk-test" }).chat("gpt-4.1-mini", {})
- // @ts-expect-error auth is an override, so OpenAI Chat rejects apiKey with auth.
- OpenAI.configure({ apiKey: "sk-test", auth: Auth.bearer("oauth-token") })
- // @ts-expect-error Azure requires at least one of `resourceName` or `baseURL`.
- Azure.configure()
- Azure.configure({ apiKey: "azure-key", resourceName: "resource" }).responses("deployment")
- Azure.configure({ apiKey: configApiKey, resourceName: "resource" }).responses("deployment")
- Azure.configure({ auth: Auth.header("api-key", "azure-key"), resourceName: "resource" }).responses("deployment")
- // @ts-expect-error Azure model selectors only accept deployment ids.
- Azure.configure({ apiKey: "azure-key", resourceName: "resource" }).responses("deployment", {})
- // @ts-expect-error auth is an override, so Azure rejects apiKey with auth.
- Azure.configure({ resourceName: "resource", apiKey: "azure-key", auth: Auth.header("api-key", "override") })
- Azure.configure({ apiKey: "azure-key", resourceName: "resource" }).chat("deployment")
- Azure.configure({ apiKey: configApiKey, resourceName: "resource" }).chat("deployment")
- Azure.configure({ auth: Auth.header("api-key", "azure-key"), resourceName: "resource" }).chat("deployment")
- // @ts-expect-error Azure chat model selectors only accept deployment ids.
- Azure.configure({ apiKey: "azure-key", resourceName: "resource" }).chat("deployment", {})
- // @ts-expect-error auth is an override, so Azure Chat rejects apiKey with auth.
- Azure.configure({ resourceName: "resource", apiKey: "azure-key", auth: Auth.header("api-key", "override") })
- Anthropic.configure({ apiKey: "anthropic-key" }).model("claude-haiku")
- // @ts-expect-error Anthropic model selectors only accept model ids.
- Anthropic.configure({ apiKey: "anthropic-key" }).model("claude-haiku", {})
- // @ts-expect-error Anthropic package settings accept only one auth source.
- Anthropic.model("claude-sonnet-4-6", { apiKey: "anthropic-key", authToken: "anthropic-token" })
- AnthropicCompatible.configure({
- apiKey: "messages-key",
- baseURL: "https://messages.example.com/v1",
- provider: "example",
- }).model("compatible-model")
- // @ts-expect-error Anthropic-compatible providers require a base URL.
- AnthropicCompatible.configure({ apiKey: "messages-key" })
- // @ts-expect-error Anthropic-compatible model selectors only accept model ids.
- AnthropicCompatible.configure({ baseURL: "https://messages.example.com/v1" }).model("compatible-model", {})
- // @ts-expect-error Anthropic-compatible package settings accept only one auth source.
- AnthropicCompatible.model("compatible-model", {
- apiKey: "messages-key",
- authToken: "messages-token",
- baseURL: "https://messages.example.com/v1",
- })
- Google.configure({ apiKey: "google-key" }).model("gemini-2.5-flash")
- // @ts-expect-error Google model selectors only accept model ids.
- Google.configure({ apiKey: "google-key" }).model("gemini-2.5-flash", {})
- GoogleVertex.configure({ apiKey: "vertex-key" }).model("gemini-3.5-flash")
- GoogleVertex.configure({ accessToken: "vertex-token", project: "project" }).model("gemini-3.5-flash")
- GoogleVertex.configure({ auth: Auth.bearer("vertex-token"), project: "project" }).model("gemini-3.5-flash")
- // @ts-expect-error Vertex Gemini model selectors only accept model ids.
- GoogleVertex.configure({ apiKey: "vertex-key" }).model("gemini-3.5-flash", {})
- // @ts-expect-error Vertex Gemini config accepts only one auth source.
- GoogleVertex.configure({ accessToken: "vertex-token", apiKey: "vertex-key", project: "project" })
- // @ts-expect-error Vertex Gemini package settings accept only one auth source.
- GoogleVertex.model("gemini-3.5-flash", { accessToken: "vertex-token", apiKey: "vertex-key", project: "project" })
- GoogleVertexChat.configure({ accessToken: "vertex-token", project: "project" }).model("deepseek-ai/deepseek-v3.2-maas")
- GoogleVertexChat.configure({ auth: Auth.bearer("vertex-token"), project: "project" }).model(
- "deepseek-ai/deepseek-v3.2-maas",
- )
- // @ts-expect-error Vertex Chat package settings do not accept API keys.
- GoogleVertexChat.model("deepseek-ai/deepseek-v3.2-maas", { apiKey: "vertex-key", project: "project" })
- GoogleVertexChat.configure({ accessToken: "vertex-token", project: "project" }).model(
- "deepseek-ai/deepseek-v3.2-maas",
- // @ts-expect-error Vertex Chat model selectors only accept model ids.
- {},
- )
- GoogleVertexChat.configure({
- accessToken: "vertex-token",
- // @ts-expect-error Vertex Chat config accepts only one auth source.
- auth: Auth.bearer("vertex-token"),
- project: "project",
- })
- GoogleVertexResponses.configure({ accessToken: "vertex-token", project: "project" }).model("xai/grok-4.20-reasoning")
- GoogleVertexResponses.configure({ auth: Auth.bearer("vertex-token"), project: "project" }).model(
- "xai/grok-4.20-reasoning",
- )
- // @ts-expect-error Vertex Responses package settings do not accept API keys.
- GoogleVertexResponses.model("xai/grok-4.20-reasoning", { apiKey: "vertex-key", project: "project" })
- GoogleVertexResponses.configure({ accessToken: "vertex-token", project: "project" }).model(
- "xai/grok-4.20-reasoning",
- // @ts-expect-error Vertex Responses model selectors only accept model ids.
- {},
- )
- GoogleVertexResponses.configure({
- accessToken: "vertex-token",
- // @ts-expect-error Vertex Responses config accepts only one auth source.
- auth: Auth.bearer("vertex-token"),
- project: "project",
- })
- GoogleVertexMessages.configure({ accessToken: "vertex-token", project: "project" }).model("claude-sonnet-4-6")
- // @ts-expect-error Vertex Messages package settings do not accept API keys.
- GoogleVertexMessages.model("claude-sonnet-4-6", { apiKey: "vertex-key", project: "project" })
- GoogleVertexMessages.configure({ auth: Auth.bearer("vertex-token"), project: "project" }).model("claude-sonnet-4-6")
- GoogleVertexMessages.configure({ accessToken: "vertex-token", project: "project" }).model(
- "claude-sonnet-4-6",
- // @ts-expect-error Vertex Messages model selectors only accept model ids.
- {},
- )
- GoogleVertexMessages.configure({
- accessToken: "vertex-token",
- // @ts-expect-error Vertex Messages config accepts only one auth source.
- auth: Auth.bearer("vertex-token"),
- project: "project",
- })
- AmazonBedrock.configure({ apiKey: "bedrock-key" }).model("anthropic.claude")
- // @ts-expect-error Bedrock model selectors only accept model ids.
- AmazonBedrock.configure({ apiKey: "bedrock-key" }).model("anthropic.claude", {})
- OpenRouter.configure({ apiKey: "openrouter-key" }).model("openai/gpt-4o-mini")
- // @ts-expect-error OpenRouter model selectors only accept model ids.
- OpenRouter.configure({ apiKey: "openrouter-key" }).model("openai/gpt-4o-mini", {})
- XAI.configure({ apiKey: "xai-key" }).responses("grok-4")
- XAI.configure({ apiKey: "xai-key" }).chat("grok-4")
- // @ts-expect-error xAI Responses selectors only accept model ids.
- XAI.configure({ apiKey: "xai-key" }).responses("grok-4", {})
- // @ts-expect-error xAI Chat selectors only accept model ids.
- XAI.configure({ apiKey: "xai-key" }).chat("grok-4", {})
- OpenAICompatible.deepseek.configure({ apiKey: "deepseek-key" }).model("deepseek-chat")
- // @ts-expect-error OpenAI-compatible family selectors only accept model ids.
- OpenAICompatible.deepseek.configure({ apiKey: "deepseek-key" }).model("deepseek-chat", {})
- Cloudflare.CloudflareWorkersAI.configure({ accountId: "account", apiKey: "cf-key" }).model("@cf/meta/llama")
- // @ts-expect-error Cloudflare Workers AI model selectors only accept model ids.
- Cloudflare.CloudflareWorkersAI.configure({ accountId: "account", apiKey: "cf-key" }).model("@cf/meta/llama", {})
- GitHubCopilot.configure({ baseURL: "https://copilot.test", apiKey: "copilot-key" }).model("gpt-4.1")
- // @ts-expect-error GitHub Copilot model selectors only accept model ids.
- GitHubCopilot.configure({ baseURL: "https://copilot.test", apiKey: "copilot-key" }).model("gpt-4.1", {})
|