@nyrra/foundry-ai
Version:
Thin Palantir Foundry provider adapters and model catalog for the Vercel AI SDK.
1,505 lines (1,495 loc) • 47 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/providers/third-party.ts
var third_party_exports = {};
__export(third_party_exports, {
createFoundryThirdParty: () => createFoundryThirdParty
});
module.exports = __toCommonJS(third_party_exports);
var import_openai = require("@ai-sdk/openai");
var import_ai2 = require("ai");
// src/config.ts
var TRACE_PARENT_PATTERN = /^[0-9a-f]{2}-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$/;
function normalizeFoundryUrl(foundryUrl) {
const trimmed = foundryUrl.trim();
let end = trimmed.length;
while (end > 0 && trimmed[end - 1] === "/") {
end -= 1;
}
return trimmed.slice(0, end);
}
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,
traceParent: typeof config.traceParent === "string" ? config.traceParent : void 0,
traceState: typeof config.traceState === "string" ? config.traceState : 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 normalizeResolvedFoundryConfig(config) {
const attributionRid = config.attributionRid?.trim();
const traceParent = config.traceParent?.trim();
const traceState = config.traceState?.trim();
if (traceParent && !TRACE_PARENT_PATTERN.test(traceParent)) {
throw new Error(
"Foundry traceParent must match the W3C traceparent format: <2 lowercase hex version>-<32 lowercase hex trace ID>-<16 lowercase hex parent ID>-<2 lowercase hex flags>."
);
}
return {
foundryUrl: normalizeFoundryUrl(config.foundryUrl),
token: config.token.trim(),
attributionRid: attributionRid || void 0,
traceParent: traceParent || void 0,
traceState: traceState || void 0
};
}
// src/middleware.ts
var import_ai = require("ai");
function wrapFoundryLanguageModel(model, options) {
return (0, import_ai.wrapLanguageModel)({
model,
middleware: {
specificationVersion: model.specificationVersion,
transformParams: async ({ params }) => {
return options.transformParams?.(params) ?? params;
}
},
modelId: options.modelId,
providerId: options.providerId
});
}
// 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") || definition.inputTypes.includes("X_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-opus-4.7": {
rid: "ri.language-model-service..language-model.anthropic-claude-4-7-opus",
modelIdentifier: "ANTHROPIC_CLAUDE_47_OPUS",
displayName: "Claude Opus 4.7",
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-7"
},
"claude-opus-4.8": {
rid: "ri.language-model-service..language-model.anthropic-claude-4-8-opus",
modelIdentifier: "ANTHROPIC_CLAUDE_48_OPUS",
displayName: "Claude Opus 4.8",
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-8"
},
"claude-opus-5": {
rid: "ri.language-model-service..language-model.anthropic-claude-5-opus",
modelIdentifier: "ANTHROPIC_CLAUDE_5_OPUS",
displayName: "Claude Opus 5",
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-5"
},
"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"
},
"claude-sonnet-5": {
rid: "ri.language-model-service..language-model.anthropic-claude-5-sonnet",
modelIdentifier: "ANTHROPIC_CLAUDE_5_SONNET",
displayName: "Claude Sonnet 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-sonnet-5"
}
};
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-3.7-flash": {
rid: "ri.language-model-service..language-model.gemini-3-7-flash",
modelIdentifier: "GEMINI_3_7_FLASH",
displayName: "Gemini 3.7 Flash",
lifecycle: "ga",
inputTypes: ["GEMINI_CHAT", "GENERIC_VISION_COMPLETION"],
performance: {
cost: "MEDIUM",
modelClass: "REASONING",
speed: "HIGH"
},
trainingCutoffDate: "2026-03-01T00:00:00Z"
},
"gemini-3.8-flash": {
rid: "ri.language-model-service..language-model.gemini-3-8-flash",
modelIdentifier: "GEMINI_3_8_FLASH",
displayName: "Gemini 3.8 Flash",
lifecycle: "experimental",
inputTypes: ["GEMINI_CHAT", "GENERIC_VISION_COMPLETION"],
performance: {
cost: "MEDIUM",
modelClass: "REASONING",
speed: "HIGH"
},
trainingCutoffDate: "2026-03-01T00:00:00Z",
externalUrl: "https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/gemini/3-8-flash"
},
"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/"
},
"gemini-3.5-flash": {
rid: "ri.language-model-service..language-model.gemini-3-5-flash",
modelIdentifier: "GEMINI_3_5_FLASH",
displayName: "Gemini 3.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: "LIGHTWEIGHT",
speed: "HIGH"
},
externalUrl: "https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/3-5-flash"
},
"gemini-3.5-flash-lite": {
rid: "ri.language-model-service..language-model.gemini-3-5-flash-lite",
modelIdentifier: "GEMINI_3_5_FLASH_LITE",
displayName: "Gemini 3.5 Flash Lite",
lifecycle: "ga",
inputTypes: [
"GEMINI_CHAT",
"GENERIC_COMPLETION",
"GENERIC_CHAT_COMPLETION",
"GENERIC_VISION_COMPLETION"
],
trainingCutoffDate: "2026-01-01T00:00:00Z",
performance: {
cost: "LOW",
modelClass: "LIGHTWEIGHT",
speed: "HIGH"
},
externalUrl: "https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/gemini/3-5-flash-lite"
},
"gemini-3.6-flash": {
rid: "ri.language-model-service..language-model.gemini-3-6-flash",
modelIdentifier: "GEMINI_3_6_FLASH",
displayName: "Gemini 3.6 Flash",
lifecycle: "ga",
inputTypes: [
"GEMINI_CHAT",
"GENERIC_COMPLETION",
"GENERIC_CHAT_COMPLETION",
"GENERIC_VISION_COMPLETION"
],
trainingCutoffDate: "2026-03-01T00:00:00Z",
performance: {
cost: "MEDIUM",
modelClass: "REASONING",
speed: "HIGH"
},
externalUrl: "https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/gemini/3-6-flash"
}
};
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-pro": {
rid: "ri.language-model-service..language-model.gpt-5-pro",
modelIdentifier: "GPT_5_PRO",
displayName: "GPT-5 Pro",
lifecycle: "ga",
inputTypes: [
"GENERIC_COMPLETION",
"GENERIC_CHAT_COMPLETION",
"GENERIC_VISION_COMPLETION",
"OPEN_AI_REASONING",
"OPEN_AI_RESPONSES"
],
trainingCutoffDate: "2024-09-30T00:00:00Z",
performance: {
cost: "HIGH",
modelClass: "REASONING",
speed: "LOW"
},
externalUrl: "https://platform.openai.com/docs/models/gpt-5-pro"
},
"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.3-codex": {
rid: "ri.language-model-service..language-model.gpt-5-3-codex",
modelIdentifier: "GPT_5_3_CODEX",
displayName: "GPT-5.3 Codex",
lifecycle: "ga",
inputTypes: [
"GENERIC_COMPLETION",
"GENERIC_CHAT_COMPLETION",
"GENERIC_VISION_COMPLETION",
"OPEN_AI_RESPONSES"
],
trainingCutoffDate: "2025-08-31T00:00:00Z",
performance: {
cost: "MEDIUM",
modelClass: "REASONING",
speed: "MEDIUM"
},
externalUrl: "https://platform.openai.com/docs/models/gpt-5.3-codex"
},
"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.5": {
rid: "ri.language-model-service..language-model.gpt-5-5",
modelIdentifier: "GPT_5_5",
displayName: "GPT-5.5",
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-12-31T00:00:00Z",
performance: {
cost: "MEDIUM",
modelClass: "HEAVYWEIGHT",
speed: "MEDIUM"
},
externalUrl: "https://platform.openai.com/docs/models/gpt-5.5"
},
"gpt-5.6-sol": {
rid: "ri.language-model-service..language-model.gpt-5-6-sol",
modelIdentifier: "GPT_5_6_SOL",
displayName: "GPT-5.6 Sol",
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: "2026-02-16T00:00:00Z",
performance: {
cost: "MEDIUM",
modelClass: "HEAVYWEIGHT",
speed: "MEDIUM"
},
externalUrl: "https://platform.openai.com/docs/models/gpt-5.6-sol"
},
"gpt-5.6-terra": {
rid: "ri.language-model-service..language-model.gpt-5-6-terra",
modelIdentifier: "GPT_5_6_TERRA",
displayName: "GPT-5.6 Terra",
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: "2026-02-16T00:00:00Z",
performance: {
cost: "MEDIUM",
modelClass: "HEAVYWEIGHT",
speed: "MEDIUM"
},
externalUrl: "https://platform.openai.com/docs/models/gpt-5.6-terra"
},
"gpt-5.6-luna": {
rid: "ri.language-model-service..language-model.gpt-5-6-luna",
modelIdentifier: "GPT_5_6_LUNA",
displayName: "GPT-5.6 Luna",
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: "2026-02-16T00:00:00Z",
performance: {
cost: "LOW",
modelClass: "HEAVYWEIGHT",
speed: "MEDIUM"
},
externalUrl: "https://platform.openai.com/docs/models/gpt-5.6-luna"
},
"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_EMBEDDING_MODEL_DEFINITIONS = {
"text-embedding-3-small": {
rid: "text-embedding-3-small",
modelIdentifier: "TEXT_EMBEDDING_3_SMALL",
displayName: "Text Embedding 3 Small",
lifecycle: "ga",
inputTypes: ["OPEN_AI_EMBEDDINGS"],
trainingCutoffDate: "2021-09-01T00:00:00Z",
performance: {
cost: "LOW",
modelClass: "LIGHTWEIGHT",
speed: "HIGH"
},
externalUrl: "https://platform.openai.com/docs/models/text-embedding-3-small"
},
"text-embedding-3-large": {
rid: "text-embedding-3-large",
modelIdentifier: "TEXT_EMBEDDING_3_LARGE",
displayName: "Text Embedding 3 Large",
lifecycle: "ga",
inputTypes: ["OPEN_AI_EMBEDDINGS"],
trainingCutoffDate: "2021-09-01T00:00:00Z",
performance: {
cost: "MEDIUM",
modelClass: "HEAVYWEIGHT",
speed: "HIGH"
},
externalUrl: "https://platform.openai.com/docs/models/text-embedding-3-large"
}
};
var OPENAI_MODELS = createProviderModelCatalog("openai", OPENAI_MODEL_DEFINITIONS);
var OPENAI_EMBEDDING_MODELS = createProviderModelCatalog(
"openai",
OPENAI_EMBEDDING_MODEL_DEFINITIONS
);
var OPENAI_MODEL_IDS = Object.freeze(
Object.keys(OPENAI_MODELS)
);
var OPENAI_EMBEDDING_MODEL_IDS = Object.freeze(
Object.keys(OPENAI_EMBEDDING_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/third-party-models.ts
var THIRD_PARTY_MODEL_DEFINITIONS = {
"gemma-4-31b": {
rid: "ri.language-model-service..language-model.gemma-4-31b",
modelIdentifier: "GEMMA_4_31B",
displayName: "Gemma 4 31B",
lifecycle: "experimental",
inputTypes: ["OPEN_AI_RESPONSES", "GENERIC_VISION_COMPLETION"],
performance: {
cost: "MEDIUM",
modelClass: "REASONING",
speed: "MEDIUM"
},
externalUrl: "https://huggingface.co/google/gemma-4-31B-it",
modelCreator: "GOOGLE",
transport: "openai-responses"
},
"kimi-k2-5": {
rid: "ri.language-model-service..language-model.kimi-k2-5",
modelIdentifier: "KIMI_K2_5",
displayName: "Kimi K2.5",
lifecycle: "ga",
inputTypes: ["GPT_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION"],
performance: {
cost: "HIGH",
modelClass: "REASONING",
speed: "MEDIUM"
},
externalUrl: "https://www.kimi.com/ai-models/kimi-k2-5",
modelCreator: "MOONSHOT_AI",
transport: "openai-chat"
},
"kimi-k3": {
rid: "ri.language-model-service..language-model.kimi-k3",
modelIdentifier: "KIMI_K3",
displayName: "Kimi K3",
lifecycle: "experimental",
inputTypes: ["GPT_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_RESPONSES"],
performance: {
cost: "HIGH",
modelClass: "REASONING",
speed: "MEDIUM"
},
externalUrl: "https://huggingface.co/moonshotai/Kimi-K3",
modelCreator: "MOONSHOT_AI",
transport: "openai-chat"
},
"llama-3-3-nemotron-super-49b-v1-5": {
rid: "ri.language-model-service..language-model.llama-3-3-nemotron-super-49b-v1-5",
modelIdentifier: "LLAMA_3_3_NEMOTRON_SUPER_49B_V1_5",
displayName: "Llama 3.3 Nemotron Super 49b v1.5",
lifecycle: "ga",
inputTypes: [],
performance: {
cost: "MEDIUM",
modelClass: "HEAVYWEIGHT",
speed: "MEDIUM"
},
trainingCutoffDate: "2023-12-01T00:00:00Z",
modelCreator: "NVIDIA",
transport: "unavailable"
},
"nemotron-3-ultra-550b-a55b-nvfp4": {
rid: "ri.language-model-service..language-model.nemotron-3-ultra-550b-a55b-nvfp4",
modelIdentifier: "NEMOTRON_3_ULTRA_550B_A55B_NVFP4",
displayName: "NVIDIA Nemotron 3 Ultra 550B A55B NVFP4",
lifecycle: "experimental",
inputTypes: ["OPEN_AI_RESPONSES"],
performance: {
cost: "MEDIUM",
modelClass: "REASONING",
speed: "MEDIUM"
},
trainingCutoffDate: "2026-05-01T00:00:00Z",
externalUrl: "https://build.nvidia.com/nvidia/nemotron-3-ultra-550b-a55b/modelcard",
modelCreator: "NVIDIA",
transport: "openai-responses"
},
"gemma-4-26b-a4b": {
rid: "ri.language-model-service..language-model.gemma-4-26b-a4b",
modelIdentifier: "GEMMA_4_26B_A4B",
displayName: "Gemma 4 26B A4B",
lifecycle: "ga",
inputTypes: ["OPEN_AI_RESPONSES", "GENERIC_VISION_COMPLETION"],
performance: {
cost: "MEDIUM",
modelClass: "REASONING",
speed: "MEDIUM"
},
trainingCutoffDate: "2025-01-01T00:00:00Z",
externalUrl: "https://huggingface.co/google/gemma-4-26B-A4B-it",
modelCreator: "OPEN_SOURCE",
transport: "openai-responses"
},
"qwen3-235b-a22b-2507": {
rid: "ri.language-model-service..language-model.qwen3-235b-a22b-2507",
modelIdentifier: "QWEN3_235B_A22B_2507",
displayName: "Qwen3 235B A22B 2507",
lifecycle: "experimental",
inputTypes: ["GPT_CHAT_COMPLETION"],
performance: {
cost: "MEDIUM",
modelClass: "REASONING",
speed: "MEDIUM"
},
externalUrl: "https://qwen.ai/blog?id=qwen3",
modelCreator: "QWEN",
transport: "openai-chat"
},
"qwen3-32b": {
rid: "ri.language-model-service..language-model.qwen3-32b",
modelIdentifier: "QWEN3_32B",
displayName: "Qwen3 32B",
lifecycle: "experimental",
inputTypes: ["GPT_CHAT_COMPLETION"],
performance: {
cost: "MEDIUM",
modelClass: "REASONING",
speed: "MEDIUM"
},
externalUrl: "https://qwen.ai/blog?id=qwen3",
modelCreator: "QWEN",
transport: "openai-chat"
},
"glm-5": {
rid: "ri.language-model-service..language-model.glm-5",
modelIdentifier: "GLM_5",
displayName: "Z.ai GLM-5",
lifecycle: "ga",
inputTypes: ["GPT_CHAT_COMPLETION"],
performance: {
cost: "HIGH",
modelClass: "REASONING",
speed: "MEDIUM"
},
externalUrl: "https://z.ai/blog/glm-5",
modelCreator: "Z_AI",
transport: "openai-chat"
},
"glm-5-3": {
rid: "ri.language-model-service..language-model.glm-5-3",
modelIdentifier: "GLM_5_3",
displayName: "Z.ai GLM-5.3",
lifecycle: "experimental",
inputTypes: ["GPT_CHAT_COMPLETION", "OPEN_AI_RESPONSES"],
performance: {
cost: "HIGH",
modelClass: "REASONING",
speed: "MEDIUM"
},
externalUrl: "https://huggingface.co/zai-org/GLM-5.3",
modelCreator: "Z_AI",
transport: "openai-chat"
},
"glm-5-3-flash": {
rid: "ri.language-model-service..language-model.glm-5-3-flash",
modelIdentifier: "GLM_5_3_FLASH",
displayName: "Z.ai GLM-5.3 Flash",
lifecycle: "experimental",
inputTypes: ["GPT_CHAT_COMPLETION", "GENERIC_VISION_COMPLETION", "OPEN_AI_RESPONSES"],
performance: {
cost: "LOW",
modelClass: "REASONING",
speed: "HIGH"
},
externalUrl: "https://fireworks.ai/models/fireworks/glm-5p3-flash",
modelCreator: "Z_AI",
transport: "openai-chat"
},
"grok-4-3": {
rid: "ri.language-model-service..language-model.grok-4-3",
modelIdentifier: "GROK_4_3",
displayName: "Grok 4.3",
lifecycle: "ga",
inputTypes: ["X_AI_RESPONSES", "GENERIC_VISION_COMPLETION"],
performance: {
cost: "MEDIUM",
modelClass: "REASONING"
},
trainingCutoffDate: "2025-12-01T00:00:00Z",
externalUrl: "https://docs.x.ai/developers/models/grok-4.3",
modelCreator: "X_AI",
transport: "xai-responses"
},
"grok-4-5": {
rid: "ri.language-model-service..language-model.grok-4-5",
modelIdentifier: "GROK_4_5",
displayName: "Grok 4.5",
lifecycle: "ga",
inputTypes: ["X_AI_RESPONSES", "GENERIC_VISION_COMPLETION"],
performance: {
cost: "MEDIUM",
modelClass: "REASONING"
},
trainingCutoffDate: "2026-02-01T00:00:00Z",
externalUrl: "https://docs.x.ai/developers/models/grok-4.5",
modelCreator: "X_AI",
transport: "xai-responses"
},
"grok-4-6": {
rid: "ri.language-model-service..language-model.grok-4-6",
modelIdentifier: "GROK_4_6",
displayName: "Grok 4.6",
lifecycle: "ga",
inputTypes: ["X_AI_RESPONSES", "GENERIC_VISION_COMPLETION"],
performance: {
cost: "MEDIUM",
modelClass: "REASONING"
},
trainingCutoffDate: "2026-02-01T00:00:00Z",
externalUrl: "https://docs.x.ai/developers/models/grok-4.6",
modelCreator: "X_AI",
transport: "xai-responses"
},
"grok-420-non-reasoning-latest": {
rid: "ri.language-model-service..language-model.grok-420-non-reasoning-latest",
modelIdentifier: "GROK_420_NON_REASONING_LATEST",
displayName: "Grok 420 Non-Reasoning Latest",
lifecycle: "ga",
inputTypes: ["X_AI_RESPONSES", "GENERIC_VISION_COMPLETION"],
performance: {
cost: "MEDIUM",
modelClass: "LIGHTWEIGHT"
},
trainingCutoffDate: "2026-01-01T00:00:00Z",
modelCreator: "X_AI",
transport: "xai-responses"
},
"grok-420-reasoning-latest": {
rid: "ri.language-model-service..language-model.grok-420-reasoning-latest",
modelIdentifier: "GROK_420_REASONING_LATEST",
displayName: "Grok 420 Reasoning Latest",
lifecycle: "ga",
inputTypes: ["X_AI_RESPONSES", "GENERIC_VISION_COMPLETION"],
performance: {
cost: "MEDIUM",
modelClass: "REASONING"
},
trainingCutoffDate: "2026-01-01T00:00:00Z",
modelCreator: "X_AI",
transport: "xai-responses"
},
"grok-build-0-1": {
rid: "ri.language-model-service..language-model.grok-build-0-1",
modelIdentifier: "GROK_BUILD_0_1",
displayName: "Grok Build 0.1",
lifecycle: "ga",
inputTypes: ["X_AI_RESPONSES", "GENERIC_VISION_COMPLETION"],
performance: {
cost: "MEDIUM",
modelClass: "LIGHTWEIGHT"
},
trainingCutoffDate: "2025-03-17T00:00:00Z",
externalUrl: "https://x.ai/news/grok-build-0-1",
modelCreator: "X_AI",
transport: "xai-responses"
}
};
var THIRD_PARTY_MODELS = createProviderModelCatalog(
"third-party",
THIRD_PARTY_MODEL_DEFINITIONS
);
var THIRD_PARTY_MODEL_IDS = Object.freeze(
Object.keys(THIRD_PARTY_MODELS)
);
// src/models/catalog.ts
var MODEL_CATALOG = {
...OPENAI_MODELS,
...OPENAI_EMBEDDING_MODELS,
...ANTHROPIC_MODELS,
...GOOGLE_MODELS,
...THIRD_PARTY_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 resolveModelTarget(modelId) {
const metadata = getModelMetadata(modelId) ?? getModelMetadataByRid(modelId);
return {
rid: metadata?.rid ?? modelId,
metadata
};
}
function getModelMetadataByRid(modelRid) {
return MODEL_CATALOG_BY_RID[modelRid];
}
// src/providers/third-party.ts
function createFoundryThirdParty(config) {
const resolved = resolveFoundryConfig(config, "createFoundryThirdParty");
const providerId = "foundry-third-party";
const headers = {
...resolved.attributionRid ? { attribution: resolved.attributionRid } : {},
...resolved.traceParent ? { traceParent: resolved.traceParent } : {},
...resolved.traceState ? { traceState: resolved.traceState } : {}
};
const createProxy = (family) => (0, import_openai.createOpenAI)({
apiKey: resolved.token,
baseURL: `${resolved.foundryUrl}/api/v2/llm/proxy/${family}/v1`,
headers,
name: providerId,
...family === "xai" ? { fetch: createXaiProxyFetch() } : {}
});
const openai = createProxy("openai");
const xai = createProxy("xai");
const createLanguageModel = (modelId) => {
const { rid, metadata } = resolveModelTarget(modelId);
if (metadata?.provider !== "third-party" || metadata.transport == null) {
throw new import_ai2.NoSuchModelError({ modelId, modelType: "languageModel" });
}
if (metadata.transport === "unavailable") {
throw new import_ai2.NoSuchModelError({
modelId,
modelType: "languageModel",
message: `${modelId} is enrolled in Foundry, but has no verified provider-compatible proxy route. See docs/third-party-model-support.md.`
});
}
const model = metadata.transport === "openai-chat" ? openai.chat(rid) : metadata.transport === "xai-responses" ? xai.responses(rid) : openai.responses(rid);
return wrapFoundryLanguageModel(model, {
modelId,
providerId,
transformParams: (params) => {
const options = params.providerOptions?.openai ?? {};
if (options.store === true) {
throw new Error(
"Foundry third-party models do not support providerOptions.openai.store=true."
);
}
return {
...params,
providerOptions: {
...params.providerOptions,
openai: { ...options, store: metadata.transport === "openai-chat" ? void 0 : false }
}
};
}
});
};
const provider = createLanguageModel;
provider.specificationVersion = openai.specificationVersion;
provider.languageModel = createLanguageModel;
provider.embeddingModel = (modelId) => {
throw new import_ai2.NoSuchModelError({ modelId, modelType: "embeddingModel" });
};
provider.imageModel = (modelId) => {
throw new import_ai2.NoSuchModelError({ modelId, modelType: "imageModel" });
};
return provider;
}
function createXaiProxyFetch() {
return async (input, init) => {
const request = new Request(input, init);
const body = await request.json();
if (Array.isArray(body.input)) {
body.input = body.input.map((item) => {
if (item.role !== "assistant" || !Array.isArray(item.content)) return item;
if (!item.content.every(
(part) => part.type === "output_text" && typeof part.text === "string"
))
return item;
const { id: _id, ...message } = item;
return { ...message, content: item.content.map((part) => part.text).join("") };
});
}
return fetch(new Request(request, { body: JSON.stringify(body) }));
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createFoundryThirdParty
});
//# sourceMappingURL=third-party.cjs.map