@nyrra/foundry-ai 0.0.2-rc.4 → 0.0.2-rc.5

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.
package/README.md CHANGED
@@ -69,19 +69,19 @@ Each live run writes structured artifacts under `.memory/capability-runs/<run-id
69
69
 
70
70
  Generated from the latest local live verification artifact checked into this branch.
71
71
 
72
- Latest snapshot: `2026-03-28T07-45-09.047Z-dec73f`
72
+ Latest snapshot: `2026-03-28T08-29-30.093Z-32e0e4`
73
73
 
74
74
  - Default Models: openai=`gpt-5-mini`, anthropic=`claude-sonnet-4.6`, google=`gemini-3.1-flash-lite`
75
75
  - Model Scope: `catalog`
76
- - Status Counts: `pass`: 287, `skipped`: 186, `proxy-rejected`: 7, `fail`: 19
76
+ - Status Counts: `pass`: 297, `skipped`: 184, `fail`: 18
77
77
 
78
- The default per-provider models are the hard gate. Additional catalog rows are investigation coverage and may surface non-pass results without failing the suite.
78
+ The default per-provider models are the hard gate. Additional catalog rows are investigation coverage, exclude lifecycle `sunset` and `deprecated` models, and may surface non-pass results without failing the suite.
79
79
 
80
80
  | Provider | Pass | Skipped | Proxy Rejected | Unsupported | Fail |
81
81
  |---|---:|---:|---:|---:|---:|
82
- | openai | 150 | 92 | 0 | 0 | 0 |
83
- | anthropic | 85 | 51 | 0 | 0 | 15 |
84
- | google | 52 | 43 | 7 | 0 | 4 |
82
+ | openai | 160 | 96 | 0 | 0 | 1 |
83
+ | anthropic | 84 | 51 | 0 | 0 | 16 |
84
+ | google | 53 | 37 | 0 | 0 | 1 |
85
85
 
86
86
  ### Provider Tables
87
87
 
@@ -89,6 +89,8 @@ The default per-provider models are the hard gate. Additional catalog rows are i
89
89
 
90
90
  | Model | Text | Messages | RID | Stream | Structured | Tools | Agent | Structured+Tools | Vision | Reasoning |
91
91
  |---|---|---|---|---|---|---|---|---|---|---|
92
+ | `gpt-5.4-nano` | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
93
+ | `gpt-5.4-mini` | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
92
94
  | `gpt-5.4` | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
93
95
  | `gpt-5.2` | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
94
96
  | `gpt-5.1-codex-mini` | pass | pass | pass | pass | pass | pass | pass | pass | skipped | skipped |
@@ -96,13 +98,12 @@ The default per-provider models are the hard gate. Additional catalog rows are i
96
98
  | `gpt-5.1` | pass | pass | pass | pass | pass | pass | pass | pass | pass | skipped |
97
99
  | `gpt-5-nano` | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
98
100
  | `gpt-5-mini` | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
99
- | `gpt-5-codex` | pass | pass | pass | pass | pass | pass | pass | pass | skipped | skipped |
101
+ | `gpt-5-codex` | fail | pass | pass | pass | pass | pass | pass | pass | skipped | skipped |
100
102
  | `gpt-5` | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
101
103
  | `gpt-4.1-nano` | pass | pass | pass | pass | pass | pass | pass | pass | pass | skipped |
102
104
  | `gpt-4.1-mini` | pass | pass | pass | pass | pass | pass | pass | pass | pass | skipped |
103
105
  | `gpt-4.1` | pass | pass | pass | pass | pass | pass | pass | pass | pass | skipped |
104
106
  | `o4-mini` | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
105
- | `gpt-4o-mini` | pass | pass | pass | pass | pass | pass | pass | pass | pass | skipped |
106
107
  | `gpt-4o` | pass | pass | pass | pass | pass | pass | pass | pass | pass | skipped |
107
108
  | `o3` | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
108
109
 
@@ -115,7 +116,7 @@ The default per-provider models are the hard gate. Additional catalog rows are i
115
116
  | `claude-sonnet-4.5` | pass | pass | pass | pass | pass | pass | pass | pass | pass | fail |
116
117
  | `claude-opus-4.5` | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
117
118
  | `claude-haiku-4.5` | pass | pass | pass | pass | pass | pass | pass | pass | pass | fail |
118
- | `claude-opus-4.1` | pass | pass | pass | pass | pass | fail | fail | fail | fail | fail |
119
+ | `claude-opus-4.1` | pass | pass | pass | pass | fail | fail | fail | fail | fail | fail |
119
120
  | `claude-sonnet-4` | pass | pass | pass | pass | pass | pass | pass | pass | pass | fail |
120
121
  | `claude-opus-4` | pass | pass | pass | pass | pass | fail | fail | fail | fail | fail |
121
122
  | `claude-3.7-sonnet` | pass | pass | pass | pass | pass | pass | pass | pass | pass | fail |
@@ -127,11 +128,10 @@ The default per-provider models are the hard gate. Additional catalog rows are i
127
128
  |---|---|---|---|---|---|---|---|---|---|---|
128
129
  | `gemini-3.1-pro` | pass | pass | pass | pass | pass | pass | pass | pass | pass | skipped |
129
130
  | `gemini-3.1-flash-lite` | pass | pass | pass | pass | pass | pass | pass | pass | pass | skipped |
130
- | `gemini-3-pro` | proxy | proxy | proxy | fail | proxy | fail | proxy | proxy | proxy | skipped |
131
- | `gemini-3-flash` | pass | pass | pass | pass | fail | pass | pass | pass | pass | skipped |
132
- | `gemini-2.5-pro` | pass | pass | pass | pass | pass | pass | pass | pass | pass | skipped |
131
+ | `gemini-3-flash` | pass | pass | pass | pass | pass | pass | pass | pass | pass | skipped |
132
+ | `gemini-2.5-pro` | pass | pass | pass | pass | fail | pass | pass | pass | pass | skipped |
133
133
  | `gemini-2.5-flash-lite` | pass | pass | pass | pass | pass | pass | pass | pass | pass | skipped |
134
- | `gemini-2.5-flash` | pass | pass | pass | pass | pass | pass | fail | pass | pass | skipped |
134
+ | `gemini-2.5-flash` | pass | pass | pass | pass | pass | pass | pass | pass | pass | skipped |
135
135
 
136
136
  See [docs/live-capability-matrix.md](./docs/live-capability-matrix.md) for the full row-by-row matrix and non-pass details.
137
137
  <!-- live-matrix:end -->
@@ -203,7 +203,7 @@ var OPENAI_MODELS = {
203
203
  "gpt-4o-mini": createOpenAIModel(
204
204
  "ri.language-model-service..language-model.gpt-4-o-mini",
205
205
  "GPT-4o Mini",
206
- { lifecycle: "ga" }
206
+ { lifecycle: "sunset" }
207
207
  ),
208
208
  "gpt-5": createOpenAIModel("ri.language-model-service..language-model.gpt-5", "GPT-5", {
209
209
  lifecycle: "ga"
@@ -242,6 +242,16 @@ var OPENAI_MODELS = {
242
242
  "gpt-5.4": createOpenAIModel("ri.language-model-service..language-model.gpt-5-4", "GPT-5.4", {
243
243
  lifecycle: "experimental"
244
244
  }),
245
+ "gpt-5.4-mini": createOpenAIModel(
246
+ "ri.language-model-service..language-model.gpt-5-4-mini",
247
+ "GPT-5.4 Mini",
248
+ { lifecycle: "experimental" }
249
+ ),
250
+ "gpt-5.4-nano": createOpenAIModel(
251
+ "ri.language-model-service..language-model.gpt-5-4-nano",
252
+ "GPT-5.4 Nano",
253
+ { lifecycle: "experimental" }
254
+ ),
245
255
  o3: createOpenAIModel("ri.language-model-service..language-model.o-3", "o3", { lifecycle: "ga" }),
246
256
  "o4-mini": createOpenAIModel("ri.language-model-service..language-model.o-4-mini", "o4 Mini", {
247
257
  lifecycle: "ga"
@@ -253,6 +263,8 @@ var OPENAI_REASONING_MODEL_IDS = /* @__PURE__ */ new Set([
253
263
  "gpt-5-nano",
254
264
  "gpt-5.2",
255
265
  "gpt-5.4",
266
+ "gpt-5.4-mini",
267
+ "gpt-5.4-nano",
256
268
  "o3",
257
269
  "o4-mini"
258
270
  ]);
@@ -320,4 +332,4 @@ export {
320
332
  resolveModelRid,
321
333
  resolveModelProvider
322
334
  };
323
- //# sourceMappingURL=chunk-QPX75PWC.mjs.map
335
+ //# sourceMappingURL=chunk-3KNQMREL.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config.ts","../src/errors.ts","../src/models/anthropic-models.ts","../src/models/google-models.ts","../src/models/openai-models.ts","../src/models/catalog.ts"],"sourcesContent":["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","export class FoundryModelNotFoundError extends Error {\n constructor(modelId: string) {\n super(\n `Unknown model: \"${modelId}\". Check the catalog for supported aliases or pass a raw Foundry RID directly to a provider adapter.`,\n );\n this.name = 'FoundryModelNotFoundError';\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 { KnownGoogleModelId, ModelLifecycle, ModelMetadata } from '../types.js';\n\nfunction createGoogleModel(\n rid: string,\n displayName: string,\n lifecycle: ModelLifecycle,\n): ModelMetadata {\n return {\n rid,\n provider: 'google',\n displayName,\n supportsVision: true,\n supportsResponses: false,\n lifecycle,\n };\n}\n\nexport const GOOGLE_MODELS = {\n 'gemini-2.5-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-pro',\n 'Gemini 2.5 Pro',\n 'ga',\n ),\n 'gemini-2.5-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash',\n 'Gemini 2.5 Flash',\n 'ga',\n ),\n 'gemini-2.5-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash-lite',\n 'Gemini 2.5 Flash Lite',\n 'ga',\n ),\n 'gemini-3-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-pro',\n 'Gemini 3 Pro (Preview)',\n 'sunset',\n ),\n 'gemini-3-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-flash',\n 'Gemini 3 Flash (Preview)',\n 'ga',\n ),\n 'gemini-3.1-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-pro',\n 'Gemini 3.1 Pro (Preview)',\n 'ga',\n ),\n 'gemini-3.1-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-flash-lite',\n 'Gemini 3.1 Flash Lite (Preview)',\n 'experimental',\n ),\n} as const satisfies Record<KnownGoogleModelId, 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: 'sunset' },\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 'gpt-5.4-mini': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-4-mini',\n 'GPT-5.4 Mini',\n { lifecycle: 'experimental' },\n ),\n 'gpt-5.4-nano': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-4-nano',\n 'GPT-5.4 Nano',\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 'gpt-5.4-mini',\n 'gpt-5.4-nano',\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 { GOOGLE_MODELS } from './google-models.js';\nimport { OPENAI_MODELS } from './openai-models.js';\n\nexport const MODEL_CATALOG = {\n ...OPENAI_MODELS,\n ...ANTHROPIC_MODELS,\n ...GOOGLE_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":"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","names":[]}
package/dist/index.cjs CHANGED
@@ -230,7 +230,7 @@ var OPENAI_MODELS = {
230
230
  "gpt-4o-mini": createOpenAIModel(
231
231
  "ri.language-model-service..language-model.gpt-4-o-mini",
232
232
  "GPT-4o Mini",
233
- { lifecycle: "ga" }
233
+ { lifecycle: "sunset" }
234
234
  ),
235
235
  "gpt-5": createOpenAIModel("ri.language-model-service..language-model.gpt-5", "GPT-5", {
236
236
  lifecycle: "ga"
@@ -269,6 +269,16 @@ var OPENAI_MODELS = {
269
269
  "gpt-5.4": createOpenAIModel("ri.language-model-service..language-model.gpt-5-4", "GPT-5.4", {
270
270
  lifecycle: "experimental"
271
271
  }),
272
+ "gpt-5.4-mini": createOpenAIModel(
273
+ "ri.language-model-service..language-model.gpt-5-4-mini",
274
+ "GPT-5.4 Mini",
275
+ { lifecycle: "experimental" }
276
+ ),
277
+ "gpt-5.4-nano": createOpenAIModel(
278
+ "ri.language-model-service..language-model.gpt-5-4-nano",
279
+ "GPT-5.4 Nano",
280
+ { lifecycle: "experimental" }
281
+ ),
272
282
  o3: createOpenAIModel("ri.language-model-service..language-model.o-3", "o3", { lifecycle: "ga" }),
273
283
  "o4-mini": createOpenAIModel("ri.language-model-service..language-model.o-4-mini", "o4 Mini", {
274
284
  lifecycle: "ga"
@@ -280,6 +290,8 @@ var OPENAI_REASONING_MODEL_IDS = /* @__PURE__ */ new Set([
280
290
  "gpt-5-nano",
281
291
  "gpt-5.2",
282
292
  "gpt-5.4",
293
+ "gpt-5.4-mini",
294
+ "gpt-5.4-nano",
283
295
  "o3",
284
296
  "o4-mini"
285
297
  ]);
@@ -343,6 +355,8 @@ var OPENAI_MODEL_IDS = [
343
355
  "gpt-5.1-codex-mini",
344
356
  "gpt-5.2",
345
357
  "gpt-5.4",
358
+ "gpt-5.4-mini",
359
+ "gpt-5.4-nano",
346
360
  "o3",
347
361
  "o4-mini"
348
362
  ];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/config.ts","../src/errors.ts","../src/models/anthropic-models.ts","../src/models/google-models.ts","../src/models/openai-models.ts","../src/models/catalog.ts","../src/types.ts"],"sourcesContent":["export { loadFoundryConfig } from './config.js';\nexport { FoundryModelNotFoundError } from './errors.js';\nexport { ANTHROPIC_MODELS } from './models/anthropic-models.js';\nexport {\n getModelMetadata,\n hasKnownModel,\n MODEL_CATALOG,\n MODEL_CATALOG_BY_RID,\n resolveKnownModelMetadata,\n resolveModelProvider,\n resolveModelRid,\n resolveModelTarget,\n} from './models/catalog.js';\nexport { GOOGLE_MODELS } from './models/google-models.js';\nexport { OPENAI_MODELS } from './models/openai-models.js';\nexport type {\n AnthropicModelId,\n FoundryConfig,\n GoogleModelId,\n KnownAnthropicModelId,\n KnownGoogleModelId,\n KnownModelId,\n KnownOpenAIModelId,\n ModelLifecycle,\n ModelMetadata,\n ModelProvider,\n OpenAIModelId,\n ResolvedModelTarget,\n} from './types.js';\nexport { ANTHROPIC_MODEL_IDS, GOOGLE_MODEL_IDS, OPENAI_MODEL_IDS } from './types.js';\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","export class FoundryModelNotFoundError extends Error {\n constructor(modelId: string) {\n super(\n `Unknown model: \"${modelId}\". Check the catalog for supported aliases or pass a raw Foundry RID directly to a provider adapter.`,\n );\n this.name = 'FoundryModelNotFoundError';\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 { KnownGoogleModelId, ModelLifecycle, ModelMetadata } from '../types.js';\n\nfunction createGoogleModel(\n rid: string,\n displayName: string,\n lifecycle: ModelLifecycle,\n): ModelMetadata {\n return {\n rid,\n provider: 'google',\n displayName,\n supportsVision: true,\n supportsResponses: false,\n lifecycle,\n };\n}\n\nexport const GOOGLE_MODELS = {\n 'gemini-2.5-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-pro',\n 'Gemini 2.5 Pro',\n 'ga',\n ),\n 'gemini-2.5-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash',\n 'Gemini 2.5 Flash',\n 'ga',\n ),\n 'gemini-2.5-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash-lite',\n 'Gemini 2.5 Flash Lite',\n 'ga',\n ),\n 'gemini-3-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-pro',\n 'Gemini 3 Pro (Preview)',\n 'sunset',\n ),\n 'gemini-3-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-flash',\n 'Gemini 3 Flash (Preview)',\n 'ga',\n ),\n 'gemini-3.1-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-pro',\n 'Gemini 3.1 Pro (Preview)',\n 'ga',\n ),\n 'gemini-3.1-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-flash-lite',\n 'Gemini 3.1 Flash Lite (Preview)',\n 'experimental',\n ),\n} as const satisfies Record<KnownGoogleModelId, 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 { GOOGLE_MODELS } from './google-models.js';\nimport { OPENAI_MODELS } from './openai-models.js';\n\nexport const MODEL_CATALOG = {\n ...OPENAI_MODELS,\n ...ANTHROPIC_MODELS,\n ...GOOGLE_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","export interface FoundryConfig {\n foundryUrl: string;\n token: string;\n attributionRid?: string;\n}\n\nexport const OPENAI_MODEL_IDS = [\n 'gpt-4.1',\n 'gpt-4.1-mini',\n 'gpt-4.1-nano',\n 'gpt-4o',\n 'gpt-4o-mini',\n 'gpt-5',\n 'gpt-5-codex',\n 'gpt-5-mini',\n 'gpt-5-nano',\n 'gpt-5.1',\n 'gpt-5.1-codex',\n 'gpt-5.1-codex-mini',\n 'gpt-5.2',\n 'gpt-5.4',\n 'o3',\n 'o4-mini',\n] as const;\n\nexport type KnownOpenAIModelId = (typeof OPENAI_MODEL_IDS)[number];\n\nexport type OpenAIModelId = KnownOpenAIModelId | (string & {});\n\nexport const ANTHROPIC_MODEL_IDS = [\n 'claude-3.5-haiku',\n 'claude-3.7-sonnet',\n 'claude-haiku-4.5',\n 'claude-opus-4',\n 'claude-opus-4.1',\n 'claude-opus-4.5',\n 'claude-opus-4.6',\n 'claude-sonnet-4',\n 'claude-sonnet-4.5',\n 'claude-sonnet-4.6',\n] as const;\n\nexport type KnownAnthropicModelId = (typeof ANTHROPIC_MODEL_IDS)[number];\n\nexport type AnthropicModelId = KnownAnthropicModelId | (string & {});\n\nexport const GOOGLE_MODEL_IDS = [\n 'gemini-2.5-pro',\n 'gemini-2.5-flash',\n 'gemini-2.5-flash-lite',\n 'gemini-3-pro',\n 'gemini-3-flash',\n 'gemini-3.1-pro',\n 'gemini-3.1-flash-lite',\n] as const;\n\nexport type KnownGoogleModelId = (typeof GOOGLE_MODEL_IDS)[number];\n\nexport type GoogleModelId = KnownGoogleModelId | (string & {});\n\nexport type KnownModelId = KnownOpenAIModelId | KnownAnthropicModelId | KnownGoogleModelId;\n\nexport type ModelProvider = 'openai' | 'anthropic' | 'google';\nexport type ModelLifecycle = 'ga' | 'experimental' | 'sunset' | 'deprecated';\n\nexport interface ModelMetadata {\n rid: string;\n provider: ModelProvider;\n displayName: string;\n supportsVision: boolean;\n supportsResponses: boolean;\n lifecycle: ModelLifecycle;\n}\n\nexport interface ResolvedModelTarget {\n rid: string;\n metadata?: ModelMetadata;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/config.ts","../src/errors.ts","../src/models/anthropic-models.ts","../src/models/google-models.ts","../src/models/openai-models.ts","../src/models/catalog.ts","../src/types.ts"],"sourcesContent":["export { loadFoundryConfig } from './config.js';\nexport { FoundryModelNotFoundError } from './errors.js';\nexport { ANTHROPIC_MODELS } from './models/anthropic-models.js';\nexport {\n getModelMetadata,\n hasKnownModel,\n MODEL_CATALOG,\n MODEL_CATALOG_BY_RID,\n resolveKnownModelMetadata,\n resolveModelProvider,\n resolveModelRid,\n resolveModelTarget,\n} from './models/catalog.js';\nexport { GOOGLE_MODELS } from './models/google-models.js';\nexport { OPENAI_MODELS } from './models/openai-models.js';\nexport type {\n AnthropicModelId,\n FoundryConfig,\n GoogleModelId,\n KnownAnthropicModelId,\n KnownGoogleModelId,\n KnownModelId,\n KnownOpenAIModelId,\n ModelLifecycle,\n ModelMetadata,\n ModelProvider,\n OpenAIModelId,\n ResolvedModelTarget,\n} from './types.js';\nexport { ANTHROPIC_MODEL_IDS, GOOGLE_MODEL_IDS, OPENAI_MODEL_IDS } from './types.js';\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","export class FoundryModelNotFoundError extends Error {\n constructor(modelId: string) {\n super(\n `Unknown model: \"${modelId}\". Check the catalog for supported aliases or pass a raw Foundry RID directly to a provider adapter.`,\n );\n this.name = 'FoundryModelNotFoundError';\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 { KnownGoogleModelId, ModelLifecycle, ModelMetadata } from '../types.js';\n\nfunction createGoogleModel(\n rid: string,\n displayName: string,\n lifecycle: ModelLifecycle,\n): ModelMetadata {\n return {\n rid,\n provider: 'google',\n displayName,\n supportsVision: true,\n supportsResponses: false,\n lifecycle,\n };\n}\n\nexport const GOOGLE_MODELS = {\n 'gemini-2.5-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-pro',\n 'Gemini 2.5 Pro',\n 'ga',\n ),\n 'gemini-2.5-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash',\n 'Gemini 2.5 Flash',\n 'ga',\n ),\n 'gemini-2.5-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash-lite',\n 'Gemini 2.5 Flash Lite',\n 'ga',\n ),\n 'gemini-3-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-pro',\n 'Gemini 3 Pro (Preview)',\n 'sunset',\n ),\n 'gemini-3-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-flash',\n 'Gemini 3 Flash (Preview)',\n 'ga',\n ),\n 'gemini-3.1-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-pro',\n 'Gemini 3.1 Pro (Preview)',\n 'ga',\n ),\n 'gemini-3.1-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-flash-lite',\n 'Gemini 3.1 Flash Lite (Preview)',\n 'experimental',\n ),\n} as const satisfies Record<KnownGoogleModelId, 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: 'sunset' },\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 'gpt-5.4-mini': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-4-mini',\n 'GPT-5.4 Mini',\n { lifecycle: 'experimental' },\n ),\n 'gpt-5.4-nano': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-4-nano',\n 'GPT-5.4 Nano',\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 'gpt-5.4-mini',\n 'gpt-5.4-nano',\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 { GOOGLE_MODELS } from './google-models.js';\nimport { OPENAI_MODELS } from './openai-models.js';\n\nexport const MODEL_CATALOG = {\n ...OPENAI_MODELS,\n ...ANTHROPIC_MODELS,\n ...GOOGLE_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","export interface FoundryConfig {\n foundryUrl: string;\n token: string;\n attributionRid?: string;\n}\n\nexport const OPENAI_MODEL_IDS = [\n 'gpt-4.1',\n 'gpt-4.1-mini',\n 'gpt-4.1-nano',\n 'gpt-4o',\n 'gpt-4o-mini',\n 'gpt-5',\n 'gpt-5-codex',\n 'gpt-5-mini',\n 'gpt-5-nano',\n 'gpt-5.1',\n 'gpt-5.1-codex',\n 'gpt-5.1-codex-mini',\n 'gpt-5.2',\n 'gpt-5.4',\n 'gpt-5.4-mini',\n 'gpt-5.4-nano',\n 'o3',\n 'o4-mini',\n] as const;\n\nexport type KnownOpenAIModelId = (typeof OPENAI_MODEL_IDS)[number];\n\nexport type OpenAIModelId = KnownOpenAIModelId | (string & {});\n\nexport const ANTHROPIC_MODEL_IDS = [\n 'claude-3.5-haiku',\n 'claude-3.7-sonnet',\n 'claude-haiku-4.5',\n 'claude-opus-4',\n 'claude-opus-4.1',\n 'claude-opus-4.5',\n 'claude-opus-4.6',\n 'claude-sonnet-4',\n 'claude-sonnet-4.5',\n 'claude-sonnet-4.6',\n] as const;\n\nexport type KnownAnthropicModelId = (typeof ANTHROPIC_MODEL_IDS)[number];\n\nexport type AnthropicModelId = KnownAnthropicModelId | (string & {});\n\nexport const GOOGLE_MODEL_IDS = [\n 'gemini-2.5-pro',\n 'gemini-2.5-flash',\n 'gemini-2.5-flash-lite',\n 'gemini-3-pro',\n 'gemini-3-flash',\n 'gemini-3.1-pro',\n 'gemini-3.1-flash-lite',\n] as const;\n\nexport type KnownGoogleModelId = (typeof GOOGLE_MODEL_IDS)[number];\n\nexport type GoogleModelId = KnownGoogleModelId | (string & {});\n\nexport type KnownModelId = KnownOpenAIModelId | KnownAnthropicModelId | KnownGoogleModelId;\n\nexport type ModelProvider = 'openai' | 'anthropic' | 'google';\nexport type ModelLifecycle = 'ga' | 'experimental' | 'sunset' | 'deprecated';\n\nexport interface ModelMetadata {\n rid: string;\n provider: ModelProvider;\n displayName: string;\n supportsVision: boolean;\n supportsResponses: boolean;\n lifecycle: ModelLifecycle;\n}\n\nexport interface ResolvedModelTarget {\n rid: string;\n metadata?: ModelMetadata;\n}\n"],"mappings":"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","names":[]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as FoundryConfig, M as ModelMetadata, K as KnownModelId, a as ModelProvider, R as ResolvedModelTarget } from './types-Dxb5JHjl.cjs';
2
- export { A as ANTHROPIC_MODEL_IDS, b as AnthropicModelId, G as GOOGLE_MODEL_IDS, c as GoogleModelId, d as KnownAnthropicModelId, e as KnownGoogleModelId, f as KnownOpenAIModelId, g as ModelLifecycle, O as OPENAI_MODEL_IDS, h as OpenAIModelId } from './types-Dxb5JHjl.cjs';
1
+ import { F as FoundryConfig, M as ModelMetadata, K as KnownModelId, a as ModelProvider, R as ResolvedModelTarget } from './types-B6TF2cPP.cjs';
2
+ export { A as ANTHROPIC_MODEL_IDS, b as AnthropicModelId, G as GOOGLE_MODEL_IDS, c as GoogleModelId, d as KnownAnthropicModelId, e as KnownGoogleModelId, f as KnownOpenAIModelId, g as ModelLifecycle, O as OPENAI_MODEL_IDS, h as OpenAIModelId } from './types-B6TF2cPP.cjs';
3
3
 
4
4
  declare function loadFoundryConfig(env?: NodeJS.ProcessEnv): FoundryConfig;
5
5
 
@@ -52,6 +52,8 @@ declare const MODEL_CATALOG: {
52
52
  readonly 'gpt-5.1-codex-mini': ModelMetadata;
53
53
  readonly 'gpt-5.2': ModelMetadata;
54
54
  readonly 'gpt-5.4': ModelMetadata;
55
+ readonly 'gpt-5.4-mini': ModelMetadata;
56
+ readonly 'gpt-5.4-nano': ModelMetadata;
55
57
  readonly o3: ModelMetadata;
56
58
  readonly 'o4-mini': ModelMetadata;
57
59
  };
@@ -88,6 +90,8 @@ declare const OPENAI_MODELS: {
88
90
  readonly 'gpt-5.1-codex-mini': ModelMetadata;
89
91
  readonly 'gpt-5.2': ModelMetadata;
90
92
  readonly 'gpt-5.4': ModelMetadata;
93
+ readonly 'gpt-5.4-mini': ModelMetadata;
94
+ readonly 'gpt-5.4-nano': ModelMetadata;
91
95
  readonly o3: ModelMetadata;
92
96
  readonly 'o4-mini': ModelMetadata;
93
97
  };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as FoundryConfig, M as ModelMetadata, K as KnownModelId, a as ModelProvider, R as ResolvedModelTarget } from './types-Dxb5JHjl.js';
