Перейти к содержимому

Селектор модели Codex App

opencodex не патчит Codex App. Он записывает ту же конфигурацию Codex и тот же каталог моделей, которыми уже пользуются Codex CLI/TUI. Поскольку Codex App читает это общее состояние, маршрутизируемые модели могут появляться в селекторе модели App как обычные записи каталога Codex.

У записей OpenAI две стабильные идентичности: одна нативная группа openai без префикса, где выбор аккаунта Pool (по умолчанию) или Direct управляется codexAccountMode, и транспорт по API-ключу с пространством имён openai-apikey/<model>. Смена режима аккаунта не меняет id в селекторе. API-записи GPT-5.6 используют контекст 1 050 000 / максимум входа 922 000, а id *-pro в селекторе разрешаются в базовую передаваемую модель с reasoning.mode: "pro", при этом журналы, статистика использования и состояние селектора сохраняют виртуальный id. API-каталог зафиксирован ровно на восьми id: gpt-5.5, gpt-5.6, Sol/Terra/Luna и три их виртуальных Pro-id; обобщённого алиаса gpt-5.6-pro не существует. Compact-запросы сохраняют выбранный уровень, но отправляют базовую модель без объекта reasoning.

Маршрут учётных данных выбирайте явно; Pool/Direct переключается на странице Providers:

gpt-5.6-sol # openai (Pool or Direct option)
openai-apikey/gpt-5.6-sol # API key

Свежие установки и конфигурации без сохранённого режима по умолчанию используют Pool. Текущие конфигурации используют маркер 2 и сохраняют поставлявшийся v1-вариант в ~/.opencodex/config.json.pre-openai-tiers-v2.bak; восстановить его можно так:

Terminal window
cp ~/.opencodex/config.json.pre-openai-tiers-v2.bak ~/.opencodex/config.json

Более ранние v1-конфигурации с тремя провайдерами автоматически мигрируют в единственную строку с выбором режима.

ocx init, ocx start и ocx sync поддерживают согласованность этих файлов Codex в разрешённом каталоге CODEX_HOME:

$CODEX_HOME/config.toml
$CODEX_HOME/opencodex.config.toml
$CODEX_HOME/opencodex-catalog.json
$CODEX_HOME/models_cache.json

При привязке к loopback по умолчанию Codex сохраняет свой встроенный id провайдера openai. opencodex устанавливает корневые ключи, которые направляют провайдера и каталог моделей на прокси:

model_catalog_json = "/absolute/path/to/opencodex-catalog.json"
openai_base_url = "http://127.0.0.1:10100/v1"

Для hostname, отличного от loopback, Codex также должен отправлять сгенерированный заголовок API-аутентификации. В этом режиме используются корневой ключ model_provider = "opencodex" и выделенный Responses-совместимый провайдер:

[model_providers.opencodex]
name = "OpenCodex Proxy"
base_url = "http://your-host:10100/v1"
wire_api = "responses"
requires_openai_auth = true
env_http_headers = { "x-opencodex-api-key" = "OPENCODEX_API_AUTH_TOKEN" }

websockets по умолчанию выключен. Записи выделенного провайдера и каталога объявляют supports_websockets = true только при "websockets": true; на loopback встроенный провайдер Codex может сначала попробовать WebSocket, и прокси с выключенной функцией вернёт 426, после чего Codex откатится на HTTP/SSE. Полный поток внедрения и восстановления описан в разделе Интеграция с Codex.

Почему маршрутизируемые модели появляются в селекторе

Заголовок раздела «Почему маршрутизируемые модели появляются в селекторе»

Селектор модели Codex ожидает записи каталога в формате Codex. opencodex строит маршрутизируемые записи, клонируя шаблон нативной модели Codex и заменяя идентичность на маршрутизируемую модель:

slug = "anthropic/claude-sonnet-..."
display_name = "anthropic/claude-sonnet-..."
visibility = "list"

Клон сохраняет поля, требуемые строгим парсером: уровни рассуждений, тип shell, флаги поддержки API и базовые инструкции. Затем opencodex удаляет чисто нативные возможности, которые маршрут не может обеспечить, включая метаданные service tier OpenAI.

Нативный резервный набор включает gpt-5.5, gpt-5.4, gpt-5.4-mini, gpt-5.3-codex-spark и GPT-5.6 Sol/Terra/Luna. Для семейства GPT-5.5/5.4 opencodex сохраняет более богатые актуальные записи установленного каталога Codex и синтезирует только отсутствующие. Комплектный снапшот вышестоящего источника используется только для GPT-5.6 — он даёт настоящую идентичность и метаданные каждой модели вместо приближения по старому шаблону.

