@@ -390,8 +390,11 @@ def __init__(self, **kwargs):
390
390
391
391
@property
392
392
@set_doc (discuss_types .ChatResponse .last .__doc__ )
393
- def last (self ) -> str :
394
- return self .messages [- 1 ]["content" ]
393
+ def last (self ) -> Optional [str ]:
394
+ if self .messages [- 1 ]:
395
+ return self .messages [- 1 ]["content" ]
396
+ else :
397
+ return None
395
398
396
399
@last .setter
397
400
def last (self , message : discuss_types .MessageOptions ):
@@ -406,9 +409,14 @@ def reply(
406
409
raise TypeError (
407
410
f"reply can't be called on an async client, use reply_async instead."
408
411
)
412
+ if self .last is None :
413
+ raise ValueError ('The last response from the model did not return any candidates.\n '
414
+ 'Check the `.filters` attribute to see why the responses were filtered:\n '
415
+ f'{ self .filters } ' )
416
+
409
417
request = self .to_dict ()
410
418
request .pop ("candidates" )
411
- request .pop ("filters" )
419
+ request .pop ("filters" , None )
412
420
request ["messages" ] = list (request ["messages" ])
413
421
request ["messages" ].append (_make_message (message ))
414
422
request = _make_generate_message_request (** request )
@@ -424,6 +432,7 @@ async def reply_async(
424
432
)
425
433
request = self .to_dict ()
426
434
request .pop ("candidates" )
435
+ request .pop ("filters" )
427
436
request ["messages" ] = list (request ["messages" ])
428
437
request ["messages" ].append (_make_message (message ))
429
438
request = _make_generate_message_request (** request )
@@ -444,7 +453,11 @@ def _build_chat_response(
444
453
response = type (response ).to_dict (response )
445
454
response .pop ("messages" )
446
455
447
- request ["messages" ].append (response ["candidates" ][0 ])
456
+ if response ["candidates" ]:
457
+ last = response ["candidates" ][0 ]
458
+ else :
459
+ last = None
460
+ request ["messages" ].append (last )
448
461
request .setdefault ("temperature" , None )
449
462
request .setdefault ("candidate_count" , None )
450
463
0 commit comments