UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

41 lines (40 loc) • 1.69 kB
import { C as isOpenAISubscriptionOnlyRouteModelId } from "./model-route-contract-Cp5B_PRi.mjs"; //#region extensions/openai/account-models.ts const OPENAI_UNKNOWN_MODEL_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }; const OPENAI_RESPONSES_UNSUPPORTED_MODEL_ID_PATTERN = /(?:^|-)(?:search|live|cyber|exp|alpha)(?:-|$)/; const OPENAI_PRE_GPT5_MODEL_ID_PATTERN = /^(?:ft:)?(?:gpt-3\.5|gpt-4|o[134])/; /** Conservative Responses metadata for an OpenAI chat id without a catalog row. */ function buildOpenAIUncataloguedModel(id, baseUrl) { return { id, name: id, api: "openai-responses", baseUrl, reasoning: /^(?:gpt-(?:[5-9]|\d{2})|o\d)/.test(id), input: ["text"], cost: OPENAI_UNKNOWN_MODEL_COST, contextWindow: 128e3, maxTokens: 16384 }; } /** * Keeps catalog rows for listed ids and gives every other runnable listed chat id * conservative Responses metadata. Shared prefix templates are not used here: every * OpenAI id shares "gpt-", and GPT-5 reasoning settings make GPT-4-family requests fail. */ function projectOpenAIAccountModels(params) { const catalogIds = new Set(params.catalogModels.map((model) => model.id)); return params.listedModels.flatMap((model) => { if (OPENAI_PRE_GPT5_MODEL_ID_PATTERN.test(model.id)) return []; if (catalogIds.has(model.id)) return [model]; if (OPENAI_RESPONSES_UNSUPPORTED_MODEL_ID_PATTERN.test(model.id) || isOpenAISubscriptionOnlyRouteModelId(model.id)) return []; return [buildOpenAIUncataloguedModel(model.id, params.baseUrl)]; }); } //#endregion export { projectOpenAIAccountModels as i, OPENAI_UNKNOWN_MODEL_COST as n, buildOpenAIUncataloguedModel as r, OPENAI_PRE_GPT5_MODEL_ID_PATTERN as t };