Маршрут Id в селекторе и метаданные каталога
Вход Codex (Pool или Direct) gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna (окно каталога 372 000 токенов)
OpenAI (API-ключ) Ровно восемь строк с пространством имён: gpt-5.5, gpt-5.6, Sol/Terra/Luna и три виртуальных id *-pro (контекст 1 050 000; максимум входа 922 000 для всех восьми)
OpenRouter openrouter/openai/gpt-5.6-sol, openrouter/openai/gpt-5.6-terra, openrouter/openai/gpt-5.6-luna (1 050 000)
Cursor Статический резервный набор включает cursor/gpt-5.6-sol, cursor/gpt-5.6-terra и cursor/gpt-5.6-luna (1 000 000), а также cursor/grok-4.5 и cursor/grok-4.5-fast (500 000); какие из них останутся видимыми, решает живое обнаружение по аккаунту.
xAI Живое обнаружение имеет решающее значение; резервный каталог по умолчанию содержит xai/grok-4.5 с окном 500 000 токенов и уровнями рассуждений low / medium / high.

Закреплённые записи GPT-5.6 сохраняют точную шкалу вышестоящего источника. Sol и Terra предоставляют уровни от low до ultra; Luna заканчивается на max. По умолчанию Sol использует low, а Terra и Luna — medium. ultra — это клиентский выбор «максимум рассуждений плюс проактивное делегирование», до бэкенда он доходит как max. Запись в селекторе означает лишь готовность каталога: подключённый аккаунт или API-ключ всё равно должен иметь право использовать эту модель.

Переключатели нативных и маршрутизируемых моделей

Заголовок раздела «Переключатели нативных и маршрутизируемых моделей»

Страница Models в дашборде использует disabledModels для обоих семейств моделей:

  • Маршрутизируемые id имеют пространство имён (provider/model). Отключение исключает модель из синхронизируемого каталога и /v1/models.
  • Нативные GPT-id — это слаги без префикса. При отключении запись каталога сохраняется, но visibility меняется на hide, чтобы при повторном включении восстановить её в точности; пока модель отключена, она не входит в простой список OpenAI.
  • Нативные строки берутся из поддерживаемого статического набора, поэтому отключённая нативная модель остаётся видимой в дашборде и её можно снова включить.

Проход по видимости выполняется после обновления снапшотов, а API управления после переключения обновляет каталог и принудительно помечает кеш моделей Codex устаревшим.

opencodex добавляет трёхпозиционное переопределение поля multi_agent_version для каждой записи каталога:

Режим Эффект
v1 Принудительно переводит все модели на multi-agent-поверхность v1, отменяя закрепления вышестоящего источника (включая Sol/Terra).
base (по умолчанию при установке) Восстанавливает закрепления вышестоящего источника: Sol/Terra используют v2, Luna — v1, а незакреплённые модели следуют фиче-флагу Codex multi_agent_v2.
v2 Принудительно переводит все модели на multi-agent-поверхность v2, отменяя закрепления вышестоящего источника (включая Luna).

Режим задаётся на странице Dashboard или Models, командой ocx v2 mode v1|default|v2 либо запросом PUT /api/v2 с { "multiAgentMode": "v1" }. Изменения применяются к новым сессиям Codex.

Видимость уровней рассуждений не зависит от режима поверхности v1/base/v2. Генерируемые записи с поддержкой рассуждений объявляют max, чтобы прямые переопределения уровня для подагентов проходили валидацию; текущие генерируемые маршрутизируемые записи и более старые нативные GPT-записи объявляют также ultra. Точные шкалы GPT-5.6 вышестоящего источника сохраняются, поэтому у Luna есть max, но нет ultra.

При передаче маршрутизирующие адаптеры сопоставляют или ограничивают неподдерживаемые уровни. Для более старых нативных моделей, чья реальная шкала заканчивается на xhigh, nativeEffortClamp преобразует прямой выбор max или ultra в xhigh (например, GPT-5.5). У Sol, Terra и Luna есть настоящая ступень max.

Codex хранит режим fast так:

service_tier = "fast"
[features]
fast_mode = true

Но каталог моделей и id уровня в запросах во время выполнения используют priority. opencodex сохраняет это разделение. Нативные модели OpenAI с пробросом сохраняют поддержку fast; у маршрутизируемых не-OpenAI-моделей метаданные service tier удаляются, чтобы опция fast не предлагалась там, где её нельзя обеспечить.

Codex сортирует видимые в селекторе записи каталога по возрастанию priority и объявляет первые пять как переопределения модели для spawn_agent. Выберите до пяти нативных id без префикса или id provider/model через subagentModels или страницу Subagents в дашборде; opencodex присваивает этим записям приоритеты 0–4 в выбранном порядке. Остальные модели по-прежнему можно вызывать по точному id.

Список избранных моделей не связан с подсказкой Sub-agent delegation на дашборде. В частности, переопределения избранных моделей не обходят правило наследования родительской модели в v2.

Если селектор всё ещё показывает устаревшие записи, обновите каталог и перезапустите нужный интерфейс Codex:

Terminal window
ocx sync

Каждый раз, когда меняются видимость, priority или метаданные каталога, opencodex перезаписывает models_cache.json с намеренно устаревшей обёрткой кеша, чтобы следующее обновление моделей Codex прочитало новый каталог.