// LLM Factory — creates the configured provider or returns null import { AnthropicProvider } from "./anthropic.mjs"; import { OpenAIProvider } from "./openai.mjs"; import { OpenRouterProvider } from "./openrouter.mjs"; import { GeminiProvider } from "./gemini.mjs"; import { CodexProvider } from "./codex.mjs"; import { MiniMaxProvider } from "./minimax.mjs"; import { MistralProvider } from "./mistral.mjs"; import { OllamaProvider } from "./ollama.mjs"; import { GrokProvider } from "./grok.mjs"; import { OpenAICompatibleProvider } from "./openai-compatible.mjs"; export { LLMProvider } from "./provider.mjs"; export { AnthropicProvider } from "./anthropic.mjs"; export { OpenAIProvider } from "./openai.mjs"; export { OpenRouterProvider } from "./openrouter.mjs"; export { GeminiProvider } from "./gemini.mjs"; export { CodexProvider } from "./codex.mjs"; export { MiniMaxProvider } from "./minimax.mjs"; export { MistralProvider } from "./mistral.mjs"; export { OllamaProvider } from "./ollama.mjs"; export { GrokProvider } from "./grok.mjs"; export { OpenAICompatibleProvider } from "./openai-compatible.mjs"; /** * Create an LLM provider based on config. * @param {{ provider: string|null, apiKey: string|null, model: string|null }} llmConfig * @returns {LLMProvider|null} */ export function createLLMProvider(llmConfig) { if (!llmConfig?.provider) return null; const { provider, apiKey, model } = llmConfig; const common = { apiKey, model, baseUrl: llmConfig.baseUrl, temperature: llmConfig.temperature, maxTokens: llmConfig.maxTokens, timeoutMs: llmConfig.timeoutMs, openRouterSiteUrl: llmConfig.openRouterSiteUrl, openRouterAppName: llmConfig.openRouterAppName, }; switch (provider.toLowerCase()) { case "anthropic": return new AnthropicProvider({ apiKey, model }); case "openai": return new OpenAIProvider(common); case "openai-compatible": case "compatible": case "local-openai": return new OpenAICompatibleProvider({ ...common, name: provider.toLowerCase(), model: model || 'local-model', requiresApiKey: Boolean(apiKey), }); case "lmstudio": case "lm-studio": return new OpenAICompatibleProvider({ ...common, name: 'lmstudio', baseUrl: llmConfig.baseUrl || 'http://localhost:1234/v1', model: model || 'local-model', requiresApiKey: false, }); case "openrouter": return new OpenRouterProvider(common); case "gemini": return new GeminiProvider({ apiKey, model }); case "codex": return new CodexProvider({ model }); case "minimax": return new MiniMaxProvider({ apiKey, model }); case "mistral": return new MistralProvider({ apiKey, model }); case "ollama": return new OllamaProvider(common); case 'grok': return new GrokProvider({ apiKey, model }); default: console.warn( `[LLM] Unknown provider "${provider}". LLM features disabled.`, ); return null; } }