2
- export { A as ANTHROPIC_MODEL_IDS, b as AnthropicModelId, G as GOOGLE_MODEL_IDS, c as GoogleModelId, d as KnownAnthropicModelId, e as KnownGoogleModelId, f as KnownOpenAIModelId, g as ModelLifecycle, O as OPENAI_MODEL_IDS, h as OpenAIModelId } from './types-Dxb5JHjl.js';
1
+ import { F as FoundryConfig, M as ModelMetadata, K as KnownModelId, a as ModelProvider, R as ResolvedModelTarget } from './types-B6TF2cPP.js';
2
+ export { A as ANTHROPIC_MODEL_IDS, b as AnthropicModelId, G as GOOGLE_MODEL_IDS, c as GoogleModelId, d as KnownAnthropicModelId, e as KnownGoogleModelId, f as KnownOpenAIModelId, g as ModelLifecycle, O as OPENAI_MODEL_IDS, h as OpenAIModelId } from './types-B6TF2cPP.js';
3
3
 
4
4
  declare function loadFoundryConfig(env?: NodeJS.ProcessEnv): FoundryConfig;
5
5
 
@@ -52,6 +52,8 @@ declare const MODEL_CATALOG: {
52
52
  readonly 'gpt-5.1-codex-mini': ModelMetadata;
53
53
  readonly 'gpt-5.2': ModelMetadata;
54
54
  readonly 'gpt-5.4': ModelMetadata;
55
+ readonly 'gpt-5.4-mini': ModelMetadata;
56
+ readonly 'gpt-5.4-nano': ModelMetadata;
55
57
  readonly o3: ModelMetadata;
56
58
  readonly 'o4-mini': ModelMetadata;
57
59
  };
