@nyrra/foundry-ai 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,47 @@
1
+ import {
2
+ wrapFoundryLanguageModel
3
+ } from "../chunk-UQ5CCQR6.mjs";
4
+ import {
5
+ resolveFoundryConfig,
6
+ resolveModelTarget
7
+ } from "../chunk-5SYKCKOX.mjs";
8
+
9
+ // src/providers/anthropic.ts
10
+ import { createAnthropic } from "@ai-sdk/anthropic";
11
+ import { NoSuchModelError } from "ai";
12
+ function createFoundryAnthropic(config) {
13
+ const providerId = "foundry-anthropic";
14
+ const resolvedConfig = resolveFoundryConfig(config, "createFoundryAnthropic");
15
+ const baseProvider = createAnthropic({
16
+ authToken: resolvedConfig.token,
17
+ baseURL: `${resolvedConfig.foundryUrl}/api/v2/llm/proxy/anthropic/v1`,
18
+ headers: resolvedConfig.attributionRid ? { attribution: resolvedConfig.attributionRid } : void 0,
19
+ name: providerId
20
+ });
21
+ const createLanguageModel = (modelId) => {
22
+ const resolvedModel = resolveModelTarget(modelId);
23
+ return wrapFoundryLanguageModel(baseProvider(resolvedModel.rid), {
24
+ modelId,
25
+ providerId
26
+ });
27
+ };
28
+ function provider(modelId) {
29
+ return createLanguageModel(modelId);
30
+ }
31
+ const callableProvider = provider;
32
+ callableProvider.specificationVersion = "v3";
33
+ callableProvider.languageModel = createLanguageModel;
34
+ callableProvider.chat = createLanguageModel;
35
+ callableProvider.messages = createLanguageModel;
36
+ callableProvider.embeddingModel = (modelId) => {
37
+ throw new NoSuchModelError({ modelId, modelType: "embeddingModel" });
38
+ };
39
+ callableProvider.imageModel = (modelId) => {
40
+ throw new NoSuchModelError({ modelId, modelType: "imageModel" });
41
+ };
42
+ return callableProvider;
43
+ }
44
+ export {
45
+ createFoundryAnthropic
46
+ };
47
+ //# sourceMappingURL=anthropic.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/providers/anthropic.ts"],"sourcesContent":["import { createAnthropic } from '@ai-sdk/anthropic';\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 type { AnthropicModelId, FoundryConfig } from '../types.js';\n\ntype FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];\n\nexport interface FoundryAnthropicProvider {\n (modelId: AnthropicModelId): FoundryLanguageModel;\n specificationVersion: 'v3';\n languageModel(modelId: AnthropicModelId): FoundryLanguageModel;\n chat(modelId: AnthropicModelId): FoundryLanguageModel;\n messages(modelId: AnthropicModelId): FoundryLanguageModel;\n embeddingModel(modelId: string): never;\n imageModel(modelId: string): never;\n}\n\nexport function createFoundryAnthropic(config: FoundryConfig): FoundryAnthropicProvider {\n const providerId = 'foundry-anthropic';\n const resolvedConfig = resolveFoundryConfig(config, 'createFoundryAnthropic');\n const baseProvider = createAnthropic({\n authToken: resolvedConfig.token,\n baseURL: `${resolvedConfig.foundryUrl}/api/v2/llm/proxy/anthropic/v1`,\n headers: resolvedConfig.attributionRid\n ? { attribution: resolvedConfig.attributionRid }\n : undefined,\n name: providerId,\n });\n\n const createLanguageModel = (modelId: AnthropicModelId): FoundryLanguageModel => {\n const resolvedModel = resolveModelTarget(modelId);\n\n return wrapFoundryLanguageModel(baseProvider(resolvedModel.rid), {\n modelId,\n providerId,\n });\n };\n\n function provider(modelId: AnthropicModelId): FoundryLanguageModel {\n return createLanguageModel(modelId);\n }\n\n const callableProvider = provider as FoundryAnthropicProvider;\n\n callableProvider.specificationVersion = 'v3';\n callableProvider.languageModel = createLanguageModel;\n callableProvider.chat = createLanguageModel;\n callableProvider.messages = 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"],"mappings":";;;;;;;;;AAAA,SAAS,uBAAuB;AAEhC,SAAS,wBAAwB;AAkB1B,SAAS,uBAAuB,QAAiD;AACtF,QAAM,aAAa;AACnB,QAAM,iBAAiB,qBAAqB,QAAQ,wBAAwB;AAC5E,QAAM,eAAe,gBAAgB;AAAA,IACnC,WAAW,eAAe;AAAA,IAC1B,SAAS,GAAG,eAAe,UAAU;AAAA,IACrC,SAAS,eAAe,iBACpB,EAAE,aAAa,eAAe,eAAe,IAC7C;AAAA,IACJ,MAAM;AAAA,EACR,CAAC;AAED,QAAM,sBAAsB,CAAC,YAAoD;AAC/E,UAAM,gBAAgB,mBAAmB,OAAO;AAEhD,WAAO,yBAAyB,aAAa,cAAc,GAAG,GAAG;AAAA,MAC/D;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,SAAS,SAAiD;AACjE,WAAO,oBAAoB,OAAO;AAAA,EACpC;AAEA,QAAM,mBAAmB;AAEzB,mBAAiB,uBAAuB;AACxC,mBAAiB,gBAAgB;AACjC,mBAAiB,OAAO;AACxB,mBAAiB,WAAW;AAC5B,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;","names":[]}
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/providers/openai.ts
21
+ var openai_exports = {};
22
+ __export(openai_exports, {
23
+ createFoundryOpenAI: () => createFoundryOpenAI
24
+ });
25
+ module.exports = __toCommonJS(openai_exports);
26
+ var import_openai = require("@ai-sdk/openai");
27
+ var import_ai2 = require("ai");
28
+
29
+ // src/config.ts
30
+ function normalizeFoundryUrl(foundryUrl) {
31
+ return foundryUrl.trim().replace(/\/+$/, "");
32
+ }
33
+ function resolveFoundryConfig(config, callerName) {
34
+ const normalizedConfig = normalizeResolvedFoundryConfig({
35
+ foundryUrl: typeof config.foundryUrl === "string" ? config.foundryUrl : "",
36
+ token: typeof config.token === "string" ? config.token : "",
37
+ attributionRid: typeof config.attributionRid === "string" ? config.attributionRid : void 0
38
+ });
39
+ if (normalizedConfig.foundryUrl.length === 0) {
40
+ throw new Error(`${callerName} requires config.foundryUrl to be a non-empty string.`);
41
+ }
42
+ if (normalizedConfig.token.length === 0) {
43
+ throw new Error(`${callerName} requires config.token to be a non-empty string.`);
44
+ }
45
+ return normalizedConfig;
46
+ }
47
+ function normalizeResolvedFoundryConfig(config) {
48
+ const attributionRid = config.attributionRid?.trim();
49
+ return {
50
+ foundryUrl: normalizeFoundryUrl(config.foundryUrl),
51
+ token: config.token.trim(),
52
+ attributionRid: attributionRid || void 0
53
+ };
54
+ }
55
+
56
+ // src/middleware.ts
57
+ var import_ai = require("ai");
58
+ function wrapFoundryLanguageModel(model, options) {
59
+ return (0, import_ai.wrapLanguageModel)({
60
+ model,
61
+ middleware: {
62
+ specificationVersion: "v3",
63
+ transformParams: async ({ params }) => {
64
+ return options.transformParams?.(params) ?? params;
65
+ }
66
+ },
67
+ modelId: options.modelId,
68
+ providerId: options.providerId
69
+ });
70
+ }
71
+
72
+ // src/models/anthropic-models.ts
73
+ function createAnthropicModel(rid, displayName, lifecycle) {
74
+ return {
75
+ rid,
76
+ provider: "anthropic",
77
+ displayName,
78
+ supportsVision: true,
79
+ supportsResponses: false,
80
+ lifecycle
81
+ };
82
+ }
83
+ var ANTHROPIC_MODELS = {
84
+ "claude-3.5-haiku": createAnthropicModel(
85
+ "ri.language-model-service..language-model.anthropic-claude-3-5-haiku",
86
+ "Claude 3.5 Haiku",
87
+ "ga"
88
+ ),
89
+ "claude-3.7-sonnet": createAnthropicModel(
90
+ "ri.language-model-service..language-model.anthropic-claude-3-7-sonnet",
91
+ "Claude 3.7 Sonnet",
92
+ "ga"
93
+ ),
94
+ "claude-haiku-4.5": createAnthropicModel(
95
+ "ri.language-model-service..language-model.anthropic-claude-4-5-haiku",
96
+ "Claude Haiku 4.5",
97
+ "ga"
98
+ ),
99
+ "claude-opus-4": createAnthropicModel(
100
+ "ri.language-model-service..language-model.anthropic-claude-4-opus",
101
+ "Claude Opus 4",
102
+ "ga"
103
+ ),
104
+ "claude-opus-4.1": createAnthropicModel(
105
+ "ri.language-model-service..language-model.anthropic-claude-4-1-opus",
106
+ "Claude Opus 4.1",
107
+ "ga"
108
+ ),
109
+ "claude-opus-4.5": createAnthropicModel(
110
+ "ri.language-model-service..language-model.anthropic-claude-4-5-opus",
111
+ "Claude Opus 4.5",
112
+ "ga"
113
+ ),
114
+ "claude-opus-4.6": createAnthropicModel(
115
+ "ri.language-model-service..language-model.anthropic-claude-4-6-opus",
116
+ "Claude Opus 4.6",
117
+ "ga"
118
+ ),
119
+ "claude-sonnet-4": createAnthropicModel(
120
+ "ri.language-model-service..language-model.anthropic-claude-4-sonnet",
121
+ "Claude Sonnet 4",
122
+ "ga"
123
+ ),
124
+ "claude-sonnet-4.5": createAnthropicModel(
125
+ "ri.language-model-service..language-model.anthropic-claude-4-5-sonnet",
126
+ "Claude Sonnet 4.5",
127
+ "ga"
128
+ ),
129
+ "claude-sonnet-4.6": createAnthropicModel(
130
+ "ri.language-model-service..language-model.anthropic-claude-4-6-sonnet",
131
+ "Claude Sonnet 4.6",
132
+ "ga"
133
+ )
134
+ };
135
+
136
+ // src/models/openai-models.ts
137
+ function createOpenAIModel(rid, displayName, {
138
+ lifecycle,
139
+ supportsVision = true
140
+ }) {
141
+ return {
142
+ rid,
143
+ provider: "openai",
144
+ displayName,
145
+ supportsVision,
146
+ supportsResponses: true,
147
+ lifecycle
148
+ };
149
+ }
150
+ var OPENAI_MODELS = {
151
+ "gpt-4.1": createOpenAIModel("ri.language-model-service..language-model.gpt-4-1", "GPT-4.1", {
152
+ lifecycle: "ga"
153
+ }),
154
+ "gpt-4.1-mini": createOpenAIModel(
155
+ "ri.language-model-service..language-model.gpt-4-1-mini",
156
+ "GPT-4.1 Mini",
157
+ { lifecycle: "ga" }
158
+ ),
159
+ "gpt-4.1-nano": createOpenAIModel(
160
+ "ri.language-model-service..language-model.gpt-4-1-nano",
161
+ "GPT-4.1 Nano",
162
+ { lifecycle: "ga" }
163
+ ),
164
+ "gpt-4o": createOpenAIModel("ri.language-model-service..language-model.gpt-4-o", "GPT-4o", {
165
+ lifecycle: "ga"
166
+ }),
167
+ "gpt-4o-mini": createOpenAIModel(
168
+ "ri.language-model-service..language-model.gpt-4-o-mini",
169
+ "GPT-4o Mini",
170
+ { lifecycle: "ga" }
171
+ ),
172
+ "gpt-5": createOpenAIModel("ri.language-model-service..language-model.gpt-5", "GPT-5", {
173
+ lifecycle: "ga"
174
+ }),
175
+ "gpt-5-codex": createOpenAIModel(
176
+ "ri.language-model-service..language-model.gpt-5-codex",
177
+ "GPT-5 Codex",
178
+ { lifecycle: "ga", supportsVision: false }
179
+ ),
180
+ "gpt-5-mini": createOpenAIModel(
181
+ "ri.language-model-service..language-model.gpt-5-mini",
182
+ "GPT-5 Mini",
183
+ { lifecycle: "ga" }
184
+ ),
185
+ "gpt-5-nano": createOpenAIModel(
186
+ "ri.language-model-service..language-model.gpt-5-nano",
187
+ "GPT-5 Nano",
188
+ { lifecycle: "ga" }
189
+ ),
190
+ "gpt-5.1": createOpenAIModel("ri.language-model-service..language-model.gpt-5-1", "GPT-5.1", {
191
+ lifecycle: "ga"
192
+ }),
193
+ "gpt-5.1-codex": createOpenAIModel(
194
+ "ri.language-model-service..language-model.gpt-5-1-codex",
195
+ "GPT-5.1 Codex",
196
+ { lifecycle: "ga", supportsVision: false }
197
+ ),
198
+ "gpt-5.1-codex-mini": createOpenAIModel(
199
+ "ri.language-model-service..language-model.gpt-5-1-codex-mini",
200
+ "GPT-5.1 Codex Mini",
201
+ { lifecycle: "ga", supportsVision: false }
202
+ ),
203
+ "gpt-5.2": createOpenAIModel("ri.language-model-service..language-model.gpt-5-2", "GPT-5.2", {
204
+ lifecycle: "experimental"
205
+ }),
206
+ "gpt-5.4": createOpenAIModel("ri.language-model-service..language-model.gpt-5-4", "GPT-5.4", {
207
+ lifecycle: "experimental"
208
+ }),
209
+ o3: createOpenAIModel("ri.language-model-service..language-model.o-3", "o3", { lifecycle: "ga" }),
210
+ "o4-mini": createOpenAIModel("ri.language-model-service..language-model.o-4-mini", "o4 Mini", {
211
+ lifecycle: "ga"
212
+ })
213
+ };
214
+ var OPENAI_REASONING_MODEL_IDS = /* @__PURE__ */ new Set([
215
+ "gpt-5",
216
+ "gpt-5-mini",
217
+ "gpt-5-nano",
218
+ "gpt-5.2",
219
+ "gpt-5.4",
220
+ "o3",
221
+ "o4-mini"
222
+ ]);
223
+ var OPENAI_REASONING_MODEL_TARGETS = /* @__PURE__ */ new Set([
224
+ ...OPENAI_REASONING_MODEL_IDS,
225
+ ...Object.entries(OPENAI_MODELS).filter(([modelId]) => OPENAI_REASONING_MODEL_IDS.has(modelId)).map(([, metadata]) => metadata.rid)
226
+ ]);
227
+ function isKnownOpenAIReasoningTarget(modelId) {
228
+ return OPENAI_REASONING_MODEL_TARGETS.has(modelId);
229
+ }
230
+
231
+ // src/models/catalog.ts
232
+ var MODEL_CATALOG = {
233
+ ...OPENAI_MODELS,
234
+ ...ANTHROPIC_MODELS
235
+ };
236
+ var MODEL_CATALOG_BY_RID = Object.fromEntries(
237
+ Object.values(MODEL_CATALOG).map((metadata) => [metadata.rid, metadata])
238
+ );
239
+ function getModelMetadata(modelId) {
240
+ return MODEL_CATALOG[modelId];
241
+ }
242
+ function resolveModelTarget(modelId) {
243
+ const metadata = getModelMetadata(modelId) ?? getModelMetadataByRid(modelId);
244
+ return {
245
+ rid: metadata?.rid ?? modelId,
246
+ metadata
247
+ };
248
+ }
249
+ function getModelMetadataByRid(modelRid) {
250
+ return MODEL_CATALOG_BY_RID[modelRid];
251
+ }
252
+
253
+ // src/providers/openai.ts
254
+ function createFoundryOpenAI(config) {
255
+ const providerId = "foundry-openai";
256
+ const resolvedConfig = resolveFoundryConfig(config, "createFoundryOpenAI");
257
+ const baseProvider = (0, import_openai.createOpenAI)({
258
+ apiKey: resolvedConfig.token,
259
+ baseURL: `${resolvedConfig.foundryUrl}/api/v2/llm/proxy/openai/v1`,
260
+ headers: resolvedConfig.attributionRid ? { attribution: resolvedConfig.attributionRid } : void 0,
261
+ name: providerId
262
+ });
263
+ const createLanguageModel = (modelId) => {
264
+ const resolvedModel = resolveModelTarget(modelId);
265
+ const shouldForceReasoning = isKnownOpenAIReasoningTarget(modelId) || isKnownOpenAIReasoningTarget(resolvedModel.rid);
266
+ return wrapFoundryLanguageModel(baseProvider.responses(resolvedModel.rid), {
267
+ modelId,
268
+ providerId,
269
+ transformParams: (params) => applyOpenAICompat(params, shouldForceReasoning)
270
+ });
271
+ };
272
+ function provider(modelId) {
273
+ return createLanguageModel(modelId);
274
+ }
275
+ const callableProvider = provider;
276
+ callableProvider.specificationVersion = "v3";
277
+ callableProvider.languageModel = createLanguageModel;
278
+ callableProvider.responses = createLanguageModel;
279
+ callableProvider.embeddingModel = (modelId) => {
280
+ throw new import_ai2.NoSuchModelError({ modelId, modelType: "embeddingModel" });
281
+ };
282
+ callableProvider.imageModel = (modelId) => {
283
+ throw new import_ai2.NoSuchModelError({ modelId, modelType: "imageModel" });
284
+ };
285
+ return callableProvider;
286
+ }
287
+ function applyOpenAICompat(params, shouldForceReasoning) {
288
+ const openaiOptions = asRecord(params.providerOptions?.openai);
289
+ if (openaiOptions.store === true) {
290
+ throw new Error(
291
+ "Foundry OpenAI does not support providerOptions.openai.store=true. Remove the store option or set it to false."
292
+ );
293
+ }
294
+ return {
295
+ ...params,
296
+ providerOptions: {
297
+ ...params.providerOptions ?? {},
298
+ openai: {
299
+ ...openaiOptions,
300
+ ...openaiOptions.forceReasoning == null && shouldForceReasoning ? { forceReasoning: true } : {},
301
+ store: false
302
+ }
303
+ },
304
+ ...params.tools != null ? { tools: params.tools.map(applyOpenAIFunctionToolCompat) } : {}
305
+ };
306
+ }
307
+ function asRecord(value) {
308
+ if (value == null || typeof value !== "object" || Array.isArray(value)) {
309
+ return {};
310
+ }
311
+ return value;
312
+ }
313
+ function applyOpenAIFunctionToolCompat(tool) {
314
+ if (tool.type !== "function" || tool.strict != null) {
315
+ return tool;
316
+ }
317
+ return {
318
+ ...tool,
319
+ strict: true
320
+ };
321
+ }
322
+ // Annotate the CommonJS export names for ESM import in node:
323
+ 0 && (module.exports = {
324
+ createFoundryOpenAI
325
+ });
326
+ //# sourceMappingURL=openai.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/providers/openai.ts","../../src/config.ts","../../src/middleware.ts","../../src/models/anthropic-models.ts","../../src/models/openai-models.ts","../../src/models/catalog.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 } from '../models/openai-models.js';\nimport type { FoundryConfig, OpenAIModelId } 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","import type { FoundryConfig } from './types.js';\n\nconst FOUNDRY_URL_ENV = 'FOUNDRY_URL';\nconst FOUNDRY_TOKEN_ENV = 'FOUNDRY_TOKEN';\nconst FOUNDRY_ATTRIBUTION_RID_ENV = 'FOUNDRY_ATTRIBUTION_RID';\n\nexport function loadFoundryConfig(env: NodeJS.ProcessEnv = process.env): FoundryConfig {\n return normalizeResolvedFoundryConfig({\n foundryUrl: requireEnv(env, FOUNDRY_URL_ENV),\n token: requireEnv(env, FOUNDRY_TOKEN_ENV),\n attributionRid: optionalEnv(env, FOUNDRY_ATTRIBUTION_RID_ENV),\n });\n}\n\nexport function normalizeFoundryUrl(foundryUrl: string): string {\n return foundryUrl.trim().replace(/\\/+$/, '');\n}\n\nexport function resolveFoundryConfig(config: FoundryConfig, callerName: string): FoundryConfig {\n const normalizedConfig = normalizeResolvedFoundryConfig({\n foundryUrl: typeof config.foundryUrl === 'string' ? config.foundryUrl : '',\n token: typeof config.token === 'string' ? config.token : '',\n attributionRid: typeof config.attributionRid === 'string' ? config.attributionRid : undefined,\n });\n\n if (normalizedConfig.foundryUrl.length === 0) {\n throw new Error(`${callerName} requires config.foundryUrl to be a non-empty string.`);\n }\n\n if (normalizedConfig.token.length === 0) {\n throw new Error(`${callerName} requires config.token to be a non-empty string.`);\n }\n\n return normalizedConfig;\n}\n\nfunction requireEnv(env: NodeJS.ProcessEnv, name: string): string {\n const value = optionalEnv(env, name);\n\n if (value == null) {\n throw new Error(`Missing required environment variable: ${name}`);\n }\n\n return value;\n}\n\nfunction optionalEnv(env: NodeJS.ProcessEnv, name: string): string | undefined {\n const value = env[name]?.trim();\n\n return value ? value : undefined;\n}\n\nfunction normalizeResolvedFoundryConfig(config: {\n foundryUrl: string;\n token: string;\n attributionRid?: string;\n}): FoundryConfig {\n const attributionRid = config.attributionRid?.trim();\n\n return {\n foundryUrl: normalizeFoundryUrl(config.foundryUrl),\n token: config.token.trim(),\n attributionRid: attributionRid || undefined,\n };\n}\n","import { wrapLanguageModel } from 'ai';\n\ntype FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];\ntype FoundryCallOptions = Parameters<FoundryLanguageModel['doGenerate']>[0];\n\nexport function wrapFoundryLanguageModel(\n model: FoundryLanguageModel,\n options: {\n modelId: string;\n providerId: string;\n transformParams?: (params: FoundryCallOptions) => FoundryCallOptions;\n },\n): FoundryLanguageModel {\n return wrapLanguageModel({\n model,\n middleware: {\n specificationVersion: 'v3',\n transformParams: async ({ params }) => {\n return options.transformParams?.(params) ?? params;\n },\n },\n modelId: options.modelId,\n providerId: options.providerId,\n });\n}\n","import type { KnownAnthropicModelId, ModelLifecycle, ModelMetadata } from '../types.js';\n\nfunction createAnthropicModel(\n rid: string,\n displayName: string,\n lifecycle: ModelLifecycle,\n): ModelMetadata {\n return {\n rid,\n provider: 'anthropic',\n displayName,\n supportsVision: true,\n supportsResponses: false,\n lifecycle,\n };\n}\n\nexport const ANTHROPIC_MODELS = {\n 'claude-3.5-haiku': createAnthropicModel(\n 'ri.language-model-service..language-model.anthropic-claude-3-5-haiku',\n 'Claude 3.5 Haiku',\n 'ga',\n ),\n 'claude-3.7-sonnet': createAnthropicModel(\n 'ri.language-model-service..language-model.anthropic-claude-3-7-sonnet',\n 'Claude 3.7 Sonnet',\n 'ga',\n ),\n 'claude-haiku-4.5': createAnthropicModel(\n 'ri.language-model-service..language-model.anthropic-claude-4-5-haiku',\n 'Claude Haiku 4.5',\n 'ga',\n ),\n 'claude-opus-4': createAnthropicModel(\n 'ri.language-model-service..language-model.anthropic-claude-4-opus',\n 'Claude Opus 4',\n 'ga',\n ),\n 'claude-opus-4.1': createAnthropicModel(\n 'ri.language-model-service..language-model.anthropic-claude-4-1-opus',\n 'Claude Opus 4.1',\n 'ga',\n ),\n 'claude-opus-4.5': createAnthropicModel(\n 'ri.language-model-service..language-model.anthropic-claude-4-5-opus',\n 'Claude Opus 4.5',\n 'ga',\n ),\n 'claude-opus-4.6': createAnthropicModel(\n 'ri.language-model-service..language-model.anthropic-claude-4-6-opus',\n 'Claude Opus 4.6',\n 'ga',\n ),\n 'claude-sonnet-4': createAnthropicModel(\n 'ri.language-model-service..language-model.anthropic-claude-4-sonnet',\n 'Claude Sonnet 4',\n 'ga',\n ),\n 'claude-sonnet-4.5': createAnthropicModel(\n 'ri.language-model-service..language-model.anthropic-claude-4-5-sonnet',\n 'Claude Sonnet 4.5',\n 'ga',\n ),\n 'claude-sonnet-4.6': createAnthropicModel(\n 'ri.language-model-service..language-model.anthropic-claude-4-6-sonnet',\n 'Claude Sonnet 4.6',\n 'ga',\n ),\n} as const satisfies Record<KnownAnthropicModelId, ModelMetadata>;\n","import type { KnownOpenAIModelId, ModelLifecycle, ModelMetadata } from '../types.js';\n\nfunction createOpenAIModel(\n rid: string,\n displayName: string,\n {\n lifecycle,\n supportsVision = true,\n }: {\n lifecycle: ModelLifecycle;\n supportsVision?: boolean;\n },\n): ModelMetadata {\n return {\n rid,\n provider: 'openai',\n displayName,\n supportsVision,\n supportsResponses: true,\n lifecycle,\n };\n}\n\nexport const OPENAI_MODELS = {\n 'gpt-4.1': createOpenAIModel('ri.language-model-service..language-model.gpt-4-1', 'GPT-4.1', {\n lifecycle: 'ga',\n }),\n 'gpt-4.1-mini': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-4-1-mini',\n 'GPT-4.1 Mini',\n { lifecycle: 'ga' },\n ),\n 'gpt-4.1-nano': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-4-1-nano',\n 'GPT-4.1 Nano',\n { lifecycle: 'ga' },\n ),\n 'gpt-4o': createOpenAIModel('ri.language-model-service..language-model.gpt-4-o', 'GPT-4o', {\n lifecycle: 'ga',\n }),\n 'gpt-4o-mini': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-4-o-mini',\n 'GPT-4o Mini',\n { lifecycle: 'ga' },\n ),\n 'gpt-5': createOpenAIModel('ri.language-model-service..language-model.gpt-5', 'GPT-5', {\n lifecycle: 'ga',\n }),\n 'gpt-5-codex': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-codex',\n 'GPT-5 Codex',\n { lifecycle: 'ga', supportsVision: false },\n ),\n 'gpt-5-mini': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-mini',\n 'GPT-5 Mini',\n { lifecycle: 'ga' },\n ),\n 'gpt-5-nano': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-nano',\n 'GPT-5 Nano',\n { lifecycle: 'ga' },\n ),\n 'gpt-5.1': createOpenAIModel('ri.language-model-service..language-model.gpt-5-1', 'GPT-5.1', {\n lifecycle: 'ga',\n }),\n 'gpt-5.1-codex': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-1-codex',\n 'GPT-5.1 Codex',\n { lifecycle: 'ga', supportsVision: false },\n ),\n 'gpt-5.1-codex-mini': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-1-codex-mini',\n 'GPT-5.1 Codex Mini',\n { lifecycle: 'ga', supportsVision: false },\n ),\n 'gpt-5.2': createOpenAIModel('ri.language-model-service..language-model.gpt-5-2', 'GPT-5.2', {\n lifecycle: 'experimental',\n }),\n 'gpt-5.4': createOpenAIModel('ri.language-model-service..language-model.gpt-5-4', 'GPT-5.4', {\n lifecycle: 'experimental',\n }),\n o3: createOpenAIModel('ri.language-model-service..language-model.o-3', 'o3', { lifecycle: 'ga' }),\n 'o4-mini': createOpenAIModel('ri.language-model-service..language-model.o-4-mini', 'o4 Mini', {\n lifecycle: 'ga',\n }),\n} as const satisfies Record<KnownOpenAIModelId, ModelMetadata>;\n\nconst OPENAI_REASONING_MODEL_IDS = new Set<KnownOpenAIModelId>([\n 'gpt-5',\n 'gpt-5-mini',\n 'gpt-5-nano',\n 'gpt-5.2',\n 'gpt-5.4',\n 'o3',\n 'o4-mini',\n]);\n\nconst OPENAI_REASONING_MODEL_TARGETS = new Set<string>([\n ...OPENAI_REASONING_MODEL_IDS,\n ...Object.entries(OPENAI_MODELS)\n .filter(([modelId]) => OPENAI_REASONING_MODEL_IDS.has(modelId as KnownOpenAIModelId))\n .map(([, metadata]) => metadata.rid),\n]);\n\nexport function isKnownOpenAIReasoningTarget(modelId: string): boolean {\n return OPENAI_REASONING_MODEL_TARGETS.has(modelId);\n}\n","import { FoundryModelNotFoundError } from '../errors.js';\nimport type { KnownModelId, ModelMetadata, ModelProvider, ResolvedModelTarget } from '../types.js';\nimport { ANTHROPIC_MODELS } from './anthropic-models.js';\nimport { OPENAI_MODELS } from './openai-models.js';\n\nexport const MODEL_CATALOG = {\n ...OPENAI_MODELS,\n ...ANTHROPIC_MODELS,\n} as const satisfies Record<KnownModelId, ModelMetadata>;\nexport const MODEL_CATALOG_BY_RID = Object.fromEntries(\n Object.values(MODEL_CATALOG).map((metadata) => [metadata.rid, metadata]),\n) as Record<string, ModelMetadata>;\n\nexport function getModelMetadata(modelId: string): ModelMetadata | undefined {\n return MODEL_CATALOG[modelId as KnownModelId];\n}\n\nexport function hasKnownModel(modelId: string): modelId is KnownModelId {\n return getModelMetadata(modelId) != null;\n}\n\nexport function resolveModelTarget(modelId: string): ResolvedModelTarget {\n const metadata = getModelMetadata(modelId) ?? getModelMetadataByRid(modelId);\n\n return {\n rid: metadata?.rid ?? modelId,\n metadata,\n };\n}\n\nexport function resolveKnownModelMetadata(modelId: string): ModelMetadata {\n const metadata = getModelMetadata(modelId);\n\n if (metadata == null) {\n throw new FoundryModelNotFoundError(modelId);\n }\n\n return metadata;\n}\n\nexport function resolveModelRid(modelId: string): string {\n return resolveKnownModelMetadata(modelId).rid;\n}\n\nexport function resolveModelProvider(modelId: string): ModelProvider {\n return resolveKnownModelMetadata(modelId).provider;\n}\n\nfunction getModelMetadataByRid(modelRid: string): ModelMetadata | undefined {\n return MODEL_CATALOG_BY_RID[modelRid];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA6B;AAE7B,IAAAA,aAAiC;;;ACY1B,SAAS,oBAAoB,YAA4B;AAC9D,SAAO,WAAW,KAAK,EAAE,QAAQ,QAAQ,EAAE;AAC7C;AAEO,SAAS,qBAAqB,QAAuB,YAAmC;AAC7F,QAAM,mBAAmB,+BAA+B;AAAA,IACtD,YAAY,OAAO,OAAO,eAAe,WAAW,OAAO,aAAa;AAAA,IACxE,OAAO,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAAA,IACzD,gBAAgB,OAAO,OAAO,mBAAmB,WAAW,OAAO,iBAAiB;AAAA,EACtF,CAAC;AAED,MAAI,iBAAiB,WAAW,WAAW,GAAG;AAC5C,UAAM,IAAI,MAAM,GAAG,UAAU,uDAAuD;AAAA,EACtF;AAEA,MAAI,iBAAiB,MAAM,WAAW,GAAG;AACvC,UAAM,IAAI,MAAM,GAAG,UAAU,kDAAkD;AAAA,EACjF;AAEA,SAAO;AACT;AAkBA,SAAS,+BAA+B,QAItB;AAChB,QAAM,iBAAiB,OAAO,gBAAgB,KAAK;AAEnD,SAAO;AAAA,IACL,YAAY,oBAAoB,OAAO,UAAU;AAAA,IACjD,OAAO,OAAO,MAAM,KAAK;AAAA,IACzB,gBAAgB,kBAAkB;AAAA,EACpC;AACF;;;AChEA,gBAAkC;AAK3B,SAAS,yBACd,OACA,SAKsB;AACtB,aAAO,6BAAkB;AAAA,IACvB;AAAA,IACA,YAAY;AAAA,MACV,sBAAsB;AAAA,MACtB,iBAAiB,OAAO,EAAE,OAAO,MAAM;AACrC,eAAO,QAAQ,kBAAkB,MAAM,KAAK;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,SAAS,QAAQ;AAAA,IACjB,YAAY,QAAQ;AAAA,EACtB,CAAC;AACH;;;ACtBA,SAAS,qBACP,KACA,aACA,WACe;AACf,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB;AAAA,EACF;AACF;AAEO,IAAM,mBAAmB;AAAA,EAC9B,oBAAoB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,qBAAqB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,oBAAoB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,mBAAmB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,mBAAmB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,mBAAmB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,mBAAmB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,qBAAqB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,qBAAqB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AClEA,SAAS,kBACP,KACA,aACA;AAAA,EACE;AAAA,EACA,iBAAiB;AACnB,GAIe;AACf,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,EACF;AACF;AAEO,IAAM,gBAAgB;AAAA,EAC3B,WAAW,kBAAkB,qDAAqD,WAAW;AAAA,IAC3F,WAAW;AAAA,EACb,CAAC;AAAA,EACD,gBAAgB;AAAA,IACd;AAAA,IACA;AAAA,IACA,EAAE,WAAW,KAAK;AAAA,EACpB;AAAA,EACA,gBAAgB;AAAA,IACd;AAAA,IACA;AAAA,IACA,EAAE,WAAW,KAAK;AAAA,EACpB;AAAA,EACA,UAAU,kBAAkB,qDAAqD,UAAU;AAAA,IACzF,WAAW;AAAA,EACb,CAAC;AAAA,EACD,eAAe;AAAA,IACb;AAAA,IACA;AAAA,IACA,EAAE,WAAW,KAAK;AAAA,EACpB;AAAA,EACA,SAAS,kBAAkB,mDAAmD,SAAS;AAAA,IACrF,WAAW;AAAA,EACb,CAAC;AAAA,EACD,eAAe;AAAA,IACb;AAAA,IACA;AAAA,IACA,EAAE,WAAW,MAAM,gBAAgB,MAAM;AAAA,EAC3C;AAAA,EACA,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA,EAAE,WAAW,KAAK;AAAA,EACpB;AAAA,EACA,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA,EAAE,WAAW,KAAK;AAAA,EACpB;AAAA,EACA,WAAW,kBAAkB,qDAAqD,WAAW;AAAA,IAC3F,WAAW;AAAA,EACb,CAAC;AAAA,EACD,iBAAiB;AAAA,IACf;AAAA,IACA;AAAA,IACA,EAAE,WAAW,MAAM,gBAAgB,MAAM;AAAA,EAC3C;AAAA,EACA,sBAAsB;AAAA,IACpB;AAAA,IACA;AAAA,IACA,EAAE,WAAW,MAAM,gBAAgB,MAAM;AAAA,EAC3C;AAAA,EACA,WAAW,kBAAkB,qDAAqD,WAAW;AAAA,IAC3F,WAAW;AAAA,EACb,CAAC;AAAA,EACD,WAAW,kBAAkB,qDAAqD,WAAW;AAAA,IAC3F,WAAW;AAAA,EACb,CAAC;AAAA,EACD,IAAI,kBAAkB,iDAAiD,MAAM,EAAE,WAAW,KAAK,CAAC;AAAA,EAChG,WAAW,kBAAkB,sDAAsD,WAAW;AAAA,IAC5F,WAAW;AAAA,EACb,CAAC;AACH;AAEA,IAAM,6BAA6B,oBAAI,IAAwB;AAAA,EAC7D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,iCAAiC,oBAAI,IAAY;AAAA,EACrD,GAAG;AAAA,EACH,GAAG,OAAO,QAAQ,aAAa,EAC5B,OAAO,CAAC,CAAC,OAAO,MAAM,2BAA2B,IAAI,OAA6B,CAAC,EACnF,IAAI,CAAC,CAAC,EAAE,QAAQ,MAAM,SAAS,GAAG;AACvC,CAAC;AAEM,SAAS,6BAA6B,SAA0B;AACrE,SAAO,+BAA+B,IAAI,OAAO;AACnD;;;ACtGO,IAAM,gBAAgB;AAAA,EAC3B,GAAG;AAAA,EACH,GAAG;AACL;AACO,IAAM,uBAAuB,OAAO;AAAA,EACzC,OAAO,OAAO,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,KAAK,QAAQ,CAAC;AACzE;AAEO,SAAS,iBAAiB,SAA4C;AAC3E,SAAO,cAAc,OAAuB;AAC9C;AAMO,SAAS,mBAAmB,SAAsC;AACvE,QAAM,WAAW,iBAAiB,OAAO,KAAK,sBAAsB,OAAO;AAE3E,SAAO;AAAA,IACL,KAAK,UAAU,OAAO;AAAA,IACtB;AAAA,EACF;AACF;AAoBA,SAAS,sBAAsB,UAA6C;AAC1E,SAAO,qBAAqB,QAAQ;AACtC;;;AL5BO,SAAS,oBAAoB,QAA8C;AAChF,QAAM,aAAa;AACnB,QAAM,iBAAiB,qBAAqB,QAAQ,qBAAqB;AACzE,QAAM,mBAAe,4BAAa;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,4BAAiB,EAAE,SAAS,WAAW,iBAAiB,CAAC;AAAA,EACrE;AACA,mBAAiB,aAAa,CAAC,YAAoB;AACjD,UAAM,IAAI,4BAAiB,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":["import_ai"]}
@@ -0,0 +1,15 @@
1
+ import { wrapLanguageModel } from 'ai';
2
+ import { f as OpenAIModelId, F as FoundryConfig } from '../types-cG4EwdjA.cjs';
3
+
4
+ type FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];
5
+ interface FoundryOpenAIProvider {
6
+ (modelId: OpenAIModelId): FoundryLanguageModel;
7
+ specificationVersion: 'v3';
8
+ languageModel(modelId: OpenAIModelId): FoundryLanguageModel;
9
+ responses(modelId: OpenAIModelId): FoundryLanguageModel;
10
+ embeddingModel(modelId: string): never;
11
+ imageModel(modelId: string): never;
12
+ }
13
+ declare function createFoundryOpenAI(config: FoundryConfig): FoundryOpenAIProvider;
14
+
15
+ export { type FoundryOpenAIProvider, createFoundryOpenAI };
@@ -0,0 +1,15 @@
1
+ import { wrapLanguageModel } from 'ai';
2
+ import { f as OpenAIModelId, F as FoundryConfig } from '../types-cG4EwdjA.js';
3
+
4
+ type FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];
5
+ interface FoundryOpenAIProvider {
6
+ (modelId: OpenAIModelId): FoundryLanguageModel;
7
+ specificationVersion: 'v3';
8
+ languageModel(modelId: OpenAIModelId): FoundryLanguageModel;
9
+ responses(modelId: OpenAIModelId): FoundryLanguageModel;
10
+ embeddingModel(modelId: string): never;
11
+ imageModel(modelId: string): never;
12
+ }
13
+ declare function createFoundryOpenAI(config: FoundryConfig): FoundryOpenAIProvider;
14
+
15
+ export { type FoundryOpenAIProvider, createFoundryOpenAI };
@@ -0,0 +1,84 @@
1
+ import {
2
+ wrapFoundryLanguageModel
3
+ } from "../chunk-UQ5CCQR6.mjs";
4
+ import {
5
+ isKnownOpenAIReasoningTarget,
6
+ resolveFoundryConfig,
7
+ resolveModelTarget
8
+ } from "../chunk-5SYKCKOX.mjs";
9
+
10
+ // src/providers/openai.ts
11
+ import { createOpenAI } from "@ai-sdk/openai";
12
+ import { NoSuchModelError } from "ai";
13
+ function createFoundryOpenAI(config) {
14
+ const providerId = "foundry-openai";
15
+ const resolvedConfig = resolveFoundryConfig(config, "createFoundryOpenAI");
16
+ const baseProvider = createOpenAI({
17
+ apiKey: resolvedConfig.token,
18
+ baseURL: `${resolvedConfig.foundryUrl}/api/v2/llm/proxy/openai/v1`,
19
+ headers: resolvedConfig.attributionRid ? { attribution: resolvedConfig.attributionRid } : void 0,
20
+ name: providerId
21
+ });
22
+ const createLanguageModel = (modelId) => {
23
+ const resolvedModel = resolveModelTarget(modelId);
24
+ const shouldForceReasoning = isKnownOpenAIReasoningTarget(modelId) || isKnownOpenAIReasoningTarget(resolvedModel.rid);
25
+ return wrapFoundryLanguageModel(baseProvider.responses(resolvedModel.rid), {
26
+ modelId,
27
+ providerId,
28
+ transformParams: (params) => applyOpenAICompat(params, shouldForceReasoning)
29
+ });
30
+ };
31
+ function provider(modelId) {
32
+ return createLanguageModel(modelId);
33
+ }
34
+ const callableProvider = provider;
35
+ callableProvider.specificationVersion = "v3";
36
+ callableProvider.languageModel = createLanguageModel;
37
+ callableProvider.responses = createLanguageModel;
38
+ callableProvider.embeddingModel = (modelId) => {
39
+ throw new NoSuchModelError({ modelId, modelType: "embeddingModel" });
40
+ };
41
+ callableProvider.imageModel = (modelId) => {
42
+ throw new NoSuchModelError({ modelId, modelType: "imageModel" });
43
+ };
44
+ return callableProvider;
45
+ }
46
+ function applyOpenAICompat(params, shouldForceReasoning) {
47
+ const openaiOptions = asRecord(params.providerOptions?.openai);
48
+ if (openaiOptions.store === true) {
49
+ throw new Error(
50
+ "Foundry OpenAI does not support providerOptions.openai.store=true. Remove the store option or set it to false."
51
+ );
52
+ }
53
+ return {
54
+ ...params,
55
+ providerOptions: {
56
+ ...params.providerOptions ?? {},
57
+ openai: {
58
+ ...openaiOptions,
59
+ ...openaiOptions.forceReasoning == null && shouldForceReasoning ? { forceReasoning: true } : {},
60
+ store: false
61
+ }
62
+ },
63
+ ...params.tools != null ? { tools: params.tools.map(applyOpenAIFunctionToolCompat) } : {}
64
+ };
65
+ }
66
+ function asRecord(value) {
67
+ if (value == null || typeof value !== "object" || Array.isArray(value)) {
68
+ return {};
69
+ }
70
+ return value;
71
+ }
72
+ function applyOpenAIFunctionToolCompat(tool) {
73
+ if (tool.type !== "function" || tool.strict != null) {
74
+ return tool;
75
+ }
76
+ return {
77
+ ...tool,
78
+ strict: true
79
+ };
80
+ }
81
+ export {
82
+ createFoundryOpenAI
83
+ };
84
+ //# sourceMappingURL=openai.mjs.map
@@ -0,0 +1 @@
1
+ {"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 } from '../models/openai-models.js';\nimport type { FoundryConfig, OpenAIModelId } 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":[]}
@@ -0,0 +1,28 @@
1
+ interface FoundryConfig {
2
+ foundryUrl: string;
3
+ token: string;
4
+ attributionRid?: string;
5
+ }
6
+ declare const OPENAI_MODEL_IDS: readonly ["gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "gpt-4o", "gpt-4o-mini", "gpt-5", "gpt-5-codex", "gpt-5-mini", "gpt-5-nano", "gpt-5.1", "gpt-5.1-codex", "gpt-5.1-codex-mini", "gpt-5.2", "gpt-5.4", "o3", "o4-mini"];
7
+ type KnownOpenAIModelId = (typeof OPENAI_MODEL_IDS)[number];
8
+ type OpenAIModelId = KnownOpenAIModelId | (string & {});
9
+ declare const ANTHROPIC_MODEL_IDS: readonly ["claude-3.5-haiku", "claude-3.7-sonnet", "claude-haiku-4.5", "claude-opus-4", "claude-opus-4.1", "claude-opus-4.5", "claude-opus-4.6", "claude-sonnet-4", "claude-sonnet-4.5", "claude-sonnet-4.6"];
10
+ type KnownAnthropicModelId = (typeof ANTHROPIC_MODEL_IDS)[number];
11
+ type AnthropicModelId = KnownAnthropicModelId | (string & {});
12
+ type KnownModelId = KnownOpenAIModelId | KnownAnthropicModelId;
13
+ type ModelProvider = 'openai' | 'anthropic';
14
+ type ModelLifecycle = 'ga' | 'experimental' | 'deprecated';
15
+ interface ModelMetadata {
16
+ rid: string;
17
+ provider: ModelProvider;
18
+ displayName: string;
19
+ supportsVision: boolean;
20
+ supportsResponses: boolean;
21
+ lifecycle: ModelLifecycle;
22
+ }
23
+ interface ResolvedModelTarget {
24
+ rid: string;
25
+ metadata?: ModelMetadata;
26
+ }
27
+
28
+ export { ANTHROPIC_MODEL_IDS as A, type FoundryConfig as F, type KnownModelId as K, type ModelMetadata as M, OPENAI_MODEL_IDS as O, type ResolvedModelTarget as R, type ModelProvider as a, type AnthropicModelId as b, type KnownAnthropicModelId as c, type KnownOpenAIModelId as d, type ModelLifecycle as e, type OpenAIModelId as f };
@@ -0,0 +1,28 @@
1
+ interface FoundryConfig {
2
+ foundryUrl: string;
3
+ token: string;
4
+ attributionRid?: string;
5
+ }
6
+ declare const OPENAI_MODEL_IDS: readonly ["gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "gpt-4o", "gpt-4o-mini", "gpt-5", "gpt-5-codex", "gpt-5-mini", "gpt-5-nano", "gpt-5.1", "gpt-5.1-codex", "gpt-5.1-codex-mini", "gpt-5.2", "gpt-5.4", "o3", "o4-mini"];
7
+ type KnownOpenAIModelId = (typeof OPENAI_MODEL_IDS)[number];
8
+ type OpenAIModelId = KnownOpenAIModelId | (string & {});
9
+ declare const ANTHROPIC_MODEL_IDS: readonly ["claude-3.5-haiku", "claude-3.7-sonnet", "claude-haiku-4.5", "claude-opus-4", "claude-opus-4.1", "claude-opus-4.5", "claude-opus-4.6", "claude-sonnet-4", "claude-sonnet-4.5", "claude-sonnet-4.6"];
10
+ type KnownAnthropicModelId = (typeof ANTHROPIC_MODEL_IDS)[number];
11
+ type AnthropicModelId = KnownAnthropicModelId | (string & {});
12
+ type KnownModelId = KnownOpenAIModelId | KnownAnthropicModelId;
13
+ type ModelProvider = 'openai' | 'anthropic';
14
+ type ModelLifecycle = 'ga' | 'experimental' | 'deprecated';
15
+ interface ModelMetadata {
16
+ rid: string;
17
+ provider: ModelProvider;
18
+ displayName: string;
19
+ supportsVision: boolean;
20
+ supportsResponses: boolean;
21
+ lifecycle: ModelLifecycle;
22
+ }
23
+ interface ResolvedModelTarget {
24
+ rid: string;
25
+ metadata?: ModelMetadata;
26
+ }
27
+
28
+ export { ANTHROPIC_MODEL_IDS as A, type FoundryConfig as F, type KnownModelId as K, type ModelMetadata as M, OPENAI_MODEL_IDS as O, type ResolvedModelTarget as R, type ModelProvider as a, type AnthropicModelId as b, type KnownAnthropicModelId as c, type KnownOpenAIModelId as d, type ModelLifecycle as e, type OpenAIModelId as f };