@@ -521,6 +521,8 @@ async def _fetch_response(
521
521
reasoning_effort = model_settings .reasoning .effort if model_settings .reasoning else None
522
522
store = _Converter .get_store_param (self ._get_client (), model_settings )
523
523
524
+ stream_options = _Converter .get_stream_options_param (self ._get_client (), model_settings )
525
+
524
526
ret = await self ._get_client ().chat .completions .create (
525
527
model = self .model ,
526
528
messages = converted_messages ,
@@ -534,7 +536,7 @@ async def _fetch_response(
534
536
response_format = response_format ,
535
537
parallel_tool_calls = parallel_tool_calls ,
536
538
stream = stream ,
537
- stream_options = { "include_usage" : True } if stream else NOT_GIVEN ,
539
+ stream_options = self . _non_null_or_not_given ( stream_options ) ,
538
540
store = self ._non_null_or_not_given (store ),
539
541
reasoning_effort = self ._non_null_or_not_given (reasoning_effort ),
540
542
extra_headers = _HEADERS ,
@@ -568,12 +570,27 @@ def _get_client(self) -> AsyncOpenAI:
568
570
569
571
570
572
class _Converter :
573
+
574
+ @classmethod
575
+ def is_openai (cls , client : AsyncOpenAI ):
576
+ return str (client .base_url ).startswith ("https://api.openai.com" )
577
+
571
578
@classmethod
572
579
def get_store_param (cls , client : AsyncOpenAI , model_settings : ModelSettings ) -> bool | None :
573
580
# Match the behavior of Responses where store is True when not given
574
- default_store = True if str ( client . base_url ). startswith ( "https://api.openai.com" ) else None
581
+ default_store = True if cls . is_openai ( client ) else None
575
582
return model_settings .store if model_settings .store is not None else default_store
576
583
584
+ @classmethod
585
+ def get_stream_options_param (
586
+ cls , client : AsyncOpenAI , model_settings : ModelSettings
587
+ ) -> dict [str , bool ] | None :
588
+ default_include_usage = True if cls .is_openai (client ) else None
589
+ include_usage = model_settings .include_usage if model_settings .include_usage is not None \
590
+ else default_include_usage
591
+ stream_options = {"include_usage" : include_usage } if include_usage is not None else None
592
+ return stream_options
593
+
577
594
@classmethod
578
595
def convert_tool_choice (
579
596
cls , tool_choice : Literal ["auto" , "required" , "none" ] | str | None
0 commit comments