LM Warden

Codex CLI sur vos propres GPU.

LM Warden comme fournisseur de modèle personnalisé pour Codex CLI, avec un seul modèle servi.

Où va une requête envoyée par Codex CLI Codex CLI envoie ses requêtes à LM Warden : base_url pointe vers le warden et env_key contient une clé du warden. LM Warden vérifie la clé, interprète la requête au format OpenAI Responses, la place en file d’attente selon la priorité de la clé, puis la confie au routeur de réplicas, qui maintient chaque session sur le réplica détenant déjà son cache (une copie du modèle par 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
Où va une requête envoyée par Codex CLI Codex CLI envoie ses requêtes à LM Warden : base_url pointe vers le warden et env_key contient une clé du warden. LM Warden vérifie la clé, interprète la requête au format OpenAI Responses, la place en file d’attente selon la priorité de la clé, puis la confie au routeur de réplicas, qui maintient chaque session sur le réplica détenant déjà son cache (une copie du modèle par 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
Où va une requête envoyée par Codex CLI : les deux paramètres que génère Connect, le warden au centre, puis une copie du modèle par GPU.

En clair : Codex CLI envoie ses requêtes à LM Warden : base_url pointe vers le warden et env_key contient une clé du warden. LM Warden vérifie la clé, interprète la requête au format OpenAI Responses, la place en file d’attente selon la priorité de la clé, puis la confie au routeur de réplicas, qui maintient chaque session sur le réplica détenant déjà son cache (une copie du modèle par GPU).

Protocole
OpenAI Responses
Prise en charge
Modèles locaux uniquement

Modèles locaux uniquement. Codex ne prend en charge que la Responses API ; le warden traduit POST /v1/responses en Chat Completions pour le modèle servi, si bien que la réponse, les appels d’outils et la consommation parviennent à Codex sous forme d’événements Responses. La traduction est sans état : Codex envoie store:false et toute la conversation à chaque tour, et previous_response_id est refusé. La réflexion est activée par défaut (Codex demande des résumés de raisonnement et le raisonnement du modèle s’affiche sous forme de résumé ; pour la désactiver, définissez model_reasoning_effort = "none" dans config.toml), la recherche web hébergée est ignorée (définissez web_search = "disabled"), et les règles du routeur ne s’appliquent pas. Définissez model_context_window sur la fenêtre réelle du modèle : Codex suppose 272 k jetons pour les noms qu’il ne connaît pas. L’appel d’outils doit être activé dans le moteur (vLLM : --enable-auto-tool-choice et un --tool-call-parser). Une requête pour un modèle non chargé reçoit une erreur 404, et Codex réessaie pendant plusieurs secondes avant d’abandonner.

Prérequis

  • Nécessite un modèle capable d’appeler des outils (modifications agentiques).
  • Fonctionne au mieux avec au moins 32 768 jetons de contexte.

Configuration

Dans la console, Connect génère ces fichiers avec l’adresse de votre warden, votre clé et le modèle choisi. Ils sont présentés ici avec des valeurs fictives.

Modèles locaux

Ajoutez LM Warden comme fournisseur de modèles dans ~/.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.
Shell
export LMWARDEN_KEY=vw_YOUR_KEY
codex exec "Reply with the single word OK."

Documentation officielle : https://learn.chatgpt.com/docs/config-file/config-reference (consultée le 2026-10-04).