feat: harden intelligence runtime and llm providers

This commit is contained in:
2026-05-16 21:18:34 +02:00
parent 7e85a54c32
commit 85f97bb2a6
22 changed files with 732 additions and 201 deletions

View File

@@ -9,6 +9,7 @@ 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";
@@ -20,6 +21,7 @@ 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.
@@ -30,14 +32,42 @@ 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({ apiKey, model });
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({ apiKey, model });
return new OpenRouterProvider(common);
case "gemini":
return new GeminiProvider({ apiKey, model });
case "codex":
@@ -47,7 +77,7 @@ export function createLLMProvider(llmConfig) {
case "mistral":
return new MistralProvider({ apiKey, model });
case "ollama":
return new OllamaProvider({ model, baseUrl: llmConfig.baseUrl });
return new OllamaProvider(common);
case 'grok':
return new GrokProvider({ apiKey, model });
default: