Codex preko LiteLLM¶
Codex CLI je OpenAI-jev terminalski coding
agent. Po defaultu se veže direktno na OpenAI (ChatGPT login ili OpenAI API
ključ). Kod nas ga umjesto toga vežemo na InfoPuls LiteLLM gateway
(gateway.infopuls.app) — isti gateway koji koriste hub MCP, stop hookovi i
ostali alati. Tako Codex koristi naše modele i jedan zajednički ključ, a
sve troškove vidimo centralno.
Šta dobijaš
- Jedan ključ za sve —
LITELLM_API_KEYumjesto zasebnog OpenAI logina - Centralni usage/trošak — svi pozivi prolaze kroz gateway i mjere se
- Bez ChatGPT logina —
codex login statussmije pisati Not logged in - Isti modeli kao ostatak tima —
chatgpt/gpt-5.5,chatgpt/gpt-5.4…
Kako to izgleda¶
flowchart LR
A[codex CLI] -->|wire_api: responses<br/>Bearer LITELLM_API_KEY| B[LiteLLM gateway<br/>gateway.infopuls.app/v1]
B --> C[chatgpt/gpt-5.5]
B --> D[chatgpt/gpt-5.4]
B --> E[chatgpt/gpt-5.3-codex]
Codex ne zna da je iza gatewaya LiteLLM — za njega je to običan OpenAI-kompatibilan provider. Gateway radi auth, routing i mjerenje.
Preduvjeti¶
codexCLI instaliran (testirano nacodex-cli 0.135.0; treba 0.133+)LITELLM_API_KEY— tvoj lični LiteLLM ključ (sk-…). Ako ga nemaš, uzmi ga iz Infisical-a ili traži od admina. Ne dijeli ga i ne commituj.
Radi na sva tri OS-a
Codex CLI radi nativno na macOS, Linux i Windows (PowerShell, sa
Windows sandboxom). Na Windowsu možeš i kroz WSL2 — ali tada WSL koristi
svoj ~/.codex, odvojen od native Windows configa (osim ako ne postaviš
CODEX_HOME na Windows putanju). Setup je isti; razlikuju se samo putanje
i kako se postavlja env varijabla — birај svoj OS u tabovima ispod.
Korak 1 — Ključ u okruženje¶
Codex čita ključ iz environment varijable (ne iz config fajla). Postavi
LITELLM_API_KEY trajno — odaberi svoj OS:
Dodaj u ~/.zshrc:
Pa reload i provjera:
Dodaj u ~/.bashrc (bash) ili ~/.zshrc (zsh):
Pa reload i provjera:
Postavi trajno (vrijedi za nove prozore):
Zatvori i otvori novi PowerShell, pa provjera:
setx vs $env: (i CMD)
setx upisuje trajno, ali tek za buduće prozore.
$env:LITELLM_API_KEY = "…" vrijedi samo za trenutnu sesiju.
U CMD-u je isto: setx LITELLM_API_KEY "…". Alternativno: System
Properties → Environment Variables → New (User variable).
Ključ ide u env, ne u config.toml
Nikad ne hardkoduj sk-… u config.toml. Config se može lako podijeliti ili
commitovati; ključ ostaje samo u tvom ~/.zshrc (ili Infisical/secret
manageru). U configu se referencira imenom varijable (env_key).
Korak 2 — Provider i model¶
🎯 Ovo je srž cijelog setupa
Sve se svodi na jedno: reći Codexu „ne idi na OpenAI, idi na naš LiteLLM
gateway“. To radi blok [model_providers.litellm] ispod. Profili, veliki
context, troubleshooting — sve ostalo na ovoj stranici je nadogradnja.
Bez ovih nekoliko linija Codex ne zna za naš gateway i ništa ne radi.
Codex config živi na različitim putanjama po OS-u:
| OS | Putanja do config.toml |
|---|---|
| macOS | ~/.codex/config.toml |
| Linux | ~/.codex/config.toml |
| Windows | %USERPROFILE%\.codex\config.toml → C:\Users\<ime>\.codex\config.toml |
Folder .codex možda ne postoji
Ako ga nema, kreiraj ga: mkdir ~/.codex (macOS/Linux) ili
mkdir $env:USERPROFILE\.codex (Windows PowerShell). Lokaciju možeš
promijeniti CODEX_HOME varijablom.
Otvori (ili kreiraj) taj config.toml i zalijepi ovo — identično na sve tri
platforme. Označene linije su ono što veže Codex na naš gateway:
# Default model i provider
model = "chatgpt/gpt-5.5"
model_provider = "litellm"
# ⬇ NAJBITNIJE: veže Codex na InfoPuls LiteLLM gateway (bez ovoga ide na OpenAI)
[model_providers.litellm]
name = "LiteLLM"
base_url = "https://gateway.infopuls.app/v1"
env_key = "LITELLM_API_KEY"
wire_api = "responses"
Šta koja linija radi:
| Polje | Vrijednost | Značenje |
|---|---|---|
model |
chatgpt/gpt-5.5 |
Default model (prefiks chatgpt/ je naziv na gatewayu) |
model_provider |
litellm |
Koji provider blok koristiti |
base_url |
…/v1 |
OpenAI-kompatibilan endpoint gatewaya — /v1 je obavezan |
env_key |
LITELLM_API_KEY |
Ime env varijable iz koje Codex čita ključ |
wire_api |
responses |
Wire format — gateway radi preko OpenAI Responses API-ja |
wire_api mora biti responses
Gateway servira chatgpt/* modele kroz Responses API. Ako izostaviš
wire_api ili staviš "chat", dobićeš greške pri pozivu. Drži "responses".
Korak 3 — Provjera¶
ili neinteraktivno:
Not logged in je očekivano
codex login status će vjerovatno pisati Not logged in — i to je u redu.
Mi ne koristimo OpenAI/ChatGPT login; autentikacija ide isključivo preko
LITELLM_API_KEY na gatewayu.
Dostupni modeli¶
Aktuelni chatgpt/* modeli na gatewayu. Listu uvijek možeš provjeriti uživo:
| Model (na gatewayu) | Context window | Namjena |
|---|---|---|
chatgpt/gpt-5.5 |
400k | Najjači agentic coding model — default |
chatgpt/gpt-5.4 |
1M | Veliki context (cijeli codebase, dugi taskovi) |
chatgpt/gpt-5.4-mini |
272k | Jeftiniji/brži za lakše taskove |
chatgpt/gpt-5.3-codex |
400k | Codex-specijalizovan |
chatgpt/gpt-5.3-codex-spark |
128k | Najlakši/najbrži (npr. za stop hook gate) |
Profili — brza promjena modela¶
Umjesto da mijenjaš model u configu svaki put, definiši profile pa biraj
preko --profile:
[profiles."gpt-5.4"]
model_provider = "litellm"
model = "chatgpt/gpt-5.4"
model_reasoning_effort = "xhigh"
[profiles."gpt-5.5"]
model_provider = "litellm"
model = "chatgpt/gpt-5.5"
model_reasoning_effort = "xhigh"
Korištenje:
codex --profile gpt-5.4 "Refaktoriši ovaj modul" # 1M context
codex --profile gpt-5.5 "Brzi fix" # default jačina
| Opcija | Vrijednost | Efekat |
|---|---|---|
model_reasoning_effort |
low → xhigh |
Dubina razmišljanja (više = sporije/skuplje, ali pametnije) |
service_tier |
fast |
Brži tier kad je dostupan |
personality |
pragmatic |
Stil odgovora agenta |
Napredno — veliki context window (models.json)¶
Codex po defaultu klampuje context window na vrijednost iz svog ugrađenog
kataloga, pa čak i ako model na gatewayu podržava 1M tokena, Codex ga može
ograničiti. Profile-scoped i top-level override ne rade pouzdano u trenutnim
verzijama (codex-cli issues #14456, #19185, #16068).
Pouzdano rješenje je custom katalog koji podiže max_context_window. Putanja
je opet OS-specifična:
U models.json se za chatgpt/gpt-5.4 (i ostale aliase) postavi željeni
max_context_window (npr. 1000000). Tada nije potreban nikakav dodatni
override u config.toml — Codex preuzme context iz kataloga.
Treba ti ovo samo ako gađaš puni context
Za svakodnevni rad default je sasvim dovoljan. Catalog override radi tek kad
namjerno hoćeš puni 1M context na gpt-5.4 za velike codebase taskove.
Veza s ostalim alatima¶
Isti LITELLM_API_KEY i isti gateway koriste i drugi dijelovi setupa:
- Stop Hooks — oba gate-a pozivaju
codexCLI preko ovog gatewaya. Kad ovo proradi, prorade i oni. - hub MCP — u
config.tomlse MCP serverhubautenticira istim ključem (x-litellm-api-key: Bearer sk-…). - Modeli — širi pregled modela i kad koji koristiti.
Troubleshooting¶
401 Unauthorized / invalid api key
LITELLM_API_KEY nije u okruženju tog shella, istekao je, ili je pogrešan.
Provjeri da je vidljiv u istom terminalu iz kojeg pokrećeš codex
(macOS/Linux: echo ${LITELLM_API_KEY:+ok}, Windows PowerShell:
$env:LITELLM_API_KEY). Ako si ga tek dodao: na macOS/Linux uradi
source ~/.zshrc (ili ~/.bashrc), a na Windowsu otvori novi PowerShell
(setx vrijedi tek za nove prozore).
model not found / nepoznat model
Naziv mora uključivati prefiks chatgpt/ (npr. chatgpt/gpt-5.5, ne samo
gpt-5.5). Listu provjeri sa curl …/v1/models.
Greške pri pozivu iako ključ radi
Skoro uvijek wire_api. Mora biti "responses" u [model_providers.litellm].
Context se i dalje siječe na manje od očekivanog
Codex klampuje na ugrađeni katalog. Postavi model_catalog_json i podigni
max_context_window u models.json (vidi sekciju iznad).
codex login status kaže Not logged in
To je očekivano i nije problem — ne koristimo OpenAI login, nego
LITELLM_API_KEY. Ignoriši poruku.