1414"""LLM client class."""
1515
1616import datetime
17+ import itertools
1718import json
1819import logging
1920import os
@@ -317,7 +318,7 @@ def chat( # noqa: D417
317318 name = model , teamspace = self ._teamspace , enable_async = self ._enable_async
318319 )
319320 sdk_model = self ._sdkllm_cache [model_key ]
320- return self ._model_call (
321+ response = self ._model_call (
321322 model = sdk_model ,
322323 prompt = prompt ,
323324 system_prompt = system_prompt ,
@@ -332,6 +333,24 @@ def chat( # noqa: D417
332333 reasoning_effort = reasoning_effort ,
333334 ** kwargs ,
334335 )
336+ if not stream and response :
337+ return response
338+ if stream :
339+ peek_iter , return_iter = itertools .tee (response )
340+ try :
341+ peek_iter , return_iter = itertools .tee (response )
342+ has_content = False
343+
344+ for chunk in peek_iter :
345+ if chunk != "" :
346+ has_content = True
347+ break
348+
349+ if has_content :
350+ return return_iter
351+ except StopIteration :
352+ pass
353+
335354 except Exception as e :
336355 print (f"💥 Failed to override with model '{ model } '" )
337356 handle_model_error (e , sdk_model , 0 , self .max_retries , self ._verbose )
@@ -357,16 +376,22 @@ def chat( # noqa: D417
357376 )
358377
359378 if not stream and response :
360- yield response
361- return
362- elif stream :
363- has_content = False
364- for chunk in response :
365- if chunk != "" :
366- has_content = True
367- yield chunk
368- if has_content :
369- return
379+ return response
380+ if stream :
381+ peek_iter , return_iter = itertools .tee (response )
382+ try :
383+ peek_iter , return_iter = itertools .tee (response )
384+ has_content = False
385+
386+ for chunk in peek_iter :
387+ if chunk != "" :
388+ has_content = True
389+ break
390+
391+ if has_content :
392+ return return_iter
393+ except StopIteration :
394+ pass
370395
371396 except Exception as e :
372397 handle_model_error (e , model , attempt , self .max_retries , self ._verbose )
0 commit comments