@@ -421,27 +421,39 @@ def _handle_stream_response(self, chat_completion: Stream, callback: SyncStreami
421
421
chunks : List [StreamingChunk ] = []
422
422
chunk = None
423
423
chunk_delta : StreamingChunk
424
+ last_chunk : Optional [ChatCompletionChunk ] = None
424
425
425
426
for chunk in chat_completion : # pylint: disable=not-an-iterable
426
427
assert len (chunk .choices ) <= 1 , "Streaming responses should have at most one choice."
427
428
chunk_delta = self ._convert_chat_completion_chunk_to_streaming_chunk (chunk )
428
429
chunks .append (chunk_delta )
429
430
callback (chunk_delta )
430
- return [self ._convert_streaming_chunks_to_chat_message (chunk , chunks )]
431
+ last_chunk = chunk
432
+
433
+ if not last_chunk :
434
+ raise ValueError ("No chunks received from the stream" )
435
+
436
+ return [self ._convert_streaming_chunks_to_chat_message (last_chunk , chunks )]
431
437
432
438
async def _handle_async_stream_response (
433
439
self , chat_completion : AsyncStream , callback : AsyncStreamingCallbackT
434
440
) -> List [ChatMessage ]:
435
441
chunks : List [StreamingChunk ] = []
436
442
chunk = None
437
443
chunk_delta : StreamingChunk
444
+ last_chunk : Optional [ChatCompletionChunk ] = None
438
445
439
446
async for chunk in chat_completion : # pylint: disable=not-an-iterable
440
447
assert len (chunk .choices ) <= 1 , "Streaming responses should have at most one choice."
441
448
chunk_delta = self ._convert_chat_completion_chunk_to_streaming_chunk (chunk )
442
449
chunks .append (chunk_delta )
443
450
await callback (chunk_delta )
444
- return [self ._convert_streaming_chunks_to_chat_message (chunk , chunks )]
451
+ last_chunk = chunk
452
+
453
+ if not last_chunk :
454
+ raise ValueError ("No chunks received from the stream" )
455
+
456
+ return [self ._convert_streaming_chunks_to_chat_message (last_chunk , chunks )]
445
457
446
458
def _check_finish_reason (self , meta : Dict [str , Any ]) -> None :
447
459
if meta ["finish_reason" ] == "length" :
0 commit comments