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

76 lines
2.3 KiB
TypeScript
Raw Normal View History

2025-11-20 16:41:41 +05:30
import { ProviderV2 } from "@ai-sdk/provider";
import { createOpenAI } from "@ai-sdk/openai";
import { createGoogleGenerativeAI } from "@ai-sdk/google";
import { createAnthropic } from "@ai-sdk/anthropic";
import { createOllama } from "ollama-ai-provider-v2";
import { createOpenRouter } from '@openrouter/ai-sdk-provider';
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { getModelConfig } from "../config/config.js";
2025-11-14 09:13:28 +05:30
2025-11-20 16:41:41 +05:30
const providerMap: Record<string, ProviderV2> = {};
2025-11-14 09:13:28 +05:30
2025-11-20 16:41:41 +05:30
export async function getProvider(name: string = ""): Promise<ProviderV2> {
// get model conf
const modelConfig = await getModelConfig();
if (!modelConfig) {
throw new Error("Model config not found");
}
2025-11-14 09:13:28 +05:30
if (!name) {
2025-11-20 16:41:41 +05:30
name = modelConfig.defaults.provider;
2025-11-14 09:13:28 +05:30
}
if (providerMap[name]) {
return providerMap[name];
}
2025-11-20 16:41:41 +05:30
const providerConfig = modelConfig.providers[name];
2025-11-14 09:13:28 +05:30
if (!providerConfig) {
throw new Error(`Provider ${name} not found`);
}
2025-11-20 16:41:41 +05:30
const { apiKey, baseURL, headers } = providerConfig;
2025-11-14 09:13:28 +05:30
switch (providerConfig.flavor) {
case "openai":
providerMap[name] = createOpenAI({
2025-11-20 16:41:41 +05:30
apiKey,
baseURL,
headers,
2025-11-14 09:13:28 +05:30
});
break;
case "anthropic":
providerMap[name] = createAnthropic({
2025-11-20 16:41:41 +05:30
apiKey,
baseURL,
headers
2025-11-14 09:13:28 +05:30
});
break;
case "google":
providerMap[name] = createGoogleGenerativeAI({
2025-11-20 16:41:41 +05:30
apiKey,
baseURL,
headers
2025-11-19 01:03:43 +05:30
});
break;
case "ollama":
providerMap[name] = createOllama({
2025-11-20 16:41:41 +05:30
baseURL,
headers
});
break;
case "openai-compatible":
providerMap[name] = createOpenAICompatible({
name,
apiKey,
baseURL : baseURL || "",
headers
});
break;
case "openrouter":
providerMap[name] = createOpenRouter({
apiKey,
baseURL,
headers
2025-11-14 09:13:28 +05:30
});
break;
2025-11-20 16:41:41 +05:30
default:
throw new Error(`Provider ${name} not found`);
2025-11-14 09:13:28 +05:30
}
return providerMap[name];
}