Submatter/packages/ai/src/providers/resolve-client.ts

49 lines
1.6 KiB
TypeScript
Raw Normal View History

import { createAnthropic } from "@ai-sdk/anthropic";
import { createGoogleGenerativeAI } from "@ai-sdk/google";
import { createOpenAI } from "@ai-sdk/openai";
import type { LanguageModel } from "ai";
import type { ResolvedModel } from "@tasks/shared/model-routing";
export type CreateLanguageModelResult =
| { ok: true; model: LanguageModel }
| { ok: false; reason: string };
/**
* Build a Vercel AI SDK `LanguageModel` from a resolved registry config.
* Callers must pass a fully resolved `ResolvedModel` (including apiKey).
*/
export function createLanguageModelFromResolved(
resolved: ResolvedModel,
): CreateLanguageModelResult {
try {
switch (resolved.providerType) {
case "anthropic": {
const anthropic = createAnthropic({ apiKey: resolved.apiKey });
return { ok: true, model: anthropic(resolved.modelId) };
}
case "openai":
case "openai_compatible":
case "azure_openai": {
const openai = createOpenAI({
apiKey: resolved.apiKey,
baseURL: resolved.baseUrl,
});
return { ok: true, model: openai(resolved.modelId) };
}
case "google": {
const google = createGoogleGenerativeAI({ apiKey: resolved.apiKey });
return { ok: true, model: google(resolved.modelId) };
}
default:
return {
ok: false,
reason: `Unsupported provider type: ${resolved.providerType as string}`,
};
}
} catch (e) {
const message = e instanceof Error ? e.message : String(e);
return { ok: false, reason: message };
}
}