openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
92 lines (91 loc) • 5.03 kB
JavaScript
//#region extensions/openai/model-route-contract.ts
const OPENAI_CHAT_LATEST_MODEL_ID = "chat-latest";
const OPENAI_GPT_6_ASTRA_MODEL_ID = "gpt-6-astra";
const OPENAI_GPT_56_MODEL_ID = "gpt-5.6";
const OPENAI_GPT_56_SOL_MODEL_ID = "gpt-5.6-sol";
const OPENAI_GPT_56_TERRA_MODEL_ID = "gpt-5.6-terra";
const OPENAI_GPT_56_LUNA_MODEL_ID = "gpt-5.6-luna";
const OPENAI_GPT_55_MODEL_ID = "gpt-5.5";
const OPENAI_GPT_55_PRO_MODEL_ID = "gpt-5.5-pro";
const OPENAI_GPT_54_MODEL_ID = "gpt-5.4";
const OPENAI_GPT_54_LEGACY_MODEL_ID = "gpt-5.4-codex";
const OPENAI_GPT_54_PRO_MODEL_ID = "gpt-5.4-pro";
const OPENAI_GPT_54_MINI_MODEL_ID = "gpt-5.4-mini";
const OPENAI_GPT_54_NANO_MODEL_ID = "gpt-5.4-nano";
const OPENAI_GPT_53_CODEX_SPARK_MODEL_ID = "gpt-5.3-codex-spark";
const OPENAI_GPT_56_VARIANT_MODEL_IDS = [
OPENAI_GPT_56_SOL_MODEL_ID,
OPENAI_GPT_56_TERRA_MODEL_ID,
OPENAI_GPT_56_LUNA_MODEL_ID
];
const OPENAI_CODEX_REASONING_EFFORT_ORDER = [
"low",
"medium",
"high",
"xhigh",
"max",
"ultra"
];
const OPENAI_CODEX_REASONING_EFFORTS_BY_MODEL = /* @__PURE__ */ new Map([
[OPENAI_GPT_56_SOL_MODEL_ID, OPENAI_CODEX_REASONING_EFFORT_ORDER],
[OPENAI_GPT_56_TERRA_MODEL_ID, OPENAI_CODEX_REASONING_EFFORT_ORDER],
[OPENAI_GPT_56_LUNA_MODEL_ID, OPENAI_CODEX_REASONING_EFFORT_ORDER.slice(0, -1)]
]);
/** Models with known first-party Platform and ChatGPT transports. */
const OPENAI_DUAL_ROUTE_MODEL_IDS = [
OPENAI_GPT_6_ASTRA_MODEL_ID,
...OPENAI_GPT_56_VARIANT_MODEL_IDS,
OPENAI_GPT_55_MODEL_ID,
OPENAI_GPT_55_PRO_MODEL_ID,
OPENAI_GPT_54_MODEL_ID,
OPENAI_GPT_54_PRO_MODEL_ID,
OPENAI_GPT_54_MINI_MODEL_ID
];
/** Direct aliases excluded from the ChatGPT catalog. */
const OPENAI_PLATFORM_ONLY_ROUTE_MODEL_IDS = [OPENAI_CHAT_LATEST_MODEL_ID, OPENAI_GPT_56_MODEL_ID];
const OPENAI_SUBSCRIPTION_ONLY_ROUTE_MODEL_IDS = [OPENAI_GPT_53_CODEX_SPARK_MODEL_ID];
/** Modern model refs recognized by the unified OpenAI provider surface. */
const OPENAI_PROVIDER_MODERN_MODEL_IDS = [
...OPENAI_PLATFORM_ONLY_ROUTE_MODEL_IDS,
...OPENAI_DUAL_ROUTE_MODEL_IDS,
OPENAI_GPT_54_NANO_MODEL_ID,
...OPENAI_SUBSCRIPTION_ONLY_ROUTE_MODEL_IDS
];
const OPENAI_CHATGPT_MODERN_MODEL_IDS = [...OPENAI_DUAL_ROUTE_MODEL_IDS, ...OPENAI_SUBSCRIPTION_ONLY_ROUTE_MODEL_IDS];
const openAIDualRouteModelIds = new Set(OPENAI_DUAL_ROUTE_MODEL_IDS);
const openAIPlatformOnlyRouteModelIds = new Set(OPENAI_PLATFORM_ONLY_ROUTE_MODEL_IDS);
const openAISubscriptionOnlyRouteModelIds = new Set(OPENAI_SUBSCRIPTION_ONLY_ROUTE_MODEL_IDS);
function normalizeOpenAIModelRouteId(value) {
const modelId = value?.trim() ?? "";
const normalized = modelId.toLowerCase();
return normalized === "gpt-5.4-codex" || normalized === `openai/gpt-5.4-codex` ? OPENAI_GPT_54_MODEL_ID : modelId;
}
function normalizeOpenAIRouteMembershipId(value) {
return normalizeOpenAIModelRouteId(value).toLowerCase();
}
/**
* Merge live Codex observations with first-party model capabilities.
* An explicit empty list remains authoritative; partial non-empty observations
* cannot erase capabilities known by every other OpenAI model surface.
*/
function resolveOpenAICodexReasoningEfforts(modelId, observed) {
const known = OPENAI_CODEX_REASONING_EFFORTS_BY_MODEL.get(normalizeOpenAIRouteMembershipId(modelId));
if (!known) return observed ? [...observed] : void 0;
if (observed === void 0 || observed.length === 0) return observed ? [] : [...known];
const normalizedObserved = observed.map((effort) => effort.trim().toLowerCase()).filter(Boolean);
const supported = /* @__PURE__ */ new Set([...known, ...normalizedObserved]);
const knownSet = new Set(known);
for (const effort of OPENAI_CODEX_REASONING_EFFORT_ORDER) if (!knownSet.has(effort)) supported.delete(effort);
return [...OPENAI_CODEX_REASONING_EFFORT_ORDER.filter((effort) => supported.delete(effort)), ...supported];
}
function isOpenAIDualRouteModelId(value) {
return openAIDualRouteModelIds.has(normalizeOpenAIRouteMembershipId(value));
}
function isOpenAIPlatformOnlyRouteModelId(value) {
return openAIPlatformOnlyRouteModelIds.has(normalizeOpenAIRouteMembershipId(value));
}
function isOpenAISubscriptionOnlyRouteModelId(value) {
return openAISubscriptionOnlyRouteModelIds.has(normalizeOpenAIRouteMembershipId(value));
}
//#endregion
export { resolveOpenAICodexReasoningEfforts as S, OPENAI_PROVIDER_MODERN_MODEL_IDS as _, OPENAI_GPT_54_MINI_MODEL_ID as a, isOpenAISubscriptionOnlyRouteModelId as b, OPENAI_GPT_54_PRO_MODEL_ID as c, OPENAI_GPT_56_LUNA_MODEL_ID as d, OPENAI_GPT_56_MODEL_ID as f, OPENAI_GPT_6_ASTRA_MODEL_ID as g, OPENAI_GPT_56_VARIANT_MODEL_IDS as h, OPENAI_GPT_54_LEGACY_MODEL_ID as i, OPENAI_GPT_55_MODEL_ID as l, OPENAI_GPT_56_TERRA_MODEL_ID as m, OPENAI_CHAT_LATEST_MODEL_ID as n, OPENAI_GPT_54_MODEL_ID as o, OPENAI_GPT_56_SOL_MODEL_ID as p, OPENAI_GPT_53_CODEX_SPARK_MODEL_ID as r, OPENAI_GPT_54_NANO_MODEL_ID as s, OPENAI_CHATGPT_MODERN_MODEL_IDS as t, OPENAI_GPT_55_PRO_MODEL_ID as u, isOpenAIDualRouteModelId as v, normalizeOpenAIModelRouteId as x, isOpenAIPlatformOnlyRouteModelId as y };