{"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":[]}