@@ -88,6 +90,8 @@ declare const OPENAI_MODELS: {
88
90
  readonly 'gpt-5.1-codex-mini': ModelMetadata;
89
91
  readonly 'gpt-5.2': ModelMetadata;
90
92
  readonly 'gpt-5.4': ModelMetadata;
93
+ readonly 'gpt-5.4-mini': ModelMetadata;
94
+ readonly 'gpt-5.4-nano': ModelMetadata;
91
95
  readonly o3: ModelMetadata;
92
96
  readonly 'o4-mini': ModelMetadata;
93
97
  };
package/dist/index.mjs CHANGED
@@ -12,7 +12,7 @@ import {
12
12
  resolveModelProvider,
13
13
  resolveModelRid,
14
14
  resolveModelTarget
15
- } from "./chunk-QPX75PWC.mjs";
15
+ } from "./chunk-3KNQMREL.mjs";
16
16
 
17
17
  // src/types.ts
18
18
  var OPENAI_MODEL_IDS = [
@@ -30,6 +30,8 @@ var OPENAI_MODEL_IDS = [
30
30
  "gpt-5.1-codex-mini",
31
31
  "gpt-5.2",
32
32
  "gpt-5.4",
33
+ "gpt-5.4-mini",
34
+ "gpt-5.4-nano",
33
35
  "o3",
34
36
  "o4-mini"
35
37
  ];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"sourcesContent":["export interface FoundryConfig {\n foundryUrl: string;\n token: string;\n attributionRid?: string;\n}\n\nexport const OPENAI_MODEL_IDS = [\n 'gpt-4.1',\n 'gpt-4.1-mini',\n 'gpt-4.1-nano',\n 'gpt-4o',\n 'gpt-4o-mini',\n 'gpt-5',\n 'gpt-5-codex',\n 'gpt-5-mini',\n 'gpt-5-nano',\n 'gpt-5.1',\n 'gpt-5.1-codex',\n 'gpt-5.1-codex-mini',\n 'gpt-5.2',\n 'gpt-5.4',\n 'o3',\n 'o4-mini',\n] as const;\n\nexport type KnownOpenAIModelId = (typeof OPENAI_MODEL_IDS)[number];\n\nexport type OpenAIModelId = KnownOpenAIModelId | (string & {});\n\nexport const ANTHROPIC_MODEL_IDS = [\n 'claude-3.5-haiku',\n 'claude-3.7-sonnet',\n 'claude-haiku-4.5',\n 'claude-opus-4',\n 'claude-opus-4.1',\n 'claude-opus-4.5',\n 'claude-opus-4.6',\n 'claude-sonnet-4',\n 'claude-sonnet-4.5',\n 'claude-sonnet-4.6',\n] as const;\n\nexport type KnownAnthropicModelId = (typeof ANTHROPIC_MODEL_IDS)[number];\n\nexport type AnthropicModelId = KnownAnthropicModelId | (string & {});\n\nexport const GOOGLE_MODEL_IDS = [\n 'gemini-2.5-pro',\n 'gemini-2.5-flash',\n 'gemini-2.5-flash-lite',\n 'gemini-3-pro',\n 'gemini-3-flash',\n 'gemini-3.1-pro',\n 'gemini-3.1-flash-lite',\n] as const;\n\nexport type KnownGoogleModelId = (typeof GOOGLE_MODEL_IDS)[number];\n\nexport type GoogleModelId = KnownGoogleModelId | (string & {});\n\nexport type KnownModelId = KnownOpenAIModelId | KnownAnthropicModelId | KnownGoogleModelId;\n\nexport type ModelProvider = 'openai' | 'anthropic' | 'google';\nexport type ModelLifecycle = 'ga' | 'experimental' | 'sunset' | 'deprecated';\n\nexport interface ModelMetadata {\n rid: string;\n provider: ModelProvider;\n displayName: string;\n supportsVision: boolean;\n supportsResponses: boolean;\n lifecycle: ModelLifecycle;\n}\n\nexport interface ResolvedModelTarget {\n rid: string;\n metadata?: ModelMetadata;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAMO,IAAM,mBAAmB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,IAAM,mBAAmB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["export interface FoundryConfig {\n foundryUrl: string;\n token: string;\n attributionRid?: string;\n}\n\nexport const OPENAI_MODEL_IDS = [\n 'gpt-4.1',\n 'gpt-4.1-mini',\n 'gpt-4.1-nano',\n 'gpt-4o',\n 'gpt-4o-mini',\n 'gpt-5',\n 'gpt-5-codex',\n 'gpt-5-mini',\n 'gpt-5-nano',\n 'gpt-5.1',\n 'gpt-5.1-codex',\n 'gpt-5.1-codex-mini',\n 'gpt-5.2',\n 'gpt-5.4',\n 'gpt-5.4-mini',\n 'gpt-5.4-nano',\n 'o3',\n 'o4-mini',\n] as const;\n\nexport type KnownOpenAIModelId = (typeof OPENAI_MODEL_IDS)[number];\n\nexport type OpenAIModelId = KnownOpenAIModelId | (string & {});\n\nexport const ANTHROPIC_MODEL_IDS = [\n 'claude-3.5-haiku',\n 'claude-3.7-sonnet',\n 'claude-haiku-4.5',\n 'claude-opus-4',\n 'claude-opus-4.1',\n 'claude-opus-4.5',\n 'claude-opus-4.6',\n 'claude-sonnet-4',\n 'claude-sonnet-4.5',\n 'claude-sonnet-4.6',\n] as const;\n\nexport type KnownAnthropicModelId = (typeof ANTHROPIC_MODEL_IDS)[number];\n\nexport type AnthropicModelId = KnownAnthropicModelId | (string & {});\n\nexport const GOOGLE_MODEL_IDS = [\n 'gemini-2.5-pro',\n 'gemini-2.5-flash',\n 'gemini-2.5-flash-lite',\n 'gemini-3-pro',\n 'gemini-3-flash',\n 'gemini-3.1-pro',\n 'gemini-3.1-flash-lite',\n] as const;\n\nexport type KnownGoogleModelId = (typeof GOOGLE_MODEL_IDS)[number];\n\nexport type GoogleModelId = KnownGoogleModelId | (string & {});\n\nexport type KnownModelId = KnownOpenAIModelId | KnownAnthropicModelId | KnownGoogleModelId;\n\nexport type ModelProvider = 'openai' | 'anthropic' | 'google';\nexport type ModelLifecycle = 'ga' | 'experimental' | 'sunset' | 'deprecated';\n\nexport interface ModelMetadata {\n rid: string;\n provider: ModelProvider;\n displayName: string;\n supportsVision: boolean;\n supportsResponses: boolean;\n lifecycle: ModelLifecycle;\n}\n\nexport interface ResolvedModelTarget {\n rid: string;\n metadata?: ModelMetadata;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAMO,IAAM,mBAAmB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,IAAM,mBAAmB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
@@ -216,7 +216,7 @@ var OPENAI_MODELS = {
216
216
  "gpt-4o-mini": createOpenAIModel(
217
217
  "ri.language-model-service..language-model.gpt-4-o-mini",
218
218
  "GPT-4o Mini",
219
- { lifecycle: "ga" }
219
+ { lifecycle: "sunset" }
220
220
  ),
221
221
  "gpt-5": createOpenAIModel("ri.language-model-service..language-model.gpt-5", "GPT-5", {
222
222
  lifecycle: "ga"
@@ -255,6 +255,16 @@ var OPENAI_MODELS = {
255
255
  "gpt-5.4": createOpenAIModel("ri.language-model-service..language-model.gpt-5-4", "GPT-5.4", {
256
256
  lifecycle: "experimental"
257
257
  }),
258
+ "gpt-5.4-mini": createOpenAIModel(
259
+ "ri.language-model-service..language-model.gpt-5-4-mini",
260
+ "GPT-5.4 Mini",
261
+ { lifecycle: "experimental" }
262
+ ),
263
+ "gpt-5.4-nano": createOpenAIModel(
264
+ "ri.language-model-service..language-model.gpt-5-4-nano",
265
+ "GPT-5.4 Nano",
266
+ { lifecycle: "experimental" }
267
+ ),
258
268
  o3: createOpenAIModel("ri.language-model-service..language-model.o-3", "o3", { lifecycle: "ga" }),
259
269
  "o4-mini": createOpenAIModel("ri.language-model-service..language-model.o-4-mini", "o4 Mini", {
260
270
  lifecycle: "ga"
@@ -266,6 +276,8 @@ var OPENAI_REASONING_MODEL_IDS = /* @__PURE__ */ new Set([
266
276
  "gpt-5-nano",
267
277
  "gpt-5.2",
268
278
  "gpt-5.4",
279
+ "gpt-5.4-mini",
280
+ "gpt-5.4-nano",
269
281
  "o3",
270
282
  "o4-mini"
271
283
  ]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/anthropic.ts","../../src/config.ts","../../src/middleware.ts","../../src/models/anthropic-models.ts","../../src/models/google-models.ts","../../src/models/openai-models.ts","../../src/models/catalog.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","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 { KnownGoogleModelId, ModelLifecycle, ModelMetadata } from '../types.js';\n\nfunction createGoogleModel(\n rid: string,\n displayName: string,\n lifecycle: ModelLifecycle,\n): ModelMetadata {\n return {\n rid,\n provider: 'google',\n displayName,\n supportsVision: true,\n supportsResponses: false,\n lifecycle,\n };\n}\n\nexport const GOOGLE_MODELS = {\n 'gemini-2.5-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-pro',\n 'Gemini 2.5 Pro',\n 'ga',\n ),\n 'gemini-2.5-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash',\n 'Gemini 2.5 Flash',\n 'ga',\n ),\n 'gemini-2.5-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash-lite',\n 'Gemini 2.5 Flash Lite',\n 'ga',\n ),\n 'gemini-3-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-pro',\n 'Gemini 3 Pro (Preview)',\n 'sunset',\n ),\n 'gemini-3-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-flash',\n 'Gemini 3 Flash (Preview)',\n 'ga',\n ),\n 'gemini-3.1-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-pro',\n 'Gemini 3.1 Pro (Preview)',\n 'ga',\n ),\n 'gemini-3.1-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-flash-lite',\n 'Gemini 3.1 Flash Lite (Preview)',\n 'experimental',\n ),\n} as const satisfies Record<KnownGoogleModelId, 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 { GOOGLE_MODELS } from './google-models.js';\nimport { OPENAI_MODELS } from './openai-models.js';\n\nexport const MODEL_CATALOG = {\n ...OPENAI_MODELS,\n ...ANTHROPIC_MODELS,\n ...GOOGLE_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":"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","names":["import_ai"]}
1
+ {"version":3,"sources":["../../src/providers/anthropic.ts","../../src/config.ts","../../src/middleware.ts","../../src/models/anthropic-models.ts","../../src/models/google-models.ts","../../src/models/openai-models.ts","../../src/models/catalog.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","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 { KnownGoogleModelId, ModelLifecycle, ModelMetadata } from '../types.js';\n\nfunction createGoogleModel(\n rid: string,\n displayName: string,\n lifecycle: ModelLifecycle,\n): ModelMetadata {\n return {\n rid,\n provider: 'google',\n displayName,\n supportsVision: true,\n supportsResponses: false,\n lifecycle,\n };\n}\n\nexport const GOOGLE_MODELS = {\n 'gemini-2.5-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-pro',\n 'Gemini 2.5 Pro',\n 'ga',\n ),\n 'gemini-2.5-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash',\n 'Gemini 2.5 Flash',\n 'ga',\n ),\n 'gemini-2.5-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash-lite',\n 'Gemini 2.5 Flash Lite',\n 'ga',\n ),\n 'gemini-3-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-pro',\n 'Gemini 3 Pro (Preview)',\n 'sunset',\n ),\n 'gemini-3-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-flash',\n 'Gemini 3 Flash (Preview)',\n 'ga',\n ),\n 'gemini-3.1-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-pro',\n 'Gemini 3.1 Pro (Preview)',\n 'ga',\n ),\n 'gemini-3.1-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-flash-lite',\n 'Gemini 3.1 Flash Lite (Preview)',\n 'experimental',\n ),\n} as const satisfies Record<KnownGoogleModelId, 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: 'sunset' },\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 'gpt-5.4-mini': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-4-mini',\n 'GPT-5.4 Mini',\n { lifecycle: 'experimental' },\n ),\n 'gpt-5.4-nano': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-4-nano',\n 'GPT-5.4 Nano',\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 'gpt-5.4-mini',\n 'gpt-5.4-nano',\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 { GOOGLE_MODELS } from './google-models.js';\nimport { OPENAI_MODELS } from './openai-models.js';\n\nexport const MODEL_CATALOG = {\n ...OPENAI_MODELS,\n ...ANTHROPIC_MODELS,\n ...GOOGLE_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":"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","names":["import_ai"]}
@@ -1,5 +1,5 @@
1
1
  import { wrapLanguageModel } from 'ai';
2
- import { b as AnthropicModelId, F as FoundryConfig } from '../types-Dxb5JHjl.cjs';
2
+ import { b as AnthropicModelId, F as FoundryConfig } from '../types-B6TF2cPP.cjs';
3
3
 
4
4
  type FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];
5
5
  interface FoundryAnthropicProvider {
@@ -1,5 +1,5 @@
1
1
  import { wrapLanguageModel } from 'ai';
2
- import { b as AnthropicModelId, F as FoundryConfig } from '../types-Dxb5JHjl.js';
2
+ import { b as AnthropicModelId, F as FoundryConfig } from '../types-B6TF2cPP.js';
3
3
 
4
4
  type FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];
5
5
  interface FoundryAnthropicProvider {
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  resolveFoundryConfig,
6
6
  resolveModelTarget
7
- } from "../chunk-QPX75PWC.mjs";
7
+ } from "../chunk-3KNQMREL.mjs";
8
8
 
9
9
  // src/providers/anthropic.ts
10
10
  import { createAnthropic } from "@ai-sdk/anthropic";
@@ -216,7 +216,7 @@ var OPENAI_MODELS = {
216
216
  "gpt-4o-mini": createOpenAIModel(
217
217
  "ri.language-model-service..language-model.gpt-4-o-mini",
218
218
  "GPT-4o Mini",
219
- { lifecycle: "ga" }
219
+ { lifecycle: "sunset" }
220
220
  ),
221
221
  "gpt-5": createOpenAIModel("ri.language-model-service..language-model.gpt-5", "GPT-5", {
222
222
  lifecycle: "ga"
@@ -255,6 +255,16 @@ var OPENAI_MODELS = {
255
255
  "gpt-5.4": createOpenAIModel("ri.language-model-service..language-model.gpt-5-4", "GPT-5.4", {
256
256
  lifecycle: "experimental"
257
257
  }),
258
+ "gpt-5.4-mini": createOpenAIModel(
259
+ "ri.language-model-service..language-model.gpt-5-4-mini",
260
+ "GPT-5.4 Mini",
261
+ { lifecycle: "experimental" }
262
+ ),
263
+ "gpt-5.4-nano": createOpenAIModel(
264
+ "ri.language-model-service..language-model.gpt-5-4-nano",
265
+ "GPT-5.4 Nano",
266
+ { lifecycle: "experimental" }
267
+ ),
258
268
  o3: createOpenAIModel("ri.language-model-service..language-model.o-3", "o3", { lifecycle: "ga" }),
259
269
  "o4-mini": createOpenAIModel("ri.language-model-service..language-model.o-4-mini", "o4 Mini", {
260
270
  lifecycle: "ga"
@@ -266,6 +276,8 @@ var OPENAI_REASONING_MODEL_IDS = /* @__PURE__ */ new Set([
266
276
  "gpt-5-nano",
267
277
  "gpt-5.2",
268
278
  "gpt-5.4",
279
+ "gpt-5.4-mini",
280
+ "gpt-5.4-nano",
269
281
  "o3",
270
282
  "o4-mini"
271
283
  ]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/google.ts","../../src/config.ts","../../src/middleware.ts","../../src/models/anthropic-models.ts","../../src/models/google-models.ts","../../src/models/openai-models.ts","../../src/models/catalog.ts"],"sourcesContent":["import { createGoogleGenerativeAI } from '@ai-sdk/google';\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 { FoundryConfig, GoogleModelId } from '../types.js';\n\ntype FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];\n\nexport interface FoundryGoogleProvider {\n (modelId: GoogleModelId): FoundryLanguageModel;\n specificationVersion: 'v3';\n languageModel(modelId: GoogleModelId): FoundryLanguageModel;\n chat(modelId: GoogleModelId): FoundryLanguageModel;\n generativeAI(modelId: GoogleModelId): FoundryLanguageModel;\n embeddingModel(modelId: string): never;\n imageModel(modelId: string): never;\n}\n\nexport function createFoundryGoogle(config: FoundryConfig): FoundryGoogleProvider {\n const providerId = 'foundry-google';\n const resolvedConfig = resolveFoundryConfig(config, 'createFoundryGoogle');\n const baseProvider = createGoogleGenerativeAI({\n apiKey: resolvedConfig.token,\n baseURL: `${resolvedConfig.foundryUrl}/api/v2/llm/proxy/google/v1`,\n fetch: createGoogleProxyFetch(resolvedConfig.token),\n headers: resolvedConfig.attributionRid\n ? { attribution: resolvedConfig.attributionRid }\n : undefined,\n name: providerId,\n });\n\n const createLanguageModel = (modelId: GoogleModelId): FoundryLanguageModel => {\n const resolvedModel = resolveModelTarget(modelId);\n\n return wrapFoundryLanguageModel(baseProvider.chat(resolvedModel.rid), {\n modelId,\n providerId,\n });\n };\n\n function provider(modelId: GoogleModelId): FoundryLanguageModel {\n return createLanguageModel(modelId);\n }\n\n const callableProvider = provider as FoundryGoogleProvider;\n\n callableProvider.specificationVersion = 'v3';\n callableProvider.languageModel = createLanguageModel;\n callableProvider.chat = createLanguageModel;\n callableProvider.generativeAI = 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 createGoogleProxyFetch(token: string): typeof fetch {\n return async (input, init) => {\n const request = new Request(input, init);\n const headers = new Headers(request.headers);\n\n headers.delete('x-goog-api-key');\n headers.set('Authorization', `Bearer ${token}`);\n\n return fetch(new Request(request, { headers }));\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 { KnownGoogleModelId, ModelLifecycle, ModelMetadata } from '../types.js';\n\nfunction createGoogleModel(\n rid: string,\n displayName: string,\n lifecycle: ModelLifecycle,\n): ModelMetadata {\n return {\n rid,\n provider: 'google',\n displayName,\n supportsVision: true,\n supportsResponses: false,\n lifecycle,\n };\n}\n\nexport const GOOGLE_MODELS = {\n 'gemini-2.5-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-pro',\n 'Gemini 2.5 Pro',\n 'ga',\n ),\n 'gemini-2.5-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash',\n 'Gemini 2.5 Flash',\n 'ga',\n ),\n 'gemini-2.5-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash-lite',\n 'Gemini 2.5 Flash Lite',\n 'ga',\n ),\n 'gemini-3-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-pro',\n 'Gemini 3 Pro (Preview)',\n 'sunset',\n ),\n 'gemini-3-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-flash',\n 'Gemini 3 Flash (Preview)',\n 'ga',\n ),\n 'gemini-3.1-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-pro',\n 'Gemini 3.1 Pro (Preview)',\n 'ga',\n ),\n 'gemini-3.1-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-flash-lite',\n 'Gemini 3.1 Flash Lite (Preview)',\n 'experimental',\n ),\n} as const satisfies Record<KnownGoogleModelId, 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 { GOOGLE_MODELS } from './google-models.js';\nimport { OPENAI_MODELS } from './openai-models.js';\n\nexport const MODEL_CATALOG = {\n ...OPENAI_MODELS,\n ...ANTHROPIC_MODELS,\n ...GOOGLE_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":"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","names":["import_ai"]}
1
+ {"version":3,"sources":["../../src/providers/google.ts","../../src/config.ts","../../src/middleware.ts","../../src/models/anthropic-models.ts","../../src/models/google-models.ts","../../src/models/openai-models.ts","../../src/models/catalog.ts"],"sourcesContent":["import { createGoogleGenerativeAI } from '@ai-sdk/google';\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 { FoundryConfig, GoogleModelId } from '../types.js';\n\ntype FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];\n\nexport interface FoundryGoogleProvider {\n (modelId: GoogleModelId): FoundryLanguageModel;\n specificationVersion: 'v3';\n languageModel(modelId: GoogleModelId): FoundryLanguageModel;\n chat(modelId: GoogleModelId): FoundryLanguageModel;\n generativeAI(modelId: GoogleModelId): FoundryLanguageModel;\n embeddingModel(modelId: string): never;\n imageModel(modelId: string): never;\n}\n\nexport function createFoundryGoogle(config: FoundryConfig): FoundryGoogleProvider {\n const providerId = 'foundry-google';\n const resolvedConfig = resolveFoundryConfig(config, 'createFoundryGoogle');\n const baseProvider = createGoogleGenerativeAI({\n apiKey: resolvedConfig.token,\n baseURL: `${resolvedConfig.foundryUrl}/api/v2/llm/proxy/google/v1`,\n fetch: createGoogleProxyFetch(resolvedConfig.token),\n headers: resolvedConfig.attributionRid\n ? { attribution: resolvedConfig.attributionRid }\n : undefined,\n name: providerId,\n });\n\n const createLanguageModel = (modelId: GoogleModelId): FoundryLanguageModel => {\n const resolvedModel = resolveModelTarget(modelId);\n\n return wrapFoundryLanguageModel(baseProvider.chat(resolvedModel.rid), {\n modelId,\n providerId,\n });\n };\n\n function provider(modelId: GoogleModelId): FoundryLanguageModel {\n return createLanguageModel(modelId);\n }\n\n const callableProvider = provider as FoundryGoogleProvider;\n\n callableProvider.specificationVersion = 'v3';\n callableProvider.languageModel = createLanguageModel;\n callableProvider.chat = createLanguageModel;\n callableProvider.generativeAI = 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 createGoogleProxyFetch(token: string): typeof fetch {\n return async (input, init) => {\n const request = new Request(input, init);\n const headers = new Headers(request.headers);\n\n headers.delete('x-goog-api-key');\n headers.set('Authorization', `Bearer ${token}`);\n\n return fetch(new Request(request, { headers }));\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 { KnownGoogleModelId, ModelLifecycle, ModelMetadata } from '../types.js';\n\nfunction createGoogleModel(\n rid: string,\n displayName: string,\n lifecycle: ModelLifecycle,\n): ModelMetadata {\n return {\n rid,\n provider: 'google',\n displayName,\n supportsVision: true,\n supportsResponses: false,\n lifecycle,\n };\n}\n\nexport const GOOGLE_MODELS = {\n 'gemini-2.5-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-pro',\n 'Gemini 2.5 Pro',\n 'ga',\n ),\n 'gemini-2.5-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash',\n 'Gemini 2.5 Flash',\n 'ga',\n ),\n 'gemini-2.5-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash-lite',\n 'Gemini 2.5 Flash Lite',\n 'ga',\n ),\n 'gemini-3-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-pro',\n 'Gemini 3 Pro (Preview)',\n 'sunset',\n ),\n 'gemini-3-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-flash',\n 'Gemini 3 Flash (Preview)',\n 'ga',\n ),\n 'gemini-3.1-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-pro',\n 'Gemini 3.1 Pro (Preview)',\n 'ga',\n ),\n 'gemini-3.1-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-flash-lite',\n 'Gemini 3.1 Flash Lite (Preview)',\n 'experimental',\n ),\n} as const satisfies Record<KnownGoogleModelId, 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: 'sunset' },\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 'gpt-5.4-mini': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-4-mini',\n 'GPT-5.4 Mini',\n { lifecycle: 'experimental' },\n ),\n 'gpt-5.4-nano': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-4-nano',\n 'GPT-5.4 Nano',\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 'gpt-5.4-mini',\n 'gpt-5.4-nano',\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 { GOOGLE_MODELS } from './google-models.js';\nimport { OPENAI_MODELS } from './openai-models.js';\n\nexport const MODEL_CATALOG = {\n ...OPENAI_MODELS,\n ...ANTHROPIC_MODELS,\n ...GOOGLE_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":"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","names":["import_ai"]}
@@ -1,5 +1,5 @@
1
1
  import { wrapLanguageModel } from 'ai';
2
- import { c as GoogleModelId, F as FoundryConfig } from '../types-Dxb5JHjl.cjs';
2
+ import { c as GoogleModelId, F as FoundryConfig } from '../types-B6TF2cPP.cjs';
3
3
 
4
4
  type FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];
5
5
  interface FoundryGoogleProvider {
@@ -1,5 +1,5 @@
1
1
  import { wrapLanguageModel } from 'ai';
2
- import { c as GoogleModelId, F as FoundryConfig } from '../types-Dxb5JHjl.js';
2
+ import { c as GoogleModelId, F as FoundryConfig } from '../types-B6TF2cPP.js';
3
3
 
4
4
  type FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];
5
5
  interface FoundryGoogleProvider {
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  resolveFoundryConfig,
6
6
  resolveModelTarget
7
- } from "../chunk-QPX75PWC.mjs";
7
+ } from "../chunk-3KNQMREL.mjs";
8
8
 
9
9
  // src/providers/google.ts
10
10
  import { createGoogleGenerativeAI } from "@ai-sdk/google";
@@ -216,7 +216,7 @@ var OPENAI_MODELS = {
216
216
  "gpt-4o-mini": createOpenAIModel(
217
217
  "ri.language-model-service..language-model.gpt-4-o-mini",
218
218
  "GPT-4o Mini",
219
- { lifecycle: "ga" }
219
+ { lifecycle: "sunset" }
220
220
  ),
221
221
  "gpt-5": createOpenAIModel("ri.language-model-service..language-model.gpt-5", "GPT-5", {
222
222
  lifecycle: "ga"
@@ -255,6 +255,16 @@ var OPENAI_MODELS = {
255
255
  "gpt-5.4": createOpenAIModel("ri.language-model-service..language-model.gpt-5-4", "GPT-5.4", {
256
256
  lifecycle: "experimental"
257
257
  }),
258
+ "gpt-5.4-mini": createOpenAIModel(
259
+ "ri.language-model-service..language-model.gpt-5-4-mini",
260
+ "GPT-5.4 Mini",
261
+ { lifecycle: "experimental" }
262
+ ),
263
+ "gpt-5.4-nano": createOpenAIModel(
264
+ "ri.language-model-service..language-model.gpt-5-4-nano",
265
+ "GPT-5.4 Nano",
266
+ { lifecycle: "experimental" }
267
+ ),
258
268
  o3: createOpenAIModel("ri.language-model-service..language-model.o-3", "o3", { lifecycle: "ga" }),
259
269
  "o4-mini": createOpenAIModel("ri.language-model-service..language-model.o-4-mini", "o4 Mini", {
260
270
  lifecycle: "ga"
@@ -266,6 +276,8 @@ var OPENAI_REASONING_MODEL_IDS = /* @__PURE__ */ new Set([
266
276
  "gpt-5-nano",
267
277
  "gpt-5.2",
268
278
  "gpt-5.4",
279
+ "gpt-5.4-mini",
280
+ "gpt-5.4-nano",
269
281
  "o3",
270
282
  "o4-mini"
271
283
  ]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/openai.ts","../../src/config.ts","../../src/middleware.ts","../../src/models/anthropic-models.ts","../../src/models/google-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 { KnownGoogleModelId, ModelLifecycle, ModelMetadata } from '../types.js';\n\nfunction createGoogleModel(\n rid: string,\n displayName: string,\n lifecycle: ModelLifecycle,\n): ModelMetadata {\n return {\n rid,\n provider: 'google',\n displayName,\n supportsVision: true,\n supportsResponses: false,\n lifecycle,\n };\n}\n\nexport const GOOGLE_MODELS = {\n 'gemini-2.5-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-pro',\n 'Gemini 2.5 Pro',\n 'ga',\n ),\n 'gemini-2.5-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash',\n 'Gemini 2.5 Flash',\n 'ga',\n ),\n 'gemini-2.5-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash-lite',\n 'Gemini 2.5 Flash Lite',\n 'ga',\n ),\n 'gemini-3-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-pro',\n 'Gemini 3 Pro (Preview)',\n 'sunset',\n ),\n 'gemini-3-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-flash',\n 'Gemini 3 Flash (Preview)',\n 'ga',\n ),\n 'gemini-3.1-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-pro',\n 'Gemini 3.1 Pro (Preview)',\n 'ga',\n ),\n 'gemini-3.1-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-flash-lite',\n 'Gemini 3.1 Flash Lite (Preview)',\n 'experimental',\n ),\n} as const satisfies Record<KnownGoogleModelId, 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 { GOOGLE_MODELS } from './google-models.js';\nimport { OPENAI_MODELS } from './openai-models.js';\n\nexport const MODEL_CATALOG = {\n ...OPENAI_MODELS,\n ...ANTHROPIC_MODELS,\n ...GOOGLE_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":"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","names":["import_ai"]}
1
+ {"version":3,"sources":["../../src/providers/openai.ts","../../src/config.ts","../../src/middleware.ts","../../src/models/anthropic-models.ts","../../src/models/google-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 { KnownGoogleModelId, ModelLifecycle, ModelMetadata } from '../types.js';\n\nfunction createGoogleModel(\n rid: string,\n displayName: string,\n lifecycle: ModelLifecycle,\n): ModelMetadata {\n return {\n rid,\n provider: 'google',\n displayName,\n supportsVision: true,\n supportsResponses: false,\n lifecycle,\n };\n}\n\nexport const GOOGLE_MODELS = {\n 'gemini-2.5-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-pro',\n 'Gemini 2.5 Pro',\n 'ga',\n ),\n 'gemini-2.5-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash',\n 'Gemini 2.5 Flash',\n 'ga',\n ),\n 'gemini-2.5-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash-lite',\n 'Gemini 2.5 Flash Lite',\n 'ga',\n ),\n 'gemini-3-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-pro',\n 'Gemini 3 Pro (Preview)',\n 'sunset',\n ),\n 'gemini-3-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-flash',\n 'Gemini 3 Flash (Preview)',\n 'ga',\n ),\n 'gemini-3.1-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-pro',\n 'Gemini 3.1 Pro (Preview)',\n 'ga',\n ),\n 'gemini-3.1-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-flash-lite',\n 'Gemini 3.1 Flash Lite (Preview)',\n 'experimental',\n ),\n} as const satisfies Record<KnownGoogleModelId, 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: 'sunset' },\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 'gpt-5.4-mini': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-4-mini',\n 'GPT-5.4 Mini',\n { lifecycle: 'experimental' },\n ),\n 'gpt-5.4-nano': createOpenAIModel(\n 'ri.language-model-service..language-model.gpt-5-4-nano',\n 'GPT-5.4 Nano',\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 'gpt-5.4-mini',\n 'gpt-5.4-nano',\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 { GOOGLE_MODELS } from './google-models.js';\nimport { OPENAI_MODELS } from './openai-models.js';\n\nexport const MODEL_CATALOG = {\n ...OPENAI_MODELS,\n ...ANTHROPIC_MODELS,\n ...GOOGLE_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":"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","names":["import_ai"]}
@@ -1,5 +1,5 @@
1
1
  import { wrapLanguageModel } from 'ai';
2
- import { h as OpenAIModelId, F as FoundryConfig } from '../types-Dxb5JHjl.cjs';
2
+ import { h as OpenAIModelId, F as FoundryConfig } from '../types-B6TF2cPP.cjs';
3
3
 
4
4
  type FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];
5
5
  interface FoundryOpenAIProvider {
@@ -1,5 +1,5 @@
1
1
  import { wrapLanguageModel } from 'ai';
2
- import { h as OpenAIModelId, F as FoundryConfig } from '../types-Dxb5JHjl.js';
2
+ import { h as OpenAIModelId, F as FoundryConfig } from '../types-B6TF2cPP.js';
3
3
 
4
4
  type FoundryLanguageModel = Parameters<typeof wrapLanguageModel>[0]['model'];
5
5
  interface FoundryOpenAIProvider {
@@ -5,7 +5,7 @@ import {
5
5
  isKnownOpenAIReasoningTarget,
6
6
  resolveFoundryConfig,
7
7
  resolveModelTarget
8
- } from "../chunk-QPX75PWC.mjs";
8
+ } from "../chunk-3KNQMREL.mjs";
9
9
 
10
10
  // src/providers/openai.ts
11
11
  import { createOpenAI } from "@ai-sdk/openai";
@@ -3,7 +3,7 @@ interface FoundryConfig {
3
3
  token: string;
4
4
  attributionRid?: string;
5
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"];
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", "gpt-5.4-mini", "gpt-5.4-nano", "o3", "o4-mini"];
7
7
  type KnownOpenAIModelId = (typeof OPENAI_MODEL_IDS)[number];
8
8
  type OpenAIModelId = KnownOpenAIModelId | (string & {});
9
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"];
@@ -3,7 +3,7 @@ interface FoundryConfig {
3
3
  token: string;
4
4
  attributionRid?: string;
5
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"];
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", "gpt-5.4-mini", "gpt-5.4-nano", "o3", "o4-mini"];
7
7
  type KnownOpenAIModelId = (typeof OPENAI_MODEL_IDS)[number];
8
8
  type OpenAIModelId = KnownOpenAIModelId | (string & {});
9
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"];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nyrra/foundry-ai",
3
- "version": "0.0.2-rc.4",
3
+ "version": "0.0.2-rc.5",
4
4
  "description": "Thin Foundry provider adapters and model catalog for the Vercel AI SDK.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/config.ts","../src/errors.ts","../src/models/anthropic-models.ts","../src/models/google-models.ts","../src/models/openai-models.ts","../src/models/catalog.ts"],"sourcesContent":["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","export class FoundryModelNotFoundError extends Error {\n constructor(modelId: string) {\n super(\n `Unknown model: \"${modelId}\". Check the catalog for supported aliases or pass a raw Foundry RID directly to a provider adapter.`,\n );\n this.name = 'FoundryModelNotFoundError';\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 { KnownGoogleModelId, ModelLifecycle, ModelMetadata } from '../types.js';\n\nfunction createGoogleModel(\n rid: string,\n displayName: string,\n lifecycle: ModelLifecycle,\n): ModelMetadata {\n return {\n rid,\n provider: 'google',\n displayName,\n supportsVision: true,\n supportsResponses: false,\n lifecycle,\n };\n}\n\nexport const GOOGLE_MODELS = {\n 'gemini-2.5-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-pro',\n 'Gemini 2.5 Pro',\n 'ga',\n ),\n 'gemini-2.5-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash',\n 'Gemini 2.5 Flash',\n 'ga',\n ),\n 'gemini-2.5-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-2-5-flash-lite',\n 'Gemini 2.5 Flash Lite',\n 'ga',\n ),\n 'gemini-3-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-pro',\n 'Gemini 3 Pro (Preview)',\n 'sunset',\n ),\n 'gemini-3-flash': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-flash',\n 'Gemini 3 Flash (Preview)',\n 'ga',\n ),\n 'gemini-3.1-pro': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-pro',\n 'Gemini 3.1 Pro (Preview)',\n 'ga',\n ),\n 'gemini-3.1-flash-lite': createGoogleModel(\n 'ri.language-model-service..language-model.gemini-3-1-flash-lite',\n 'Gemini 3.1 Flash Lite (Preview)',\n 'experimental',\n ),\n} as const satisfies Record<KnownGoogleModelId, 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 { GOOGLE_MODELS } from './google-models.js';\nimport { OPENAI_MODELS } from './openai-models.js';\n\nexport const MODEL_CATALOG = {\n ...OPENAI_MODELS,\n ...ANTHROPIC_MODELS,\n ...GOOGLE_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":"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","names":[]}