Skip to content

Commit 31f1e64

Browse files
feat: add OpenAI Responses API model implementation (#975)
Co-authored-by: Strands Agent <217235299+strands-agent@users.noreply.github.com>
1 parent 3625d7d commit 31f1e64

File tree

7 files changed

+1685
-21
lines changed

7 files changed

+1685
-21
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ Built-in providers:
179179
- [MistralAI](https://strandsagents.com/latest/user-guide/concepts/model-providers/mistral/)
180180
- [Ollama](https://strandsagents.com/latest/user-guide/concepts/model-providers/ollama/)
181181
- [OpenAI](https://strandsagents.com/latest/user-guide/concepts/model-providers/openai/)
182+
- [OpenAI Responses API](https://strandsagents.com/latest/user-guide/concepts/model-providers/openai/)
182183
- [SageMaker](https://strandsagents.com/latest/user-guide/concepts/model-providers/sagemaker/)
183184
- [Writer](https://strandsagents.com/latest/user-guide/concepts/model-providers/writer/)
184185

src/strands/models/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ def __getattr__(name: str) -> Any:
5555
from .openai import OpenAIModel
5656

5757
return OpenAIModel
58+
if name == "OpenAIResponsesModel":
59+
from .openai_responses import OpenAIResponsesModel
60+
61+
return OpenAIResponsesModel
5862
if name == "SageMakerAIModel":
5963
from .sagemaker import SageMakerAIModel
6064

src/strands/models/openai_responses.py

Lines changed: 691 additions & 0 deletions
Large diffs are not rendered by default.

tests/strands/models/conftest.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"""Pytest configuration for model tests."""
2+
3+
import sys
4+
import unittest.mock
5+
6+
# Mock OpenAI version check before the openai_responses module is imported.
7+
# This is necessary because the version check happens at module import time.
8+
# We patch importlib.metadata.version directly since that's where get_package_version comes from.
9+
if "strands.models.openai_responses" not in sys.modules:
10+
_original_version = None
11+
try:
12+
from importlib.metadata import version as _original_version_func
13+
14+
_original_version = _original_version_func
15+
except ImportError:
16+
pass
17+
18+
def _mock_version(package_name: str) -> str:
19+
if package_name == "openai":
20+
return "2.0.0"
21+
if _original_version:
22+
return _original_version(package_name)
23+
raise Exception(f"Package {package_name} not found")
24+
25+
unittest.mock.patch("importlib.metadata.version", _mock_version).start()

0 commit comments

Comments
 (0)