@nyrra/foundry-ai
Version:
Thin Palantir Foundry provider adapters and model catalog for the Vercel AI SDK.
84 lines (83 loc) • 2.78 kB
JavaScript
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