diff --git a/src/agents/model_settings.py b/src/agents/model_settings.py index cc4b6cb6..463104a1 100644 --- a/src/agents/model_settings.py +++ b/src/agents/model_settings.py @@ -39,6 +39,9 @@ class ModelSettings: max_tokens: int | None = None """The maximum number of output tokens to generate.""" + reasoning_effort: Literal["low", "medium", "high"] | None = None + """The level of reasoning effort to use. Applies to OpenAI models.""" + def resolve(self, override: ModelSettings | None) -> ModelSettings: """Produce a new ModelSettings by overlaying any non-None values from the override on top of this instance.""" @@ -53,4 +56,5 @@ def resolve(self, override: ModelSettings | None) -> ModelSettings: parallel_tool_calls=override.parallel_tool_calls or self.parallel_tool_calls, truncation=override.truncation or self.truncation, max_tokens=override.max_tokens or self.max_tokens, + reasoning_effort=override.reasoning_effort or self.reasoning_effort, ) diff --git a/src/agents/models/openai_chatcompletions.py b/src/agents/models/openai_chatcompletions.py index 3543225d..b00f6d7b 100644 --- a/src/agents/models/openai_chatcompletions.py +++ b/src/agents/models/openai_chatcompletions.py @@ -525,6 +525,7 @@ async def _fetch_response( tool_choice=tool_choice, response_format=response_format, parallel_tool_calls=parallel_tool_calls, + reasoning_effort=self._non_null_or_not_given(model_settings.reasoning_effort), stream=stream, stream_options={"include_usage": True} if stream else NOT_GIVEN, extra_headers=_HEADERS, @@ -544,6 +545,7 @@ async def _fetch_response( else "auto", top_p=model_settings.top_p, temperature=model_settings.temperature, + reasoning_effort=model_settings.reasoning_effort, tools=[], parallel_tool_calls=parallel_tool_calls or False, ) diff --git a/src/agents/models/openai_responses.py b/src/agents/models/openai_responses.py index 78765ecb..00562f93 100644 --- a/src/agents/models/openai_responses.py +++ b/src/agents/models/openai_responses.py @@ -237,6 +237,7 @@ async def _fetch_response( top_p=self._non_null_or_not_given(model_settings.top_p), truncation=self._non_null_or_not_given(model_settings.truncation), max_output_tokens=self._non_null_or_not_given(model_settings.max_tokens), + reasoning_effort=self._non_null_or_not_given(model_settings.reasoning_effort), tool_choice=tool_choice, parallel_tool_calls=parallel_tool_calls, stream=stream,