@nyrra/foundry-ai
Version:
Thin Palantir Foundry provider adapters and model catalog for the Vercel AI SDK.
1 lines • 43.9 kB
Source Map (JSON)
{"version":3,"sources":["../../src/providers/google.ts","../../src/config.ts","../../src/middleware.ts","../../src/models/metadata.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 { GoogleModelId } from '../models/google-models.js';\nimport type { FoundryConfig } 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 { ModelDefinition, ModelInputType, ModelMetadata, ModelProvider } from '../types.js';\n\nconst VISION_INPUT_TYPES = new Set<ModelInputType>([\n 'GENERIC_VISION_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n]);\n\nexport function createProviderModelCatalog<const T extends Record<string, ModelDefinition>>(\n provider: ModelProvider,\n definitions: T,\n): { readonly [K in keyof T]: ModelMetadata } {\n return Object.freeze(\n Object.fromEntries(\n Object.entries(definitions).map(([modelId, definition]) => [\n modelId,\n createModelMetadata(provider, definition),\n ]),\n ),\n ) as { readonly [K in keyof T]: ModelMetadata };\n}\n\nexport function modelSupportsInputType(\n metadata: Pick<ModelMetadata, 'inputTypes'>,\n inputType: ModelInputType,\n): boolean {\n return metadata.inputTypes.includes(inputType);\n}\n\nfunction createModelMetadata(provider: ModelProvider, definition: ModelDefinition): ModelMetadata {\n return {\n ...definition,\n provider,\n supportsResponses: definition.inputTypes.includes('OPEN_AI_RESPONSES'),\n supportsVision: definition.inputTypes.some((inputType) => VISION_INPUT_TYPES.has(inputType)),\n };\n}\n","import type { ModelDefinition } from '../types.js';\nimport { createProviderModelCatalog } from './metadata.js';\n\nconst ANTHROPIC_MODEL_DEFINITIONS = {\n 'claude-3.5-haiku': {\n rid: 'ri.language-model-service..language-model.anthropic-claude-3-5-haiku',\n modelIdentifier: 'ANTHROPIC_CLAUDE_35_HAIKU',\n displayName: 'Claude 3.5 Haiku',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'CLAUDE_CHAT',\n ],\n trainingCutoffDate: '2024-07-01T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'LIGHTWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://aws.amazon.com/bedrock/claude/',\n },\n 'claude-3.7-sonnet': {\n rid: 'ri.language-model-service..language-model.anthropic-claude-3-7-sonnet',\n modelIdentifier: 'ANTHROPIC_CLAUDE_37_SONNET',\n displayName: 'Claude 3.7 Sonnet',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'CLAUDE_CHAT',\n ],\n trainingCutoffDate: '2024-11-01T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'HEAVYWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://aws.amazon.com/bedrock/claude/',\n },\n 'claude-haiku-4.5': {\n rid: 'ri.language-model-service..language-model.anthropic-claude-4-5-haiku',\n modelIdentifier: 'ANTHROPIC_CLAUDE_45_HAIKU',\n displayName: 'Claude Haiku 4.5',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'CLAUDE_CHAT',\n ],\n trainingCutoffDate: '2025-07-01T00:00:00Z',\n performance: {\n cost: 'LOW',\n modelClass: 'LIGHTWEIGHT',\n speed: 'HIGH',\n },\n externalUrl: 'https://www.anthropic.com/news/claude-haiku-4-5',\n },\n 'claude-opus-4': {\n rid: 'ri.language-model-service..language-model.anthropic-claude-4-opus',\n modelIdentifier: 'ANTHROPIC_CLAUDE_4_OPUS',\n displayName: 'Claude Opus 4',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'CLAUDE_CHAT',\n ],\n trainingCutoffDate: '2025-03-01T00:00:00Z',\n performance: {\n cost: 'HIGH',\n modelClass: 'HEAVYWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://www.anthropic.com/news/claude-4',\n },\n 'claude-opus-4.1': {\n rid: 'ri.language-model-service..language-model.anthropic-claude-4-1-opus',\n modelIdentifier: 'ANTHROPIC_CLAUDE_41_OPUS',\n displayName: 'Claude Opus 4.1',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'CLAUDE_CHAT',\n ],\n trainingCutoffDate: '2025-08-01T00:00:00Z',\n performance: {\n cost: 'HIGH',\n modelClass: 'HEAVYWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://www.anthropic.com/news/claude-opus-4-1',\n },\n 'claude-opus-4.5': {\n rid: 'ri.language-model-service..language-model.anthropic-claude-4-5-opus',\n modelIdentifier: 'ANTHROPIC_CLAUDE_45_OPUS',\n displayName: 'Claude Opus 4.5',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'CLAUDE_CHAT',\n ],\n trainingCutoffDate: '2025-08-01T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'HEAVYWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://www.anthropic.com/news/claude-opus-4-5',\n },\n 'claude-opus-4.6': {\n rid: 'ri.language-model-service..language-model.anthropic-claude-4-6-opus',\n modelIdentifier: 'ANTHROPIC_CLAUDE_46_OPUS',\n displayName: 'Claude Opus 4.6',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'CLAUDE_CHAT',\n ],\n trainingCutoffDate: '2025-08-01T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'HEAVYWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://www.anthropic.com/news/claude-opus-4-6',\n },\n 'claude-sonnet-4': {\n rid: 'ri.language-model-service..language-model.anthropic-claude-4-sonnet',\n modelIdentifier: 'ANTHROPIC_CLAUDE_4_SONNET',\n displayName: 'Claude Sonnet 4',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'CLAUDE_CHAT',\n ],\n trainingCutoffDate: '2025-03-01T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'HEAVYWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://www.anthropic.com/news/claude-4',\n },\n 'claude-sonnet-4.5': {\n rid: 'ri.language-model-service..language-model.anthropic-claude-4-5-sonnet',\n modelIdentifier: 'ANTHROPIC_CLAUDE_45_SONNET',\n displayName: 'Claude Sonnet 4.5',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'CLAUDE_CHAT',\n ],\n trainingCutoffDate: '2025-07-01T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'HEAVYWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://www.anthropic.com/news/claude-sonnet-4-5',\n },\n 'claude-sonnet-4.6': {\n rid: 'ri.language-model-service..language-model.anthropic-claude-4-6-sonnet',\n modelIdentifier: 'ANTHROPIC_CLAUDE_46_SONNET',\n displayName: 'Claude Sonnet 4.6',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'CLAUDE_CHAT',\n ],\n trainingCutoffDate: '2025-08-01T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'HEAVYWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://www.anthropic.com/news/claude-sonnet-4-6',\n },\n} as const satisfies Record<string, ModelDefinition>;\n\nexport const ANTHROPIC_MODELS = createProviderModelCatalog(\n 'anthropic',\n ANTHROPIC_MODEL_DEFINITIONS,\n);\n\nexport type KnownAnthropicModelId = keyof typeof ANTHROPIC_MODELS;\nexport type AnthropicModelId = KnownAnthropicModelId | (string & {});\n\nexport const ANTHROPIC_MODEL_IDS = Object.freeze(\n Object.keys(ANTHROPIC_MODELS),\n) as readonly KnownAnthropicModelId[];\n","import type { ModelDefinition } from '../types.js';\nimport { createProviderModelCatalog } from './metadata.js';\n\nconst GOOGLE_MODEL_DEFINITIONS = {\n 'gemini-2.5-pro': {\n rid: 'ri.language-model-service..language-model.gemini-2-5-pro',\n modelIdentifier: 'GEMINI_2_5_PRO',\n displayName: 'Gemini 2.5 Pro',\n lifecycle: 'ga',\n inputTypes: [\n 'GEMINI_CHAT',\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n ],\n trainingCutoffDate: '2025-01-01T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'REASONING',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/2-5-pro',\n },\n 'gemini-2.5-flash': {\n rid: 'ri.language-model-service..language-model.gemini-2-5-flash',\n modelIdentifier: 'GEMINI_2_5_FLASH',\n displayName: 'Gemini 2.5 Flash',\n lifecycle: 'ga',\n inputTypes: [\n 'GEMINI_CHAT',\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n ],\n trainingCutoffDate: '2025-01-01T00:00:00Z',\n performance: {\n cost: 'LOW',\n modelClass: 'REASONING',\n speed: 'HIGH',\n },\n externalUrl: 'https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/2-5-flash',\n },\n 'gemini-2.5-flash-lite': {\n rid: 'ri.language-model-service..language-model.gemini-2-5-flash-lite',\n modelIdentifier: 'GEMINI_2_5_FLASH_LITE',\n displayName: 'Gemini 2.5 Flash Lite',\n lifecycle: 'ga',\n inputTypes: [\n 'GEMINI_CHAT',\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n ],\n trainingCutoffDate: '2025-01-01T00:00:00Z',\n performance: {\n cost: 'LOW',\n modelClass: 'LIGHTWEIGHT',\n speed: 'HIGH',\n },\n externalUrl:\n 'https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/2-5-flash-lite',\n },\n 'gemini-3-flash': {\n rid: 'ri.language-model-service..language-model.gemini-3-flash',\n modelIdentifier: 'GEMINI_3_FLASH',\n displayName: 'Gemini 3 Flash (Preview)',\n lifecycle: 'ga',\n inputTypes: [\n 'GEMINI_CHAT',\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n ],\n trainingCutoffDate: '2025-01-01T00:00:00Z',\n performance: {\n cost: 'LOW',\n modelClass: 'LIGHTWEIGHT',\n speed: 'HIGH',\n },\n externalUrl: 'https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/3-flash',\n },\n 'gemini-3.1-pro': {\n rid: 'ri.language-model-service..language-model.gemini-3-1-pro',\n modelIdentifier: 'GEMINI_3_1_PRO',\n displayName: 'Gemini 3.1 Pro (Preview)',\n lifecycle: 'ga',\n inputTypes: [\n 'GEMINI_CHAT',\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n ],\n trainingCutoffDate: '2025-01-01T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'REASONING',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/3-1-pro',\n },\n 'gemini-3.1-flash-lite': {\n rid: 'ri.language-model-service..language-model.gemini-3-1-flash-lite',\n modelIdentifier: 'GEMINI_3_1_FLASH_LITE',\n displayName: 'Gemini 3.1 Flash Lite (Preview)',\n lifecycle: 'experimental',\n inputTypes: [\n 'GEMINI_CHAT',\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n ],\n trainingCutoffDate: '2025-01-01T00:00:00Z',\n performance: {\n cost: 'LOW',\n modelClass: 'LIGHTWEIGHT',\n speed: 'HIGH',\n },\n externalUrl: 'https://deepmind.google/models/model-cards/gemini-3-1-flash-lite/',\n },\n} as const satisfies Record<string, ModelDefinition>;\n\nexport const GOOGLE_MODELS = createProviderModelCatalog('google', GOOGLE_MODEL_DEFINITIONS);\n\nexport type KnownGoogleModelId = keyof typeof GOOGLE_MODELS;\nexport type GoogleModelId = KnownGoogleModelId | (string & {});\n\nexport const GOOGLE_MODEL_IDS = Object.freeze(\n Object.keys(GOOGLE_MODELS),\n) as readonly KnownGoogleModelId[];\n","import type { ModelDefinition } from '../types.js';\nimport { createProviderModelCatalog, modelSupportsInputType } from './metadata.js';\n\nconst OPENAI_MODEL_DEFINITIONS = {\n 'gpt-4.1': {\n rid: 'ri.language-model-service..language-model.gpt-4-1',\n modelIdentifier: 'GPT_4_1',\n displayName: 'GPT-4.1',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GPT_CHAT_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2024-05-31T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'HEAVYWEIGHT',\n speed: 'HIGH',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-4.1',\n },\n 'gpt-4.1-mini': {\n rid: 'ri.language-model-service..language-model.gpt-4-1-mini',\n modelIdentifier: 'GPT_4_1_MINI',\n displayName: 'GPT-4.1 mini',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GPT_CHAT_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2024-05-31T00:00:00Z',\n performance: {\n cost: 'LOW',\n modelClass: 'LIGHTWEIGHT',\n speed: 'HIGH',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-4.1-mini',\n },\n 'gpt-4.1-nano': {\n rid: 'ri.language-model-service..language-model.gpt-4-1-nano',\n modelIdentifier: 'GPT_4_1_NANO',\n displayName: 'GPT-4.1 nano',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GPT_CHAT_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2024-05-31T00:00:00Z',\n performance: {\n cost: 'LOW',\n modelClass: 'LIGHTWEIGHT',\n speed: 'HIGH',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-4.1-nano',\n },\n 'gpt-4o': {\n rid: 'ri.language-model-service..language-model.gpt-4-o',\n modelIdentifier: 'GPT_4_O',\n displayName: 'GPT-4o',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GPT_CHAT_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2023-10-01T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'HEAVYWEIGHT',\n speed: 'HIGH',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-4o',\n },\n 'gpt-5': {\n rid: 'ri.language-model-service..language-model.gpt-5',\n modelIdentifier: 'GPT_5',\n displayName: 'GPT-5',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GPT_CHAT_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_REASONING',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2024-09-30T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'HEAVYWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-5',\n },\n 'gpt-5-codex': {\n rid: 'ri.language-model-service..language-model.gpt-5-codex',\n modelIdentifier: 'GPT_5_CODEX',\n displayName: 'GPT-5 Codex',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2024-09-29T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'REASONING',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-5-codex',\n },\n 'gpt-5-mini': {\n rid: 'ri.language-model-service..language-model.gpt-5-mini',\n modelIdentifier: 'GPT_5_MINI',\n displayName: 'GPT-5 mini',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GPT_CHAT_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_REASONING',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2024-05-30T00:00:00Z',\n performance: {\n cost: 'LOW',\n modelClass: 'LIGHTWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-5-mini',\n },\n 'gpt-5-nano': {\n rid: 'ri.language-model-service..language-model.gpt-5-nano',\n modelIdentifier: 'GPT_5_NANO',\n displayName: 'GPT-5 nano',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GPT_CHAT_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_REASONING',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2024-05-30T00:00:00Z',\n performance: {\n cost: 'LOW',\n modelClass: 'LIGHTWEIGHT',\n speed: 'HIGH',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-5-nano',\n },\n 'gpt-5.1': {\n rid: 'ri.language-model-service..language-model.gpt-5-1',\n modelIdentifier: 'GPT_5_1',\n displayName: 'GPT-5.1',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GPT_CHAT_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2024-09-30T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'HEAVYWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-5.1',\n },\n 'gpt-5.1-codex': {\n rid: 'ri.language-model-service..language-model.gpt-5-1-codex',\n modelIdentifier: 'GPT_5_1_CODEX',\n displayName: 'GPT-5.1 Codex',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2024-09-30T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'REASONING',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-5.1-codex',\n },\n 'gpt-5.1-codex-mini': {\n rid: 'ri.language-model-service..language-model.gpt-5-1-codex-mini',\n modelIdentifier: 'GPT_5_1_CODEX_MINI',\n displayName: 'GPT-5.1 Codex mini',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2024-09-30T00:00:00Z',\n performance: {\n cost: 'LOW',\n modelClass: 'LIGHTWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-5.1-codex-mini',\n },\n 'gpt-5.2': {\n rid: 'ri.language-model-service..language-model.gpt-5-2',\n modelIdentifier: 'GPT_5_2',\n displayName: 'GPT-5.2',\n lifecycle: 'experimental',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GPT_CHAT_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_REASONING',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2025-08-31T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'HEAVYWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-5.2',\n },\n 'gpt-5.4': {\n rid: 'ri.language-model-service..language-model.gpt-5-4',\n modelIdentifier: 'GPT_5_4',\n displayName: 'GPT-5.4',\n lifecycle: 'experimental',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GPT_CHAT_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_REASONING',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2025-08-31T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'HEAVYWEIGHT',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-5.4',\n },\n 'gpt-5.4-mini': {\n rid: 'ri.language-model-service..language-model.gpt-5-4-mini',\n modelIdentifier: 'GPT_5_4_MINI',\n displayName: 'GPT-5.4 mini',\n lifecycle: 'experimental',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GPT_CHAT_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_REASONING',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2025-08-31T00:00:00Z',\n performance: {\n cost: 'LOW',\n modelClass: 'LIGHTWEIGHT',\n speed: 'HIGH',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-5.4-mini',\n },\n 'gpt-5.4-nano': {\n rid: 'ri.language-model-service..language-model.gpt-5-4-nano',\n modelIdentifier: 'GPT_5_4_NANO',\n displayName: 'GPT-5.4 nano',\n lifecycle: 'experimental',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'GPT_CHAT_COMPLETION',\n 'GPT_WITH_VISION_COMPLETION',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_REASONING',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2025-08-31T00:00:00Z',\n performance: {\n cost: 'LOW',\n modelClass: 'LIGHTWEIGHT',\n speed: 'HIGH',\n },\n externalUrl: 'https://platform.openai.com/docs/models/gpt-5.4-nano',\n },\n o3: {\n rid: 'ri.language-model-service..language-model.o-3',\n modelIdentifier: 'O_3',\n displayName: 'o3',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'OPEN_AI_REASONING',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2024-05-31T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'REASONING',\n speed: 'LOW',\n },\n externalUrl: 'https://platform.openai.com/docs/models/o3',\n },\n 'o4-mini': {\n rid: 'ri.language-model-service..language-model.o-4-mini',\n modelIdentifier: 'O_4_MINI',\n displayName: 'o4-mini',\n lifecycle: 'ga',\n inputTypes: [\n 'GENERIC_COMPLETION',\n 'GENERIC_CHAT_COMPLETION',\n 'OPEN_AI_REASONING',\n 'GENERIC_VISION_COMPLETION',\n 'OPEN_AI_RESPONSES',\n ],\n trainingCutoffDate: '2024-05-31T00:00:00Z',\n performance: {\n cost: 'MEDIUM',\n modelClass: 'REASONING',\n speed: 'MEDIUM',\n },\n externalUrl: 'https://platform.openai.com/docs/models/o4-mini',\n },\n} as const satisfies Record<string, ModelDefinition>;\n\nexport const OPENAI_MODELS = createProviderModelCatalog('openai', OPENAI_MODEL_DEFINITIONS);\n\nexport type KnownOpenAIModelId = keyof typeof OPENAI_MODELS;\nexport type OpenAIModelId = KnownOpenAIModelId | (string & {});\n\nexport const OPENAI_MODEL_IDS = Object.freeze(\n Object.keys(OPENAI_MODELS),\n) as readonly KnownOpenAIModelId[];\n\nconst OPENAI_REASONING_MODEL_TARGETS = new Set(\n Object.entries(OPENAI_MODELS)\n .filter(([, metadata]) => modelSupportsInputType(metadata, 'OPEN_AI_REASONING'))\n .flatMap(([modelId, metadata]) => [modelId, 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 { ModelMetadata, ModelProvider, ResolvedModelTarget } from '../types.js';\nimport type { KnownAnthropicModelId } from './anthropic-models.js';\nimport { ANTHROPIC_MODELS } from './anthropic-models.js';\nimport type { KnownGoogleModelId } from './google-models.js';\nimport { GOOGLE_MODELS } from './google-models.js';\nimport type { KnownOpenAIModelId } from './openai-models.js';\nimport { OPENAI_MODELS } from './openai-models.js';\n\nexport type KnownModelId = KnownOpenAIModelId | KnownAnthropicModelId | KnownGoogleModelId;\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"]}