chore(models): move the opus alias to claude-opus-5

Claude Opus 5 released today — same $5/$25 sticker, 1M context; Opus 4.8
moves to legacy. The pricing table gains a dedicated claude-opus-5
fragment (the claude-opus-4 substring doesn't cover it, so without the
row the fleet's Opus usage would silently cost-track as $0 — exactly
what test_opus_is_priced now guards).
This commit is contained in:
Renn F
2026-07-25 00:41:13 +02:00
parent 9b407d764d
commit 3c87596685
17 changed files with 29 additions and 26 deletions
+1 -1
View File
@@ -106,7 +106,7 @@ def test_build_anthropic_entries_skips_missing_models() -> None:
# Patch MODEL_MAP to be missing one entry → loop hits the `continue` branch.
with patch(
"roboco.models.llm_catalog.MODEL_MAP",
{"opus": "claude-opus-4-8"}, # sonnet+haiku missing
{"opus": "claude-opus-5"}, # sonnet+haiku missing
):
entries = _build_anthropic_entries()
# Only one entry survives — opus.
+3 -4
View File
@@ -12,10 +12,9 @@ def test_sonnet_alias_resolves_to_sonnet_5() -> None:
assert MODEL_MAP["sonnet"] == "claude-sonnet-5"
def test_opus_alias_resolves_to_opus_4_8() -> None:
# CEO upgrade to the newest Opus tier ("Opus 5" does not exist — the
# Claude 5 family is Fable/Mythos/Sonnet; Opus tops out at 4.8).
assert MODEL_MAP["opus"] == "claude-opus-4-8"
def test_opus_alias_resolves_to_opus_5() -> None:
# CEO upgrade to the newest Opus tier (Opus 5, released 2026-07-25).
assert MODEL_MAP["opus"] == "claude-opus-5"
def test_sonnet_5_is_priced() -> None: