LM Warden

Codex CLI на ваших собственных GPU.

LM Warden как пользовательский провайдер моделей для Codex CLI с одной обслуживаемой моделью.

Куда идет запрос от Codex CLI Codex CLI отправляет запросы в LM Warden: в base_url указан адрес сервера LM Warden, а в env_key — ключ LM Warden. LM Warden проверяет ключ, принимает запросы в формате OpenAI Responses, ставит их в очередь по приоритету ключа и передает маршрутизатору реплик. Маршрутизатор закрепляет каждую сессию за репликой, на которой уже лежит ее кэш; на каждом GPU работает своя копия модели. Codex CLI base_url the warden, at /v1 env_key LMWARDEN_KEY holds vw_… POST /v1/responses LM Warden checks the key: one per app speaks OpenAI Responses scheduler, key priority usage, latency and live stats per key Replica router a session goes back to the replica that holds its cache one model copy per GPU your GPUs: vLLM or llama.cpp replica 0, GPU 0 replica 1, GPU 1 replica 2, GPU 2 a conversation stays on its replica
Куда идет запрос от Codex CLI Codex CLI отправляет запросы в LM Warden: в base_url указан адрес сервера LM Warden, а в env_key — ключ LM Warden. LM Warden проверяет ключ, принимает запросы в формате OpenAI Responses, ставит их в очередь по приоритету ключа и передает маршрутизатору реплик. Маршрутизатор закрепляет каждую сессию за репликой, на которой уже лежит ее кэш; на каждом GPU работает своя копия модели. Codex CLI base_url the warden, at /v1 env_key LMWARDEN_KEY holds vw_… POST /v1/responses LM Warden checks the key: one per app speaks OpenAI Responses scheduler, key priority usage, latency, live stats per key Replica router a session goes back to the replica that holds its cache replica 0 GPU 0 replica 1 GPU 1 replica 2 GPU 2 your GPUs: vLLM or llama.cpp a conversation stays on its replica
Путь запроса от Codex CLI: две настройки, которые создает Connect, затем сервер LM Warden и по копии модели на каждом GPU.

Иначе говоря: Codex CLI отправляет запросы в LM Warden: в base_url указан адрес сервера LM Warden, а в env_key — ключ LM Warden. LM Warden проверяет ключ, принимает запросы в формате OpenAI Responses, ставит их в очередь по приоритету ключа и передает маршрутизатору реплик. Маршрутизатор закрепляет каждую сессию за репликой, на которой уже лежит ее кэш; на каждом GPU работает своя копия модели.

Протокол
OpenAI Responses
Поддержка
Только локально

Только локальные модели. Codex работает только через Responses API; LM Warden преобразует POST /v1/responses в Chat Completions для обслуживаемой модели, так что ответ, вызовы инструментов и статистика использования доходят до Codex в виде событий Responses. Состояние не сохраняется: Codex отправляет store:false и весь диалог на каждом шаге, а запросы с previous_response_id отклоняются. Рассуждения по умолчанию включены (Codex запрашивает их краткое изложение, и рассуждения модели показываются в сжатом виде; чтобы выключить их, задайте model_reasoning_effort = "none" в config.toml), встроенный облачный веб-поиск отбрасывается (задайте web_search = "disabled"), а правила маршрутизатора не применяются. Укажите в model_context_window реальный размер контекстного окна модели: для незнакомых имен Codex исходит из 272 тыс. токенов. В движке должен быть включен вызов инструментов (vLLM: --enable-auto-tool-choice и --tool-call-parser). На запрос к незагруженной модели возвращается 404, и Codex несколько секунд повторяет запрос, прежде чем сдаться.

Требования

  • Нужна модель с вызовом инструментов (агентное редактирование).
  • Лучше всего работает с контекстом не меньше 32 768 токенов.

Настройка

В консоли раздел Connect создает эти файлы с адресом вашего сервера LM Warden, вашим ключом и выбранной моделью. Здесь они показаны с заполнителями.

Локальные модели

Добавьте LM Warden как провайдер моделей в ~/.codex/config.toml.

config.toml (~/.codex/config.toml)
model = "your-served-model-name"
model_provider = "lmwarden"
# Codex assumes a 272k window for models it does not know; set the real one.
model_context_window = 32768

[model_providers.lmwarden]
name = "LM Warden"
base_url = "https://your-warden/v1"
env_key = "LMWARDEN_KEY"
wire_api = "responses"
# The model's context window is unknown: 32768 is a guess. Set it to the model's real window.
Оболочка
export LMWARDEN_KEY=vw_YOUR_KEY
codex exec "Reply with the single word OK."

Официальная документация: https://learn.chatgpt.com/docs/config-file/config-reference (дата обращения: 2026-10-04).