// Provider → adapter map. This table is the whole routing story at a glance: // who shares the OpenAI-compatible adapter, and who has a dedicated one. // // Adding support is obvious from here: // - new model on an existing provider → nothing to change // - new OpenAI-compatible provider → add it in config.ts + a line below // - new provider with a divergent format → write an adapter, map it below import type { ProviderName } from "../../shared/types.ts"; import type { Adapter } from "./adapter.ts"; import { anthropicAdapter } from "./anthropic.ts"; import { codexAdapter } from "./codex.ts"; import { openAICompatAdapter } from "./openai-compat.ts"; const ADAPTERS: Record = { anthropic: anthropicAdapter, // native: Anthropic Messages API openai: openAICompatAdapter, chatgpt: codexAdapter, // native: OpenAI Responses API, via the ChatGPT subscription endpoint google: openAICompatAdapter, // via Google's OpenAI-compatible endpoint mistral: openAICompatAdapter, openrouter: openAICompatAdapter, groq: openAICompatAdapter, deepseek: openAICompatAdapter, together: openAICompatAdapter, xai: openAICompatAdapter, dashscope: openAICompatAdapter, // Alibaba Qwen via DashScope's OpenAI-compatible endpoint copilot: openAICompatAdapter, // GitHub Copilot's OpenAI-compatible endpoint (+ custom headers in the adapter) cloudflare: openAICompatAdapter, // Cloudflare Workers AI / AI Gateway (OpenAI-compatible) ollama: openAICompatAdapter, omniroute: openAICompatAdapter, // a local OmniRoute gateway, OpenAI-compatible by design }; export function adapterFor(provider: ProviderName): Adapter { return ADAPTERS[provider]; }