UNPKG

@nyrra/foundry-ai

Version:

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

838 lines (831 loc) 24.8 kB
// src/config.ts var FOUNDRY_URL_ENV = "FOUNDRY_URL"; var FOUNDRY_TOKEN_ENV = "FOUNDRY_TOKEN"; var FOUNDRY_ATTRIBUTION_RID_ENV = "FOUNDRY_ATTRIBUTION_RID"; function loadFoundryConfig(env = process.env) { return normalizeResolvedFoundryConfig({ foundryUrl: requireEnv(env, FOUNDRY_URL_ENV), token: requireEnv(env, FOUNDRY_TOKEN_ENV), attributionRid: optionalEnv(env, FOUNDRY_ATTRIBUTION_RID_ENV) }); } function normalizeFoundryUrl(foundryUrl) { return foundryUrl.trim().replace(/\/+$/, ""); } function resolveFoundryConfig(config, callerName) { const normalizedConfig = normalizeResolvedFoundryConfig({ foundryUrl: typeof config.foundryUrl === "string" ? config.foundryUrl : "", token: typeof config.token === "string" ? config.token : "", attributionRid: typeof config.attributionRid === "string" ? config.attributionRid : void 0 }); if (normalizedConfig.foundryUrl.length === 0) { throw new Error(`${callerName} requires config.foundryUrl to be a non-empty string.`); } if (normalizedConfig.token.length === 0) { throw new Error(`${callerName} requires config.token to be a non-empty string.`); } return normalizedConfig; } function requireEnv(env, name) { const value = optionalEnv(env, name); if (value == null) { throw new Error(`Missing required environment variable: ${name}`); } return value; } function optionalEnv(env, name) { const value = env[name]?.trim(); return value ? value : void 0; } function normalizeResolvedFoundryConfig(config) { const attributionRid = config.attributionRid?.trim(); return { foundryUrl: normalizeFoundryUrl(config.foundryUrl), token: config.token.trim(), attributionRid: attributionRid || void 0 }; } // src/errors.ts var FoundryModelNotFoundError = class extends Error { constructor(modelId) { super( `Unknown model: "${modelId}". Check the catalog for supported aliases or pass a raw Foundry RID directly to a provider adapter.` ); this.name = "FoundryModelNotFoundError"; } }; // src/models/metadata.ts var VISION_INPUT_TYPES = /* @__PURE__ */ new Set([ "GENERIC_VISION_COMPLETION", "GPT_WITH_VISION_COMPLETION" ]); function createProviderModelCatalog(provider, definitions) { return Object.freeze( Object.fromEntries( Object.entries(definitions).map(([modelId, definition]) => [ modelId, createModelMetadata(provider, definition) ]) ) ); } function modelSupportsInputType(metadata, inputType) { return metadata.inputTypes.includes(inputType); } function createModelMetadata(provider, definition) { return { ...definition, provider, supportsResponses: definition.inputTypes.includes("OPEN_AI_RESPONSES"), supportsVision: definition.inputTypes.some((inputType) => VISION_INPUT_TYPES.has(inputType)) }; } // src/models/anthropic-models.ts var ANTHROPIC_MODEL_DEFINITIONS = { "claude-3.5-haiku": { rid: "ri.language-model-service..language-model.anthropic-claude-3-5-haiku", modelIdentifier: "ANTHROPIC_CLAUDE_35_HAIKU", displayName: "Claude 3.5 Haiku", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "CLAUDE_CHAT" ], trainingCutoffDate: "2024-07-01T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "LIGHTWEIGHT", speed: "MEDIUM" }, externalUrl: "https://aws.amazon.com/bedrock/claude/" }, "claude-3.7-sonnet": { rid: "ri.language-model-service..language-model.anthropic-claude-3-7-sonnet", modelIdentifier: "ANTHROPIC_CLAUDE_37_SONNET", displayName: "Claude 3.7 Sonnet", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "CLAUDE_CHAT" ], trainingCutoffDate: "2024-11-01T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "HEAVYWEIGHT", speed: "MEDIUM" }, externalUrl: "https://aws.amazon.com/bedrock/claude/" }, "claude-haiku-4.5": { rid: "ri.language-model-service..language-model.anthropic-claude-4-5-haiku", modelIdentifier: "ANTHROPIC_CLAUDE_45_HAIKU", displayName: "Claude Haiku 4.5", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "CLAUDE_CHAT" ], trainingCutoffDate: "2025-07-01T00:00:00Z", performance: { cost: "LOW", modelClass: "LIGHTWEIGHT", speed: "HIGH" }, externalUrl: "https://www.anthropic.com/news/claude-haiku-4-5" }, "claude-opus-4": { rid: "ri.language-model-service..language-model.anthropic-claude-4-opus", modelIdentifier: "ANTHROPIC_CLAUDE_4_OPUS", displayName: "Claude Opus 4", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "CLAUDE_CHAT" ], trainingCutoffDate: "2025-03-01T00:00:00Z", performance: { cost: "HIGH", modelClass: "HEAVYWEIGHT", speed: "MEDIUM" }, externalUrl: "https://www.anthropic.com/news/claude-4" }, "claude-opus-4.1": { rid: "ri.language-model-service..language-model.anthropic-claude-4-1-opus", modelIdentifier: "ANTHROPIC_CLAUDE_41_OPUS", displayName: "Claude Opus 4.1", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "CLAUDE_CHAT" ], trainingCutoffDate: "2025-08-01T00:00:00Z", performance: { cost: "HIGH", modelClass: "HEAVYWEIGHT", speed: "MEDIUM" }, externalUrl: "https://www.anthropic.com/news/claude-opus-4-1" }, "claude-opus-4.5": { rid: "ri.language-model-service..language-model.anthropic-claude-4-5-opus", modelIdentifier: "ANTHROPIC_CLAUDE_45_OPUS", displayName: "Claude Opus 4.5", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "CLAUDE_CHAT" ], trainingCutoffDate: "2025-08-01T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "HEAVYWEIGHT", speed: "MEDIUM" }, externalUrl: "https://www.anthropic.com/news/claude-opus-4-5" }, "claude-opus-4.6": { rid: "ri.language-model-service..language-model.anthropic-claude-4-6-opus", modelIdentifier: "ANTHROPIC_CLAUDE_46_OPUS", displayName: "Claude Opus 4.6", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "CLAUDE_CHAT" ], trainingCutoffDate: "2025-08-01T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "HEAVYWEIGHT", speed: "MEDIUM" }, externalUrl: "https://www.anthropic.com/news/claude-opus-4-6" }, "claude-sonnet-4": { rid: "ri.language-model-service..language-model.anthropic-claude-4-sonnet", modelIdentifier: "ANTHROPIC_CLAUDE_4_SONNET", displayName: "Claude Sonnet 4", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "CLAUDE_CHAT" ], trainingCutoffDate: "2025-03-01T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "HEAVYWEIGHT", speed: "MEDIUM" }, externalUrl: "https://www.anthropic.com/news/claude-4" }, "claude-sonnet-4.5": { rid: "ri.language-model-service..language-model.anthropic-claude-4-5-sonnet", modelIdentifier: "ANTHROPIC_CLAUDE_45_SONNET", displayName: "Claude Sonnet 4.5", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "CLAUDE_CHAT" ], trainingCutoffDate: "2025-07-01T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "HEAVYWEIGHT", speed: "MEDIUM" }, externalUrl: "https://www.anthropic.com/news/claude-sonnet-4-5" }, "claude-sonnet-4.6": { rid: "ri.language-model-service..language-model.anthropic-claude-4-6-sonnet", modelIdentifier: "ANTHROPIC_CLAUDE_46_SONNET", displayName: "Claude Sonnet 4.6", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "CLAUDE_CHAT" ], trainingCutoffDate: "2025-08-01T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "HEAVYWEIGHT", speed: "MEDIUM" }, externalUrl: "https://www.anthropic.com/news/claude-sonnet-4-6" } }; var ANTHROPIC_MODELS = createProviderModelCatalog( "anthropic", ANTHROPIC_MODEL_DEFINITIONS ); var ANTHROPIC_MODEL_IDS = Object.freeze( Object.keys(ANTHROPIC_MODELS) ); // src/models/google-models.ts var GOOGLE_MODEL_DEFINITIONS = { "gemini-2.5-pro": { rid: "ri.language-model-service..language-model.gemini-2-5-pro", modelIdentifier: "GEMINI_2_5_PRO", displayName: "Gemini 2.5 Pro", lifecycle: "ga", inputTypes: [ "GEMINI_CHAT", "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION" ], trainingCutoffDate: "2025-01-01T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "REASONING", speed: "MEDIUM" }, externalUrl: "https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/2-5-pro" }, "gemini-2.5-flash": { rid: "ri.language-model-service..language-model.gemini-2-5-flash", modelIdentifier: "GEMINI_2_5_FLASH", displayName: "Gemini 2.5 Flash", lifecycle: "ga", inputTypes: [ "GEMINI_CHAT", "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION" ], trainingCutoffDate: "2025-01-01T00:00:00Z", performance: { cost: "LOW", modelClass: "REASONING", speed: "HIGH" }, externalUrl: "https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/2-5-flash" }, "gemini-2.5-flash-lite": { rid: "ri.language-model-service..language-model.gemini-2-5-flash-lite", modelIdentifier: "GEMINI_2_5_FLASH_LITE", displayName: "Gemini 2.5 Flash Lite", lifecycle: "ga", inputTypes: [ "GEMINI_CHAT", "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION" ], trainingCutoffDate: "2025-01-01T00:00:00Z", performance: { cost: "LOW", modelClass: "LIGHTWEIGHT", speed: "HIGH" }, externalUrl: "https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/2-5-flash-lite" }, "gemini-3-flash": { rid: "ri.language-model-service..language-model.gemini-3-flash", modelIdentifier: "GEMINI_3_FLASH", displayName: "Gemini 3 Flash (Preview)", lifecycle: "ga", inputTypes: [ "GEMINI_CHAT", "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION" ], trainingCutoffDate: "2025-01-01T00:00:00Z", performance: { cost: "LOW", modelClass: "LIGHTWEIGHT", speed: "HIGH" }, externalUrl: "https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/3-flash" }, "gemini-3.1-pro": { rid: "ri.language-model-service..language-model.gemini-3-1-pro", modelIdentifier: "GEMINI_3_1_PRO", displayName: "Gemini 3.1 Pro (Preview)", lifecycle: "ga", inputTypes: [ "GEMINI_CHAT", "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION" ], trainingCutoffDate: "2025-01-01T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "REASONING", speed: "MEDIUM" }, externalUrl: "https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/3-1-pro" }, "gemini-3.1-flash-lite": { rid: "ri.language-model-service..language-model.gemini-3-1-flash-lite", modelIdentifier: "GEMINI_3_1_FLASH_LITE", displayName: "Gemini 3.1 Flash Lite (Preview)", lifecycle: "experimental", inputTypes: [ "GEMINI_CHAT", "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION" ], trainingCutoffDate: "2025-01-01T00:00:00Z", performance: { cost: "LOW", modelClass: "LIGHTWEIGHT", speed: "HIGH" }, externalUrl: "https://deepmind.google/models/model-cards/gemini-3-1-flash-lite/" } }; var GOOGLE_MODELS = createProviderModelCatalog("google", GOOGLE_MODEL_DEFINITIONS); var GOOGLE_MODEL_IDS = Object.freeze( Object.keys(GOOGLE_MODELS) ); // src/models/openai-models.ts var OPENAI_MODEL_DEFINITIONS = { "gpt-4.1": { rid: "ri.language-model-service..language-model.gpt-4-1", modelIdentifier: "GPT_4_1", displayName: "GPT-4.1", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GPT_CHAT_COMPLETION", "GPT_WITH_VISION_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2024-05-31T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "HEAVYWEIGHT", speed: "HIGH" }, externalUrl: "https://platform.openai.com/docs/models/gpt-4.1" }, "gpt-4.1-mini": { rid: "ri.language-model-service..language-model.gpt-4-1-mini", modelIdentifier: "GPT_4_1_MINI", displayName: "GPT-4.1 mini", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GPT_CHAT_COMPLETION", "GPT_WITH_VISION_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2024-05-31T00:00:00Z", performance: { cost: "LOW", modelClass: "LIGHTWEIGHT", speed: "HIGH" }, externalUrl: "https://platform.openai.com/docs/models/gpt-4.1-mini" }, "gpt-4.1-nano": { rid: "ri.language-model-service..language-model.gpt-4-1-nano", modelIdentifier: "GPT_4_1_NANO", displayName: "GPT-4.1 nano", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GPT_CHAT_COMPLETION", "GPT_WITH_VISION_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2024-05-31T00:00:00Z", performance: { cost: "LOW", modelClass: "LIGHTWEIGHT", speed: "HIGH" }, externalUrl: "https://platform.openai.com/docs/models/gpt-4.1-nano" }, "gpt-4o": { rid: "ri.language-model-service..language-model.gpt-4-o", modelIdentifier: "GPT_4_O", displayName: "GPT-4o", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GPT_CHAT_COMPLETION", "GPT_WITH_VISION_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2023-10-01T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "HEAVYWEIGHT", speed: "HIGH" }, externalUrl: "https://platform.openai.com/docs/models/gpt-4o" }, "gpt-5": { rid: "ri.language-model-service..language-model.gpt-5", modelIdentifier: "GPT_5", displayName: "GPT-5", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GPT_CHAT_COMPLETION", "GPT_WITH_VISION_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_REASONING", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2024-09-30T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "HEAVYWEIGHT", speed: "MEDIUM" }, externalUrl: "https://platform.openai.com/docs/models/gpt-5" }, "gpt-5-codex": { rid: "ri.language-model-service..language-model.gpt-5-codex", modelIdentifier: "GPT_5_CODEX", displayName: "GPT-5 Codex", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2024-09-29T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "REASONING", speed: "MEDIUM" }, externalUrl: "https://platform.openai.com/docs/models/gpt-5-codex" }, "gpt-5-mini": { rid: "ri.language-model-service..language-model.gpt-5-mini", modelIdentifier: "GPT_5_MINI", displayName: "GPT-5 mini", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GPT_CHAT_COMPLETION", "GPT_WITH_VISION_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_REASONING", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2024-05-30T00:00:00Z", performance: { cost: "LOW", modelClass: "LIGHTWEIGHT", speed: "MEDIUM" }, externalUrl: "https://platform.openai.com/docs/models/gpt-5-mini" }, "gpt-5-nano": { rid: "ri.language-model-service..language-model.gpt-5-nano", modelIdentifier: "GPT_5_NANO", displayName: "GPT-5 nano", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GPT_CHAT_COMPLETION", "GPT_WITH_VISION_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_REASONING", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2024-05-30T00:00:00Z", performance: { cost: "LOW", modelClass: "LIGHTWEIGHT", speed: "HIGH" }, externalUrl: "https://platform.openai.com/docs/models/gpt-5-nano" }, "gpt-5.1": { rid: "ri.language-model-service..language-model.gpt-5-1", modelIdentifier: "GPT_5_1", displayName: "GPT-5.1", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GPT_CHAT_COMPLETION", "GPT_WITH_VISION_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2024-09-30T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "HEAVYWEIGHT", speed: "MEDIUM" }, externalUrl: "https://platform.openai.com/docs/models/gpt-5.1" }, "gpt-5.1-codex": { rid: "ri.language-model-service..language-model.gpt-5-1-codex", modelIdentifier: "GPT_5_1_CODEX", displayName: "GPT-5.1 Codex", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2024-09-30T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "REASONING", speed: "MEDIUM" }, externalUrl: "https://platform.openai.com/docs/models/gpt-5.1-codex" }, "gpt-5.1-codex-mini": { rid: "ri.language-model-service..language-model.gpt-5-1-codex-mini", modelIdentifier: "GPT_5_1_CODEX_MINI", displayName: "GPT-5.1 Codex mini", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2024-09-30T00:00:00Z", performance: { cost: "LOW", modelClass: "LIGHTWEIGHT", speed: "MEDIUM" }, externalUrl: "https://platform.openai.com/docs/models/gpt-5.1-codex-mini" }, "gpt-5.2": { rid: "ri.language-model-service..language-model.gpt-5-2", modelIdentifier: "GPT_5_2", displayName: "GPT-5.2", lifecycle: "experimental", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GPT_CHAT_COMPLETION", "GPT_WITH_VISION_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_REASONING", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2025-08-31T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "HEAVYWEIGHT", speed: "MEDIUM" }, externalUrl: "https://platform.openai.com/docs/models/gpt-5.2" }, "gpt-5.4": { rid: "ri.language-model-service..language-model.gpt-5-4", modelIdentifier: "GPT_5_4", displayName: "GPT-5.4", lifecycle: "experimental", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GPT_CHAT_COMPLETION", "GPT_WITH_VISION_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_REASONING", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2025-08-31T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "HEAVYWEIGHT", speed: "MEDIUM" }, externalUrl: "https://platform.openai.com/docs/models/gpt-5.4" }, "gpt-5.4-mini": { rid: "ri.language-model-service..language-model.gpt-5-4-mini", modelIdentifier: "GPT_5_4_MINI", displayName: "GPT-5.4 mini", lifecycle: "experimental", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GPT_CHAT_COMPLETION", "GPT_WITH_VISION_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_REASONING", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2025-08-31T00:00:00Z", performance: { cost: "LOW", modelClass: "LIGHTWEIGHT", speed: "HIGH" }, externalUrl: "https://platform.openai.com/docs/models/gpt-5.4-mini" }, "gpt-5.4-nano": { rid: "ri.language-model-service..language-model.gpt-5-4-nano", modelIdentifier: "GPT_5_4_NANO", displayName: "GPT-5.4 nano", lifecycle: "experimental", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "GPT_CHAT_COMPLETION", "GPT_WITH_VISION_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_REASONING", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2025-08-31T00:00:00Z", performance: { cost: "LOW", modelClass: "LIGHTWEIGHT", speed: "HIGH" }, externalUrl: "https://platform.openai.com/docs/models/gpt-5.4-nano" }, o3: { rid: "ri.language-model-service..language-model.o-3", modelIdentifier: "O_3", displayName: "o3", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "OPEN_AI_REASONING", "GENERIC_VISION_COMPLETION", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2024-05-31T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "REASONING", speed: "LOW" }, externalUrl: "https://platform.openai.com/docs/models/o3" }, "o4-mini": { rid: "ri.language-model-service..language-model.o-4-mini", modelIdentifier: "O_4_MINI", displayName: "o4-mini", lifecycle: "ga", inputTypes: [ "GENERIC_COMPLETION", "GENERIC_CHAT_COMPLETION", "OPEN_AI_REASONING", "GENERIC_VISION_COMPLETION", "OPEN_AI_RESPONSES" ], trainingCutoffDate: "2024-05-31T00:00:00Z", performance: { cost: "MEDIUM", modelClass: "REASONING", speed: "MEDIUM" }, externalUrl: "https://platform.openai.com/docs/models/o4-mini" } }; var OPENAI_MODELS = createProviderModelCatalog("openai", OPENAI_MODEL_DEFINITIONS); var OPENAI_MODEL_IDS = Object.freeze( Object.keys(OPENAI_MODELS) ); var OPENAI_REASONING_MODEL_TARGETS = new Set( Object.entries(OPENAI_MODELS).filter(([, metadata]) => modelSupportsInputType(metadata, "OPEN_AI_REASONING")).flatMap(([modelId, metadata]) => [modelId, metadata.rid]) ); function isKnownOpenAIReasoningTarget(modelId) { return OPENAI_REASONING_MODEL_TARGETS.has(modelId); } // src/models/catalog.ts var MODEL_CATALOG = { ...OPENAI_MODELS, ...ANTHROPIC_MODELS, ...GOOGLE_MODELS }; var MODEL_CATALOG_BY_RID = Object.fromEntries( Object.values(MODEL_CATALOG).map((metadata) => [metadata.rid, metadata]) ); function getModelMetadata(modelId) { return MODEL_CATALOG[modelId]; } function hasKnownModel(modelId) { return getModelMetadata(modelId) != null; } function resolveModelTarget(modelId) { const metadata = getModelMetadata(modelId) ?? getModelMetadataByRid(modelId); return { rid: metadata?.rid ?? modelId, metadata }; } function resolveKnownModelMetadata(modelId) { const metadata = getModelMetadata(modelId); if (metadata == null) { throw new FoundryModelNotFoundError(modelId); } return metadata; } function resolveModelRid(modelId) { return resolveKnownModelMetadata(modelId).rid; } function resolveModelProvider(modelId) { return resolveKnownModelMetadata(modelId).provider; } function getModelMetadataByRid(modelRid) { return MODEL_CATALOG_BY_RID[modelRid]; } export { loadFoundryConfig, resolveFoundryConfig, FoundryModelNotFoundError, ANTHROPIC_MODELS, ANTHROPIC_MODEL_IDS, GOOGLE_MODELS, GOOGLE_MODEL_IDS, OPENAI_MODELS, OPENAI_MODEL_IDS, isKnownOpenAIReasoningTarget, MODEL_CATALOG, MODEL_CATALOG_BY_RID, getModelMetadata, hasKnownModel, resolveModelTarget, resolveKnownModelMetadata, resolveModelRid, resolveModelProvider }; //# sourceMappingURL=chunk-B22YKL5X.mjs.map