UNPKG

@nyrra/foundry-ai

Version:

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

1 lines 5.57 kB
{"version":3,"sources":["../../src/providers/openai.ts"],"sourcesContent":["import { createOpenAI } from '@ai-sdk/openai';\nimport type { wrapLanguageModel } from 'ai';\nimport { NoSuchModelError } from 'ai';\nimport { resolveFoundryConfig } from '../config.js';\nimport { wrapFoundryLanguageModel } from '../middleware.js';\nimport { resolveModelTarget } from '../models/catalog.js';\nimport { isKnownOpenAIReasoningTarget, type OpenAIModelId } from '../models/openai-models.js';\nimport type { FoundryConfig } from '../types.js';\n\ntype FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];\ntype FoundryCallOptions = Parameters<FoundryLanguageModel['doGenerate']>[0];\ntype FoundryFunctionTool = NonNullable<FoundryCallOptions['tools']>[number];\n\nexport interface FoundryOpenAIProvider {\n (modelId: OpenAIModelId): FoundryLanguageModel;\n specificationVersion: 'v3';\n languageModel(modelId: OpenAIModelId): FoundryLanguageModel;\n responses(modelId: OpenAIModelId): FoundryLanguageModel;\n embeddingModel(modelId: string): never;\n imageModel(modelId: string): never;\n}\n\nexport function createFoundryOpenAI(config: FoundryConfig): FoundryOpenAIProvider {\n const providerId = 'foundry-openai';\n const resolvedConfig = resolveFoundryConfig(config, 'createFoundryOpenAI');\n const baseProvider = createOpenAI({\n apiKey: resolvedConfig.token,\n baseURL: `${resolvedConfig.foundryUrl}/api/v2/llm/proxy/openai/v1`,\n headers: resolvedConfig.attributionRid\n ? { attribution: resolvedConfig.attributionRid }\n : undefined,\n name: providerId,\n });\n\n const createLanguageModel = (modelId: OpenAIModelId): FoundryLanguageModel => {\n const resolvedModel = resolveModelTarget(modelId);\n const shouldForceReasoning =\n isKnownOpenAIReasoningTarget(modelId) || isKnownOpenAIReasoningTarget(resolvedModel.rid);\n\n return wrapFoundryLanguageModel(baseProvider.responses(resolvedModel.rid), {\n modelId,\n providerId,\n transformParams: (params) => applyOpenAICompat(params, shouldForceReasoning),\n });\n };\n\n function provider(modelId: OpenAIModelId): FoundryLanguageModel {\n return createLanguageModel(modelId);\n }\n\n const callableProvider = provider as FoundryOpenAIProvider;\n\n callableProvider.specificationVersion = 'v3';\n callableProvider.languageModel = createLanguageModel;\n callableProvider.responses = createLanguageModel;\n callableProvider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n callableProvider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return callableProvider;\n}\n\nfunction applyOpenAICompat(\n params: FoundryCallOptions,\n shouldForceReasoning: boolean,\n): FoundryCallOptions {\n const openaiOptions = asRecord(params.providerOptions?.openai);\n\n if (openaiOptions.store === true) {\n throw new Error(\n 'Foundry OpenAI does not support providerOptions.openai.store=true. Remove the store option or set it to false.',\n );\n }\n\n return {\n ...params,\n providerOptions: {\n ...(params.providerOptions ?? {}),\n openai: {\n ...openaiOptions,\n ...(openaiOptions.forceReasoning == null && shouldForceReasoning\n ? { forceReasoning: true }\n : {}),\n store: false,\n },\n },\n ...(params.tools != null ? { tools: params.tools.map(applyOpenAIFunctionToolCompat) } : {}),\n };\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {};\n }\n\n return value as Record<string, unknown>;\n}\n\nfunction applyOpenAIFunctionToolCompat(tool: FoundryFunctionTool): FoundryFunctionTool {\n if (tool.type !== 'function' || tool.strict != null) {\n return tool;\n }\n\n return {\n ...tool,\n strict: true,\n };\n}\n"],"mappings":";;;;;;;;;;AAAA,SAAS,oBAAoB;AAE7B,SAAS,wBAAwB;AAoB1B,SAAS,oBAAoB,QAA8C;AAChF,QAAM,aAAa;AACnB,QAAM,iBAAiB,qBAAqB,QAAQ,qBAAqB;AACzE,QAAM,eAAe,aAAa;AAAA,IAChC,QAAQ,eAAe;AAAA,IACvB,SAAS,GAAG,eAAe,UAAU;AAAA,IACrC,SAAS,eAAe,iBACpB,EAAE,aAAa,eAAe,eAAe,IAC7C;AAAA,IACJ,MAAM;AAAA,EACR,CAAC;AAED,QAAM,sBAAsB,CAAC,YAAiD;AAC5E,UAAM,gBAAgB,mBAAmB,OAAO;AAChD,UAAM,uBACJ,6BAA6B,OAAO,KAAK,6BAA6B,cAAc,GAAG;AAEzF,WAAO,yBAAyB,aAAa,UAAU,cAAc,GAAG,GAAG;AAAA,MACzE;AAAA,MACA;AAAA,MACA,iBAAiB,CAAC,WAAW,kBAAkB,QAAQ,oBAAoB;AAAA,IAC7E,CAAC;AAAA,EACH;AAEA,WAAS,SAAS,SAA8C;AAC9D,WAAO,oBAAoB,OAAO;AAAA,EACpC;AAEA,QAAM,mBAAmB;AAEzB,mBAAiB,uBAAuB;AACxC,mBAAiB,gBAAgB;AACjC,mBAAiB,YAAY;AAC7B,mBAAiB,iBAAiB,CAAC,YAAoB;AACrD,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,iBAAiB,CAAC;AAAA,EACrE;AACA,mBAAiB,aAAa,CAAC,YAAoB;AACjD,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAEA,SAAS,kBACP,QACA,sBACoB;AACpB,QAAM,gBAAgB,SAAS,OAAO,iBAAiB,MAAM;AAE7D,MAAI,cAAc,UAAU,MAAM;AAChC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,iBAAiB;AAAA,MACf,GAAI,OAAO,mBAAmB,CAAC;AAAA,MAC/B,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,GAAI,cAAc,kBAAkB,QAAQ,uBACxC,EAAE,gBAAgB,KAAK,IACvB,CAAC;AAAA,QACL,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,GAAI,OAAO,SAAS,OAAO,EAAE,OAAO,OAAO,MAAM,IAAI,6BAA6B,EAAE,IAAI,CAAC;AAAA,EAC3F;AACF;AAEA,SAAS,SAAS,OAAyC;AACzD,MAAI,SAAS,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACtE,WAAO,CAAC;AAAA,EACV;AAEA,SAAO;AACT;AAEA,SAAS,8BAA8B,MAAgD;AACrF,MAAI,KAAK,SAAS,cAAc,KAAK,UAAU,MAAM;AACnD,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,EACV;AACF;","names":[]}