Skip to content

Commit 896f78f

Browse files
committed
which-model: expand codex catalog seed
1 parent 8c4417e commit 896f78f

2 files changed

Lines changed: 168 additions & 0 deletions

File tree

skills/which-model/bin/model-catalog

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,146 @@ ENV_SEEDS = {
8787
"caveats": ["Reserve for work where judgment quality clears the cost."],
8888
"confidence": "seeded",
8989
},
90+
{
91+
"id": "gpt-5.5",
92+
"display_name": "GPT-5.5",
93+
"provider": "openai",
94+
"availability": "selectable_here",
95+
"input_price_per_mtok": 5.0,
96+
"output_price_per_mtok": 30.0,
97+
"context_window": 1_050_000,
98+
"max_output": 128_000,
99+
"capabilities": ["text", "image_input", "code", "tools", "reasoning"],
100+
"task_fit": ["routine_coding", "long_context_review", "planning", "final_synthesis"],
101+
"caveats": ["Prefer GPT-5.6 Sol unless a GPT-5.5-specific baseline is required."],
102+
"confidence": "seeded",
103+
},
104+
{
105+
"id": "gpt-5.5-pro",
106+
"display_name": "GPT-5.5 Pro",
107+
"provider": "openai",
108+
"availability": "selectable_here",
109+
"input_price_per_mtok": 30.0,
110+
"output_price_per_mtok": 180.0,
111+
"context_window": 1_050_000,
112+
"max_output": 128_000,
113+
"capabilities": ["text", "image_input", "code", "tools", "reasoning"],
114+
"task_fit": ["final_synthesis", "large_refactor"],
115+
"caveats": ["Premium slow lane; reserve for hard problems where extra compute is justified."],
116+
"confidence": "seeded",
117+
},
118+
{
119+
"id": "gpt-5.4",
120+
"display_name": "GPT-5.4",
121+
"provider": "openai",
122+
"availability": "selectable_here",
123+
"input_price_per_mtok": 2.5,
124+
"output_price_per_mtok": 15.0,
125+
"context_window": 1_050_000,
126+
"max_output": 128_000,
127+
"capabilities": ["text", "image_input", "code", "tools", "reasoning"],
128+
"task_fit": ["routine_coding", "long_context_review", "planning"],
129+
"caveats": ["Older affordable frontier lane; compare against GPT-5.6 Terra first."],
130+
"confidence": "seeded",
131+
},
132+
{
133+
"id": "gpt-5.4-pro",
134+
"display_name": "GPT-5.4 Pro",
135+
"provider": "openai",
136+
"availability": "selectable_here",
137+
"input_price_per_mtok": 30.0,
138+
"output_price_per_mtok": 180.0,
139+
"context_window": 1_050_000,
140+
"max_output": 128_000,
141+
"capabilities": ["text", "image_input", "code", "tools", "reasoning"],
142+
"task_fit": ["final_synthesis", "large_refactor"],
143+
"caveats": ["Older premium slow lane; prefer newer premium lanes unless reproducing history."],
144+
"confidence": "seeded",
145+
},
146+
{
147+
"id": "gpt-5.4-mini",
148+
"display_name": "GPT-5.4 mini",
149+
"provider": "openai",
150+
"availability": "selectable_here",
151+
"input_price_per_mtok": 0.75,
152+
"output_price_per_mtok": 4.5,
153+
"context_window": 400_000,
154+
"max_output": 128_000,
155+
"capabilities": ["text", "image_input", "code", "tools", "reasoning"],
156+
"task_fit": ["mechanical_search", "routine_coding", "cheap_parallel_voter"],
157+
"caveats": ["Good low-cost coding/subagent lane when GPT-5.6 Luna is unavailable."],
158+
"confidence": "seeded",
159+
},
160+
{
161+
"id": "gpt-5.4-nano",
162+
"display_name": "GPT-5.4 nano",
163+
"provider": "openai",
164+
"availability": "selectable_here",
165+
"input_price_per_mtok": 0.2,
166+
"output_price_per_mtok": 1.25,
167+
"context_window": 400_000,
168+
"max_output": 128_000,
169+
"capabilities": ["text", "image_input", "code", "tools", "reasoning"],
170+
"task_fit": ["mechanical_search", "cheap_parallel_voter"],
171+
"caveats": ["Best for simple classification, extraction, ranking, and cheap subagents."],
172+
"confidence": "seeded",
173+
},
174+
{
175+
"id": "gpt-5.3-codex",
176+
"display_name": "GPT-5.3-Codex",
177+
"provider": "openai",
178+
"availability": "selectable_here",
179+
"input_price_per_mtok": 1.75,
180+
"output_price_per_mtok": 14.0,
181+
"context_window": 400_000,
182+
"max_output": 128_000,
183+
"capabilities": ["text", "image_input", "code", "tools", "reasoning"],
184+
"task_fit": ["routine_coding", "large_refactor", "agentic_workflow"],
185+
"caveats": ["Codex-optimized coding lane; compare against newer GPT-5.6 lanes."],
186+
"confidence": "seeded",
187+
},
188+
{
189+
"id": "gpt-5-codex",
190+
"display_name": "GPT-5-Codex",
191+
"provider": "openai",
192+
"availability": "selectable_here",
193+
"input_price_per_mtok": 1.25,
194+
"output_price_per_mtok": 10.0,
195+
"context_window": 400_000,
196+
"max_output": 128_000,
197+
"capabilities": ["text", "image_input", "code", "tools", "reasoning"],
198+
"task_fit": ["routine_coding", "agentic_workflow"],
199+
"caveats": ["Older Codex-optimized lane; keep for compatibility and historical comparisons."],
200+
"confidence": "seeded",
201+
},
202+
{
203+
"id": "gpt-5-mini",
204+
"display_name": "GPT-5 mini",
205+
"provider": "openai",
206+
"availability": "selectable_here",
207+
"input_price_per_mtok": 0.25,
208+
"output_price_per_mtok": 2.0,
209+
"context_window": 400_000,
210+
"max_output": 128_000,
211+
"capabilities": ["text", "image_input", "code", "tools", "reasoning"],
212+
"task_fit": ["mechanical_search", "routine_coding", "cheap_parallel_voter"],
213+
"caveats": ["Older low-cost GPT-5 lane; prefer newer small lanes when available."],
214+
"confidence": "seeded",
215+
},
216+
{
217+
"id": "gpt-5-nano",
218+
"display_name": "GPT-5 nano",
219+
"provider": "openai",
220+
"availability": "selectable_here",
221+
"input_price_per_mtok": 0.05,
222+
"output_price_per_mtok": 0.4,
223+
"context_window": 400_000,
224+
"max_output": 128_000,
225+
"capabilities": ["text", "image_input", "code", "tools", "reasoning"],
226+
"task_fit": ["mechanical_search", "cheap_parallel_voter"],
227+
"caveats": ["Cheapest older GPT-5 lane for simple high-volume tasks."],
228+
"confidence": "seeded",
229+
},
90230
],
91231
"claude": [
92232
{

tests/run.sh

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,34 @@ assert len(catalog["models"]) == 2
293293
assert payload["recommendations"][0]["id"] == "openai/reason-pro"
294294
PY
295295
then ok "which-model catalog warms env cache"; else fail "which-model catalog warms env cache"; fi
296+
catalog_json=$(
297+
WHICH_MODEL_CACHE_HOME="$catalog_home/cache" \
298+
WHICH_MODEL_OFFLINE=1 \
299+
skills/which-model/bin/model-catalog --env codex --force-refresh --task routine_coding --top 3
300+
)
301+
if python3 - "$catalog_json" <<'PY'
302+
import json
303+
import sys
304+
305+
payload = json.loads(sys.argv[1])
306+
ids = {model["id"] for model in payload["catalog"]["models"]}
307+
required = {
308+
"gpt-5.6-luna",
309+
"gpt-5.6-terra",
310+
"gpt-5.6-sol",
311+
"gpt-5.5",
312+
"gpt-5.5-pro",
313+
"gpt-5.4",
314+
"gpt-5.4-mini",
315+
"gpt-5.4-nano",
316+
"gpt-5.3-codex",
317+
"gpt-5-codex",
318+
}
319+
missing = sorted(required - ids)
320+
if missing:
321+
raise SystemExit("missing codex seed models: " + ", ".join(missing))
322+
PY
323+
then ok "which-model codex seed covers older lanes"; else fail "which-model codex seed covers older lanes"; fi
296324
rm -rf "$catalog_home"
297325

298326
local quiet_home quiet_out

0 commit comments

Comments
 (0)