TypeScript 97.4%
SQL 1%
JavaScript 0.9%
CSS 0.6%
1import type { AIProviderAdapter, ProviderId } from "@/lib/ai/core/types";2import { anthropicAdapter } from "./anthropic";3import { openaiAdapter } from "./openai";4import { geminiAdapter } from "./gemini";5import { xaiAdapter } from "./xai";6import { mistralAdapter } from "./mistral";7import { deepseekAdapter } from "./deepseek";8import { kimiAdapter } from "./kimi";9import { openrouterAdapter } from "./openrouter";10import { cerebrasAdapter } from "./cerebras";11import { customPlaceholderAdapter } from "./custom";1213const ADAPTERS: Record<ProviderId, AIProviderAdapter> = {14 openai: openaiAdapter,15 anthropic: anthropicAdapter,16 gemini: geminiAdapter,17 xai: xaiAdapter,18 mistral: mistralAdapter,19 deepseek: deepseekAdapter,20 kimi: kimiAdapter,21 openrouter: openrouterAdapter,22 cerebras: cerebrasAdapter,23 // Per-endpoint adapters are built by `resolveCustomEndpoint()` (lib/endpoints/service); this entry only keeps the map exhaustive.24 custom: customPlaceholderAdapter,25};2627export function getAdapter(provider: ProviderId): AIProviderAdapter {28 const a = ADAPTERS[provider];29 if (!a) throw new Error(`Unknown provider: ${provider}`);30 return a;31}3233export function listAdapters(): AIProviderAdapter[] {34 return Object.values(ADAPTERS);35}3637/** Static, client-safe provider metadata. */38export const PROVIDER_META: Record<ProviderId, { name: string; shortName: string; keyDocsUrl: string; keyPrefixHint: string; color: string; description: string; consoleUrl: string }> = {39 openai: {40 name: "OpenAI",41 shortName: "OpenAI",42 keyDocsUrl: "https://platform.openai.com/api-keys",43 keyPrefixHint: "sk-",44 color: "var(--p-openai)",45 description: "GPT-5.x, o-series reasoning models, GPT-4.1 — via the Responses API.",46 consoleUrl: "https://platform.openai.com",47 },48 anthropic: {49 name: "Anthropic",50 shortName: "Anthropic",51 keyDocsUrl: "https://platform.claude.com/settings/keys",52 keyPrefixHint: "sk-ant-",53 color: "var(--p-anthropic)",54 description: "Claude Fable, Opus, Sonnet and Haiku — adaptive thinking, 1M context.",55 consoleUrl: "https://platform.claude.com",56 },57 gemini: {58 name: "Google Gemini",59 shortName: "Gemini",60 keyDocsUrl: "https://aistudio.google.com/apikey",61 keyPrefixHint: "AIza / AQ.",62 color: "var(--p-gemini)",63 description: "Gemini 3.x Flash and Pro, 2.5 family — Gemini Developer API.",64 consoleUrl: "https://aistudio.google.com",65 },66 xai: {67 name: "xAI",68 shortName: "xAI",69 keyDocsUrl: "https://console.x.ai",70 keyPrefixHint: "xai-",71 color: "var(--p-xai)",72 description: "Grok 4.x reasoning and non-reasoning models with live search.",73 consoleUrl: "https://console.x.ai",74 },75 mistral: { name: "Mistral AI", shortName: "Mistral", keyDocsUrl: "https://console.mistral.ai/api-keys", keyPrefixHint: "", color: "var(--p-mistral)", description: "Mistral Large / Medium / Small, Ministral, Magistral, Codestral.", consoleUrl: "https://console.mistral.ai" },76 deepseek: { name: "DeepSeek", shortName: "DeepSeek", keyDocsUrl: "https://platform.deepseek.com/api_keys", keyPrefixHint: "sk-", color: "var(--p-deepseek)", description: "DeepSeek V4 Flash / Pro with thinking mode.", consoleUrl: "https://platform.deepseek.com" },77 kimi: { name: "Kimi (Moonshot AI)", shortName: "Kimi", keyDocsUrl: "https://platform.moonshot.ai/console/api-keys", keyPrefixHint: "sk-", color: "var(--p-kimi)", description: "Kimi K2.6 / K2.7 Code / K3.", consoleUrl: "https://platform.moonshot.ai" },78 openrouter: { name: "OpenRouter", shortName: "OpenRouter", keyDocsUrl: "https://openrouter.ai/settings/keys", keyPrefixHint: "sk-or-v1-", color: "var(--p-openrouter)", description: "Hundreds of models behind one key.", consoleUrl: "https://openrouter.ai" },79 cerebras: { name: "Cerebras", shortName: "Cerebras", keyDocsUrl: "https://cloud.cerebras.ai/", keyPrefixHint: "csk-", color: "var(--p-cerebras)", description: "Ultra-fast inference for open models.", consoleUrl: "https://cloud.cerebras.ai" },80 custom: { name: "Custom endpoints", shortName: "Custom", keyDocsUrl: "/app/settings/endpoints", keyPrefixHint: "", color: "var(--p-custom)", description: "Your own OpenAI-compatible servers — Ollama, LM Studio, vLLM, llama.cpp, MLX.", consoleUrl: "/app/settings/endpoints" },81};82