@@ -374,17 +374,18 @@ async def _build_content_and_config(
374
374
def _process_response (self , response : GenerateContentResponse ) -> ModelResponse :
375
375
if not response .candidates or len (response .candidates ) != 1 :
376
376
raise UnexpectedModelBehavior ('Expected exactly one candidate in Gemini response' ) # pragma: no cover
377
- if response .candidates [0 ].content is None or response .candidates [0 ].content .parts is None :
378
- if response .candidates [0 ].finish_reason == 'SAFETY' :
377
+ candidate = response .candidates [0 ]
378
+ if candidate .content is None or candidate .content .parts is None :
379
+ if candidate .finish_reason == 'SAFETY' :
379
380
raise UnexpectedModelBehavior ('Safety settings triggered' , str (response ))
380
381
else :
381
382
raise UnexpectedModelBehavior (
382
383
'Content field missing from Gemini response' , str (response )
383
384
) # pragma: no cover
384
- parts = response . candidates [ 0 ] .content .parts or []
385
+ parts = candidate .content .parts or []
385
386
vendor_id = response .response_id or None
386
387
vendor_details : dict [str , Any ] | None = None
387
- finish_reason = response . candidates [ 0 ] .finish_reason
388
+ finish_reason = candidate .finish_reason
388
389
if finish_reason : # pragma: no branch
389
390
vendor_details = {'finish_reason' : finish_reason .value }
390
391
usage = _metadata_as_usage (response )
@@ -526,8 +527,12 @@ async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]:
526
527
527
528
assert chunk .candidates is not None
528
529
candidate = chunk .candidates [0 ]
529
- if candidate .content is None :
530
- raise UnexpectedModelBehavior ('Streamed response has no content field' ) # pragma: no cover
530
+ if candidate .content is None or candidate .content .parts is None :
531
+ if candidate .finish_reason == 'SAFETY' : # pragma: no cover
532
+ raise UnexpectedModelBehavior ('Safety settings triggered' , str (chunk ))
533
+ else : # pragma: no cover
534
+ raise UnexpectedModelBehavior ('Content field missing from streaming Gemini response' , str (chunk ))
535
+
531
536
assert candidate .content .parts is not None
532
537
for part in candidate .content .parts :
533
538
if part .text is not None :
0 commit comments