diff --git a/README.md b/README.md index 4486dd2..acf410f 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,7 @@ curl http://127.0.0.1:8000/v1/chat/completions \ ## Supported Models +- `gpt-5.5` - `gpt-5.4` - `gpt-5.4-mini` - `gpt-5.2` diff --git a/chatmock/model_registry.py b/chatmock/model_registry.py index 9bddbeb..1b97bc6 100644 --- a/chatmock/model_registry.py +++ b/chatmock/model_registry.py @@ -54,6 +54,13 @@ class ModelSpec: allowed_efforts=frozenset(("low", "medium", "high", "xhigh")), variant_efforts=("xhigh", "high", "medium", "low"), ), + ModelSpec( + public_id="gpt-5.5", + upstream_id="gpt-5.5", + aliases=("gpt5.5", "gpt-5.5-latest"), + allowed_efforts=frozenset(("none", "low", "medium", "high", "xhigh")), + variant_efforts=("xhigh", "high", "medium", "low", "none"), + ), ModelSpec( public_id="gpt-5.3-codex", upstream_id="gpt-5.3-codex", diff --git a/tests/test_models.py b/tests/test_models.py index e82b516..022cdd2 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -10,10 +10,12 @@ def test_normalizes_aliases(self) -> None: self.assertEqual(normalize_model_name("gpt5"), "gpt-5") self.assertEqual(normalize_model_name("gpt5.4"), "gpt-5.4") self.assertEqual(normalize_model_name("gpt5.4-mini"), "gpt-5.4-mini") + self.assertEqual(normalize_model_name("gpt5.5"), "gpt-5.5") self.assertEqual(normalize_model_name("gpt5.3-codex-spark"), "gpt-5.3-codex-spark") self.assertEqual(normalize_model_name("codex"), "codex-mini-latest") def test_strips_reasoning_suffixes(self) -> None: + self.assertEqual(normalize_model_name("gpt-5.5-high"), "gpt-5.5") self.assertEqual(normalize_model_name("gpt-5.4-high"), "gpt-5.4") self.assertEqual(normalize_model_name("gpt-5.4-mini-high"), "gpt-5.4-mini") self.assertEqual(normalize_model_name("gpt-5.2_codemirror"), "gpt-5.2_codemirror") @@ -21,15 +23,18 @@ def test_strips_reasoning_suffixes(self) -> None: self.assertEqual(normalize_model_name("gpt-5.1-codex:high"), "gpt-5.1-codex") def test_allowed_efforts_follow_registry(self) -> None: + self.assertEqual(allowed_efforts_for_model("gpt-5.5"), frozenset(("none", "low", "medium", "high", "xhigh"))) self.assertEqual(allowed_efforts_for_model("gpt-5.4"), frozenset(("none", "low", "medium", "high", "xhigh"))) self.assertEqual(allowed_efforts_for_model("gpt-5.4-mini"), frozenset(("low", "medium", "high", "xhigh"))) self.assertEqual(allowed_efforts_for_model("gpt-5.1-codex"), frozenset(("low", "medium", "high"))) def test_public_models_include_variants(self) -> None: model_ids = list_public_models(expose_reasoning_models=True) + self.assertIn("gpt-5.5", model_ids) self.assertIn("gpt-5.4", model_ids) self.assertIn("gpt-5.4-mini", model_ids) self.assertIn("gpt-5.3-codex-spark", model_ids) + self.assertIn("gpt-5.5-none", model_ids) self.assertIn("gpt-5.4-none", model_ids) self.assertIn("gpt-5.4-mini-xhigh", model_ids) self.assertNotIn("gpt-5.4-mini-none", model_ids)