Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions langextract/providers/patterns.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
9 changes: 9 additions & 0 deletions tests/registry_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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
Expand Down