diff --git a/src/agents/model_settings.py b/src/agents/model_settings.py index bef7b9a6..bac71f58 100644 --- a/src/agents/model_settings.py +++ b/src/agents/model_settings.py @@ -3,6 +3,8 @@ from dataclasses import dataclass, fields, replace from typing import Literal +from openai.types.shared import Reasoning + @dataclass class ModelSettings: @@ -40,6 +42,11 @@ class ModelSettings: max_tokens: int | None = None """The maximum number of output tokens to generate.""" + reasoning: Reasoning | None = None + """Configuration options for + [reasoning models](https://platform.openai.com/docs/guides/reasoning). + """ + metadata: dict[str, str] | None = None """Metadata to include with the model response call.""" diff --git a/src/agents/models/openai_chatcompletions.py b/src/agents/models/openai_chatcompletions.py index f90140bf..cbc48c50 100644 --- a/src/agents/models/openai_chatcompletions.py +++ b/src/agents/models/openai_chatcompletions.py @@ -521,6 +521,8 @@ async def _fetch_response( # Match the behavior of Responses where store is True when not given store = model_settings.store if model_settings.store is not None else True + reasoning_effort = model_settings.reasoning.effort if model_settings.reasoning else None + ret = await self._get_client().chat.completions.create( model=self.model, messages=converted_messages, @@ -536,6 +538,7 @@ async def _fetch_response( stream=stream, stream_options={"include_usage": True} if stream else NOT_GIVEN, store=store, + reasoning_effort=self._non_null_or_not_given(reasoning_effort), extra_headers=_HEADERS, metadata=model_settings.metadata, ) @@ -556,6 +559,7 @@ async def _fetch_response( temperature=model_settings.temperature, tools=[], parallel_tool_calls=parallel_tool_calls or False, + reasoning=model_settings.reasoning, ) return response, ret diff --git a/src/agents/models/openai_responses.py b/src/agents/models/openai_responses.py index 0a153910..6fda4bb3 100644 --- a/src/agents/models/openai_responses.py +++ b/src/agents/models/openai_responses.py @@ -247,6 +247,7 @@ async def _fetch_response( extra_headers=_HEADERS, text=response_format, store=self._non_null_or_not_given(model_settings.store), + reasoning=self._non_null_or_not_given(model_settings.reasoning), metadata=model_settings.metadata, )