diff --git a/src/agents/model_settings.py b/src/agents/model_settings.py index f29cfa4a..ed9a0131 100644 --- a/src/agents/model_settings.py +++ b/src/agents/model_settings.py @@ -3,6 +3,7 @@ from dataclasses import dataclass, fields, replace from typing import Literal +from openai._types import Body, Query from openai.types.shared import Reasoning @@ -58,6 +59,14 @@ class ModelSettings: """Whether to include usage chunk. Defaults to True if not provided.""" + extra_query: Query | None = None + """Additional query fields to provide with the request. + Defaults to None if not provided.""" + + extra_body: Body | None = None + """Additional body fields to provide with the request. + Defaults to None if not provided.""" + 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.""" diff --git a/src/agents/models/openai_chatcompletions.py b/src/agents/models/openai_chatcompletions.py index 807c6512..267efcaf 100644 --- a/src/agents/models/openai_chatcompletions.py +++ b/src/agents/models/openai_chatcompletions.py @@ -540,6 +540,8 @@ async def _fetch_response( store=self._non_null_or_not_given(store), reasoning_effort=self._non_null_or_not_given(reasoning_effort), extra_headers=_HEADERS, + extra_query=model_settings.extra_query, + extra_body=model_settings.extra_body, metadata=self._non_null_or_not_given(model_settings.metadata), ) diff --git a/src/agents/models/openai_responses.py b/src/agents/models/openai_responses.py index 06828884..cb5a603f 100644 --- a/src/agents/models/openai_responses.py +++ b/src/agents/models/openai_responses.py @@ -245,6 +245,8 @@ async def _fetch_response( parallel_tool_calls=parallel_tool_calls, stream=stream, extra_headers=_HEADERS, + extra_query=model_settings.extra_query, + extra_body=model_settings.extra_body, text=response_format, store=self._non_null_or_not_given(model_settings.store), reasoning=self._non_null_or_not_given(model_settings.reasoning),