providers.ts•2.54 kB
/**
* Provider configurations for all supported LLM APIs
* Most providers are OpenAI-compatible, Anthropic and Google have different formats
*/
export interface ProviderConfig {
name: string;
baseUrl: string;
envKey: string;
isOpenAICompatible: boolean;
defaultModel: string;
}
export const PROVIDERS: Record<string, ProviderConfig> = {
openai: {
name: "OpenAI",
baseUrl: "https://api.openai.com/v1",
envKey: "OPENAI_API_KEY",
isOpenAICompatible: true,
defaultModel: "gpt-5.1",
},
openrouter: {
name: "OpenRouter",
baseUrl: "https://openrouter.ai/api/v1",
envKey: "OPENROUTER_API_KEY",
isOpenAICompatible: true,
defaultModel: "moonshotai/kimi-k2-thinking",
},
groq: {
name: "Groq",
baseUrl: "https://api.groq.com/openai/v1",
envKey: "GROQ_API_KEY",
isOpenAICompatible: true,
defaultModel: "moonshotai/kimi-k2-instruct-0905",
},
cerebras: {
name: "Cerebras",
baseUrl: "https://api.cerebras.ai/v1",
envKey: "CEREBRAS_API_KEY",
isOpenAICompatible: true,
defaultModel: "zai-glm-4.6",
},
xai: {
name: "xAI",
baseUrl: "https://api.x.ai/v1",
envKey: "XAI_API_KEY",
isOpenAICompatible: true,
defaultModel: "grok-4-fast",
},
anthropic: {
name: "Anthropic",
baseUrl: "https://api.anthropic.com/v1",
envKey: "ANTHROPIC_API_KEY",
isOpenAICompatible: false,
defaultModel: "claude-opus-4-5",
},
google: {
name: "Google",
baseUrl: "https://generativelanguage.googleapis.com/v1beta",
envKey: "GOOGLE_API_KEY",
isOpenAICompatible: false,
defaultModel: "gemini-3-pro-preview",
},
};
/**
* Parse an agent spec string like "openrouter:openai/gpt-4o" or just "groq"
*/
export function parseAgentSpec(spec: string): { provider: string; model: string } {
const parts = spec.split(":");
const provider = parts[0].toLowerCase();
if (!PROVIDERS[provider]) {
throw new Error(`Unknown provider: ${provider}. Available: ${Object.keys(PROVIDERS).join(", ")}`);
}
const model = parts[1] || PROVIDERS[provider].defaultModel;
return { provider, model };
}
/**
* Get API key for a provider from environment
*/
export function getApiKey(provider: string): string {
const config = PROVIDERS[provider];
if (!config) {
throw new Error(`Unknown provider: ${provider}`);
}
const key = process.env[config.envKey];
if (!key) {
throw new Error(`Missing API key for ${config.name}. Set ${config.envKey} environment variable.`);
}
return key;
}