UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

78 lines (77 loc) 2.49 kB
//#region extensions/codex/provider-catalog.ts /** Provider id used by Codex model refs. */ const CODEX_PROVIDER_ID = "codex"; /** Synthetic base URL used to route Codex app-server model requests. */ const CODEX_BASE_URL = "https://chatgpt.com/backend-api"; /** Synthetic auth marker understood by Codex app-server runtime paths. */ const CODEX_APP_SERVER_AUTH_MARKER = "codex-app-server"; const DEFAULT_CONTEXT_WINDOW = 272e3; const DEFAULT_MAX_TOKENS = 128e3; /** Offline fallback catalog used when live app-server discovery is unavailable. */ const FALLBACK_CODEX_MODELS = [{ id: "gpt-5.5", model: "gpt-5.5", displayName: "gpt-5.5", description: "Latest frontier agentic coding model.", isDefault: true, inputModalities: ["text", "image"], supportedReasoningEfforts: [ "low", "medium", "high", "xhigh" ] }, { id: "gpt-5.4-mini", model: "gpt-5.4-mini", displayName: "GPT-5.4-Mini", description: "Smaller frontier agentic coding model.", inputModalities: ["text", "image"], supportedReasoningEfforts: [ "low", "medium", "high", "xhigh" ] }]; /** * Converts a Codex app-server model record into OpenClaw provider model config. */ function buildCodexModelDefinition(model) { const id = model.id.trim() || model.model.trim(); return { id, name: model.displayName?.trim() || id, api: "openai-chatgpt-responses", reasoning: model.supportedReasoningEfforts.length > 0 || shouldDefaultToReasoningModel(id), input: model.inputModalities.includes("image") ? ["text", "image"] : ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: DEFAULT_CONTEXT_WINDOW, maxTokens: DEFAULT_MAX_TOKENS, compat: { supportsReasoningEffort: model.supportedReasoningEfforts.length > 0, supportsUsageInStreaming: true } }; } /** Builds the synthetic Codex provider config for a model list. */ function buildCodexProviderConfig(models) { return { baseUrl: CODEX_BASE_URL, apiKey: CODEX_APP_SERVER_AUTH_MARKER, auth: "token", api: "openai-chatgpt-responses", models: models.map(buildCodexModelDefinition) }; } function shouldDefaultToReasoningModel(modelId) { const lower = modelId.toLowerCase(); return lower.startsWith("gpt-5") || lower.startsWith("o1") || lower.startsWith("o3") || lower.startsWith("o4"); } //#endregion export { buildCodexModelDefinition as a, FALLBACK_CODEX_MODELS as i, CODEX_BASE_URL as n, buildCodexProviderConfig as o, CODEX_PROVIDER_ID as r, CODEX_APP_SERVER_AUTH_MARKER as t };