rowboat/apps/cli/src/application/lib/models.ts

50 lines
1.8 KiB
TypeScript
Raw Normal View History

2025-11-14 09:13:28 +05:30
import { createOpenAI, OpenAIProvider } from "@ai-sdk/openai";
import { createGoogleGenerativeAI, GoogleGenerativeAIProvider } from "@ai-sdk/google";
import { AnthropicProvider, createAnthropic } from "@ai-sdk/anthropic";
2025-11-19 01:03:43 +05:30
import { OllamaProvider, createOllama } from "ollama-ai-provider-v2";
2025-11-14 09:23:37 +05:30
import { ModelConfig } from "../config/config.js";
2025-11-14 09:13:28 +05:30
2025-11-19 01:03:43 +05:30
const providerMap: Record<string, OpenAIProvider | GoogleGenerativeAIProvider | AnthropicProvider | OllamaProvider> = {};
2025-11-14 09:13:28 +05:30
export function getProvider(name: string = "") {
if (!name) {
2025-11-14 09:23:37 +05:30
name = ModelConfig.defaults.provider;
2025-11-14 09:13:28 +05:30
}
if (providerMap[name]) {
return providerMap[name];
}
2025-11-14 09:23:37 +05:30
const providerConfig = ModelConfig.providers[name];
2025-11-14 09:13:28 +05:30
if (!providerConfig) {
throw new Error(`Provider ${name} not found`);
}
switch (providerConfig.flavor) {
case "openai":
providerMap[name] = createOpenAI({
apiKey: providerConfig.apiKey,
baseURL: providerConfig.baseURL,
2025-11-19 01:03:43 +05:30
headers: providerConfig.headers,
2025-11-14 09:13:28 +05:30
});
break;
case "anthropic":
providerMap[name] = createAnthropic({
apiKey: providerConfig.apiKey,
baseURL: providerConfig.baseURL,
2025-11-19 01:03:43 +05:30
headers: providerConfig.headers,
2025-11-14 09:13:28 +05:30
});
break;
case "google":
providerMap[name] = createGoogleGenerativeAI({
apiKey: providerConfig.apiKey,
baseURL: providerConfig.baseURL,
2025-11-19 01:03:43 +05:30
headers: providerConfig.headers,
});
break;
case "ollama":
providerMap[name] = createOllama({
baseURL: providerConfig.baseURL,
headers: providerConfig.headers,
2025-11-14 09:13:28 +05:30
});
break;
}
return providerMap[name];
}