UNPKG

@nyrra/foundry-ai

Version:

Thin Palantir Foundry provider adapters and model catalog for the Vercel AI SDK.

84 lines (83 loc) 2.78 kB
import { wrapFoundryLanguageModel } from "../chunk-UQ5CCQR6.mjs"; import { isKnownOpenAIReasoningTarget, resolveFoundryConfig, resolveModelTarget } from "../chunk-B22YKL5X.mjs"; // src/providers/openai.ts import { createOpenAI } from "@ai-sdk/openai"; import { NoSuchModelError } from "ai"; function createFoundryOpenAI(config) { const providerId = "foundry-openai"; const resolvedConfig = resolveFoundryConfig(config, "createFoundryOpenAI"); const baseProvider = createOpenAI({ apiKey: resolvedConfig.token, baseURL: `${resolvedConfig.foundryUrl}/api/v2/llm/proxy/openai/v1`, headers: resolvedConfig.attributionRid ? { attribution: resolvedConfig.attributionRid } : void 0, name: providerId }); const createLanguageModel = (modelId) => { const resolvedModel = resolveModelTarget(modelId); const shouldForceReasoning = isKnownOpenAIReasoningTarget(modelId) || isKnownOpenAIReasoningTarget(resolvedModel.rid); return wrapFoundryLanguageModel(baseProvider.responses(resolvedModel.rid), { modelId, providerId, transformParams: (params) => applyOpenAICompat(params, shouldForceReasoning) }); }; function provider(modelId) { return createLanguageModel(modelId); } const callableProvider = provider; callableProvider.specificationVersion = "v3"; callableProvider.languageModel = createLanguageModel; callableProvider.responses = createLanguageModel; callableProvider.embeddingModel = (modelId) => { throw new NoSuchModelError({ modelId, modelType: "embeddingModel" }); }; callableProvider.imageModel = (modelId) => { throw new NoSuchModelError({ modelId, modelType: "imageModel" }); }; return callableProvider; } function applyOpenAICompat(params, shouldForceReasoning) { const openaiOptions = asRecord(params.providerOptions?.openai); if (openaiOptions.store === true) { throw new Error( "Foundry OpenAI does not support providerOptions.openai.store=true. Remove the store option or set it to false." ); } return { ...params, providerOptions: { ...params.providerOptions ?? {}, openai: { ...openaiOptions, ...openaiOptions.forceReasoning == null && shouldForceReasoning ? { forceReasoning: true } : {}, store: false } }, ...params.tools != null ? { tools: params.tools.map(applyOpenAIFunctionToolCompat) } : {} }; } function asRecord(value) { if (value == null || typeof value !== "object" || Array.isArray(value)) { return {}; } return value; } function applyOpenAIFunctionToolCompat(tool) { if (tool.type !== "function" || tool.strict != null) { return tool; } return { ...tool, strict: true }; } export { createFoundryOpenAI }; //# sourceMappingURL=openai.mjs.map