diff --git a/langextract/providers/patterns.py b/langextract/providers/patterns.py index 9fd18cab..40d8912a 100644 --- a/langextract/providers/patterns.py +++ b/langextract/providers/patterns.py @@ -24,10 +24,12 @@ # OpenAI provider patterns OPENAI_PATTERNS = ( + r'^gpt-3\.5', r'^gpt-4', r'^gpt4\.', r'^gpt-5', r'^gpt5\.', + r'^o[1-9]', ) OPENAI_PRIORITY = 10 diff --git a/tests/registry_test.py b/tests/registry_test.py index fa907067..c3563296 100644 --- a/tests/registry_test.py +++ b/tests/registry_test.py @@ -29,6 +29,7 @@ from langextract.core import base_model from langextract.core import types from langextract.providers import builtin_registry +from langextract.providers import patterns from langextract.providers import router @@ -88,6 +89,14 @@ def test_multiple_patterns(self): self.assertEqual(router.resolve("gemini-pro"), FakeProvider) self.assertEqual(router.resolve("palm-2"), FakeProvider) + def test_openai_patterns_include_reasoning_and_gpt_3_5_models(self): + """OpenAI reasoning and GPT-3.5 model IDs resolve automatically.""" + router.register(*patterns.OPENAI_PATTERNS)(FakeProvider) + + for model_id in ("o1", "o3-mini", "o4-mini", "gpt-3.5-turbo"): + with self.subTest(model_id=model_id): + self.assertEqual(router.resolve(model_id), FakeProvider) + def test_priority_resolution(self): """Test that higher priority wins on conflicts.""" # Use direct registration to avoid module path issues in Bazel