jackwener/OpenCLI · error · ArgumentError

Unknown ChatGPT model "${model}"

Error message

Unknown ChatGPT model "${model}"

What it means

requireKnownChatGPTModel validates the requested model name against CHATGPT_MODEL_TARGETS/CHATGPT_MODEL_ALIASES and throws ArgumentError when nothing matches. Aliases are normalized (trimmed, lowercased) before lookup, so only genuinely unknown names fail. The error's suggestion lists every accepted choice.

Source

Thrown at clis/chatgpt/utils.js:383

        throw new AuthRequiredError(CHATGPT_DOMAIN, message);
    }
    return state;
}

export async function ensureChatGPTComposer(page, message = 'ChatGPT composer is not available on the current page.') {
    const state = await ensureChatGPTLogin(page, message);
    if (!state.hasComposer) {
        throw new CommandExecutionError(message);
    }
    return state;
}

function requireKnownChatGPTModel(model) {
    const key = String(model ?? '').trim().toLowerCase();
    const targetKey = CHATGPT_MODEL_ALIASES[key] || key;
    const option = CHATGPT_MODEL_TARGETS[targetKey];
    if (!option) {
        throw new ArgumentError(
            `Unknown ChatGPT model "${model}"`,
            `Choose one of: ${CHATGPT_MODEL_CHOICES.join(', ')}`,
        );
    }
    return { key: targetKey, alias: key !== targetKey ? key : null, ...option };
}

function requireKnownChatGPTTool(tool) {
    const key = String(tool ?? '').trim().toLowerCase();
    const option = CHATGPT_TOOL_OPTIONS[key];
    if (!option) {
        throw new ArgumentError(
            `Unknown ChatGPT tool "${tool}"`,
            `Choose one of: ${CHATGPT_TOOL_CHOICES.join(', ')}`,
        );
    }
    return { key, ...option };
}

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Run with one of the listed choices: fast, balanced, advanced, very-high, gpt-5.6-pro, pro (or aliases like high/thinking, medium, ultra, speed/instant).
  2. Lowercase and trim your value — lookup is case-insensitive but the word must match exactly.
  3. Map any OpenAI-API-style model id to the closest ChatGPT tier in your config (e.g. gpt-4o -> balanced).
  4. Update the library if ChatGPT introduced a new model tier this version doesn't know yet.

Example fix

// before
const target = await chatgpt.model({ model: 'gpt-4o' }); // ArgumentError
// after
const target = await chatgpt.model({ model: 'balanced' }); // accepted choice
Defensive patterns

Strategy: validation

Validate before calling

import { CHATGPT_MODEL_CHOICES } from '@jackwener/opencli/chatgpt/utils';
const key = String(model ?? '').trim().toLowerCase();
if (!CHATGPT_MODEL_CHOICES.includes(key)) {
  throw new Error(`model must be one of: ${CHATGPT_MODEL_CHOICES.join(', ')}`);
}

Type guard

function isKnownChatGPTModel(model, choices) {
  return typeof model === 'string' && choices.map(c => c.toLowerCase()).includes(model.trim().toLowerCase());
}

Try / catch

try {
  await selectChatGPTModel(page, model);
} catch (err) {
  if (err instanceof ArgumentError && /Unknown ChatGPT model/.test(err.message)) {
    console.error(err.suggestion ?? err.message);
  }
  throw err;
}

Prevention

When it happens

Trigger: Passing a model argument like `--model gpt-4o` or `--model opus` to a ChatGPT command whose `target` path resolves through requireKnownChatGPTModel; any spelling not in the fast/balanced/advanced/very-high/gpt-5.6-pro/pro alias table (e.g. 'GPT-5.5', '5', 'thinking-pro').

Common situations: Copying model names from another tool (OpenAI API ids like gpt-4o or o3); stale docs listing retired model names after ChatGPT renamed tiers; script config files carrying old model keys.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29). Data as JSON: /api/errors/50b93ce5b2eab9f1. Report an issue: GitHub.