Skip to content

Commit 3fe9528

Browse files
committed
add overwrite mechanism for stream_options
1 parent d089886 commit 3fe9528

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/agents/model_settings.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ class ModelSettings:
5454
"""Whether to store the generated model response for later retrieval.
5555
Defaults to True if not provided."""
5656

57+
include_usage: bool | None = None
58+
"""Whether to include usage chunk.
59+
Defaults to True if not provided."""
60+
5761
def resolve(self, override: ModelSettings | None) -> ModelSettings:
5862
"""Produce a new ModelSettings by overlaying any non-None values from the
5963
override on top of this instance."""

src/agents/models/openai_chatcompletions.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,8 @@ async def _fetch_response(
521521
reasoning_effort = model_settings.reasoning.effort if model_settings.reasoning else None
522522
store = _Converter.get_store_param(self._get_client(), model_settings)
523523

524+
stream_options = _Converter.get_stream_options_param(self._get_client(), model_settings)
525+
524526
ret = await self._get_client().chat.completions.create(
525527
model=self.model,
526528
messages=converted_messages,
@@ -534,7 +536,7 @@ async def _fetch_response(
534536
response_format=response_format,
535537
parallel_tool_calls=parallel_tool_calls,
536538
stream=stream,
537-
stream_options={"include_usage": True} if stream else NOT_GIVEN,
539+
stream_options=self._non_null_or_not_given(stream_options),
538540
store=self._non_null_or_not_given(store),
539541
reasoning_effort=self._non_null_or_not_given(reasoning_effort),
540542
extra_headers=_HEADERS,
@@ -574,6 +576,14 @@ def get_store_param(cls, client: AsyncOpenAI, model_settings: ModelSettings) ->
574576
default_store = True if str(client.base_url).startswith("https://api.openai.com") else None
575577
return model_settings.store if model_settings.store is not None else default_store
576578

579+
@classmethod
580+
def get_stream_options_param(cls, client: AsyncOpenAI, model_settings: ModelSettings) -> dict | None:
581+
default_include_usage = True if str(client.base_url).startswith("https://api.openai.com") else None
582+
include_usage = model_settings.include_usage if model_settings.include_usage is not None \
583+
else default_include_usage
584+
stream_options = {"include_usage": include_usage} if include_usage is not None else NOT_GIVEN
585+
return stream_options
586+
577587
@classmethod
578588
def convert_tool_choice(
579589
cls, tool_choice: Literal["auto", "required", "none"] | str | None

0 commit comments

Comments
 (0)