SPB Git forge

spb/polyllm

Public
15commits 1branches 0releases
2.2 MBsize
maindefault branch
13 days agolast push
TypeScript 97.4% SQL 1% JavaScript 0.9% CSS 0.6%
4.2 KB · 82 lines typescript
Raw Blame History
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