From b42ad670f18c75d61a7aad43015a3d40e6926048 Mon Sep 17 00:00:00 2001 From: Corry Haines Date: Sat, 10 May 2025 16:18:20 -0700 Subject: [PATCH] fix: flex-mode via config/flag (#813) * Add flexMode to stored config, and use it during config loading unless the flag is explicitly passed. * If the config asks for flexMode and the model doesn't support it, silently disable flexMode. Resolves #803 --- codex-cli/src/cli.tsx | 20 ++++++++++++-------- codex-cli/src/utils/config.ts | 6 ++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/codex-cli/src/cli.tsx b/codex-cli/src/cli.tsx index bbfc6237..7d9ea256 100644 --- a/codex-cli/src/cli.tsx +++ b/codex-cli/src/cli.tsx @@ -309,7 +309,7 @@ config = { notify: Boolean(cli.flags.notify), reasoningEffort: (cli.flags.reasoning as ReasoningEffort | undefined) ?? "high", - flexMode: Boolean(cli.flags.flexMode), + flexMode: cli.flags.flexMode || (config.flexMode ?? false), provider, disableResponseStorage, }; @@ -323,15 +323,19 @@ try { } // For --flex-mode, validate and exit if incorrect. -if (cli.flags.flexMode) { +if (config.flexMode) { const allowedFlexModels = new Set(["o3", "o4-mini"]); if (!allowedFlexModels.has(config.model)) { - // eslint-disable-next-line no-console - console.error( - `The --flex-mode option is only supported when using the 'o3' or 'o4-mini' models. ` + - `Current model: '${config.model}'.`, - ); - process.exit(1); + if (cli.flags.flexMode) { + // eslint-disable-next-line no-console + console.error( + `The --flex-mode option is only supported when using the 'o3' or 'o4-mini' models. ` + + `Current model: '${config.model}'.`, + ); + process.exit(1); + } else { + config.flexMode = false; + } } } diff --git a/codex-cli/src/utils/config.ts b/codex-cli/src/utils/config.ts index d2a9304a..9e9de7e9 100644 --- a/codex-cli/src/utils/config.ts +++ b/codex-cli/src/utils/config.ts @@ -146,6 +146,7 @@ export type StoredConfig = { notify?: boolean; /** Disable server-side response storage (send full transcript each request) */ disableResponseStorage?: boolean; + flexMode?: boolean; providers?: Record; history?: { maxSize?: number; @@ -489,6 +490,10 @@ export const loadConfig = ( } // Notification setting: enable desktop notifications when set in config config.notify = storedConfig.notify === true; + // Flex-mode setting: enable the flex-mode service tier when set in config + if (storedConfig.flexMode !== undefined) { + config.flexMode = storedConfig.flexMode; + } // Add default history config if not provided if (storedConfig.history !== undefined) { @@ -543,6 +548,7 @@ export const saveConfig = ( providers: config.providers, approvalMode: config.approvalMode, disableResponseStorage: config.disableResponseStorage, + flexMode: config.flexMode, reasoningEffort: config.reasoningEffort, };