@nyrra/foundry-ai
Version:
Thin Palantir Foundry provider adapters and model catalog for the Vercel AI SDK.
860 lines (852 loc) • 25.7 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
ANTHROPIC_MODELS: () => ANTHROPIC_MODELS,
ANTHROPIC_MODEL_IDS: () => ANTHROPIC_MODEL_IDS,
FoundryModelNotFoundError: () => FoundryModelNotFoundError,
GOOGLE_MODELS: () => GOOGLE_MODELS,
GOOGLE_MODEL_IDS: () => GOOGLE_MODEL_IDS,
MODEL_CATALOG: () => MODEL_CATALOG,
MODEL_CATALOG_BY_RID: () => MODEL_CATALOG_BY_RID,
OPENAI_MODELS: () => OPENAI_MODELS,
OPENAI_MODEL_IDS: () => OPENAI_MODEL_IDS,
getModelMetadata: () => getModelMetadata,
hasKnownModel: () => hasKnownModel,
loadFoundryConfig: () => loadFoundryConfig,
resolveKnownModelMetadata: () => resolveKnownModelMetadata,
resolveModelProvider: () => resolveModelProvider,
resolveModelRid: () => resolveModelRid,
resolveModelTarget: () => resolveModelTarget
});
module.exports = __toCommonJS(src_exports);
// 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 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])
);
// 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];
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
ANTHROPIC_MODELS,
ANTHROPIC_MODEL_IDS,
FoundryModelNotFoundError,
GOOGLE_MODELS,
GOOGLE_MODEL_IDS,
MODEL_CATALOG,
MODEL_CATALOG_BY_RID,
OPENAI_MODELS,
OPENAI_MODEL_IDS,
getModelMetadata,
hasKnownModel,
loadFoundryConfig,
resolveKnownModelMetadata,
resolveModelProvider,
resolveModelRid,
resolveModelTarget
});
//# sourceMappingURL=index.cjs.map