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];
|
|
|
|
|
}
|