@@ -540,6 +540,7 @@ async def test_text_success(get_gemini_client: GetGeminiClient):
540540 usage = Usage (requests = 1 , request_tokens = 1 , response_tokens = 2 , total_tokens = 3 , details = {}),
541541 model_name = 'gemini-1.5-flash-123' ,
542542 timestamp = IsNow (tz = timezone .utc ),
543+ vendor_details = {'finish_reason' : 'STOP' },
543544 ),
544545 ]
545546 )
@@ -555,13 +556,15 @@ async def test_text_success(get_gemini_client: GetGeminiClient):
555556 usage = Usage (requests = 1 , request_tokens = 1 , response_tokens = 2 , total_tokens = 3 , details = {}),
556557 model_name = 'gemini-1.5-flash-123' ,
557558 timestamp = IsNow (tz = timezone .utc ),
559+ vendor_details = {'finish_reason' : 'STOP' },
558560 ),
559561 ModelRequest (parts = [UserPromptPart (content = 'Hello' , timestamp = IsNow (tz = timezone .utc ))]),
560562 ModelResponse (
561563 parts = [TextPart (content = 'Hello world' )],
562564 usage = Usage (requests = 1 , request_tokens = 1 , response_tokens = 2 , total_tokens = 3 , details = {}),
563565 model_name = 'gemini-1.5-flash-123' ,
564566 timestamp = IsNow (tz = timezone .utc ),
567+ vendor_details = {'finish_reason' : 'STOP' },
565568 ),
566569 ]
567570 )
@@ -585,6 +588,7 @@ async def test_request_structured_response(get_gemini_client: GetGeminiClient):
585588 usage = Usage (requests = 1 , request_tokens = 1 , response_tokens = 2 , total_tokens = 3 , details = {}),
586589 model_name = 'gemini-1.5-flash-123' ,
587590 timestamp = IsNow (tz = timezone .utc ),
591+ vendor_details = {'finish_reason' : 'STOP' },
588592 ),
589593 ModelRequest (
590594 parts = [
@@ -647,6 +651,7 @@ async def get_location(loc_name: str) -> str:
647651 usage = Usage (requests = 1 , request_tokens = 1 , response_tokens = 2 , total_tokens = 3 , details = {}),
648652 model_name = 'gemini-1.5-flash-123' ,
649653 timestamp = IsNow (tz = timezone .utc ),
654+ vendor_details = {'finish_reason' : 'STOP' },
650655 ),
651656 ModelRequest (
652657 parts = [
@@ -666,6 +671,7 @@ async def get_location(loc_name: str) -> str:
666671 usage = Usage (requests = 1 , request_tokens = 1 , response_tokens = 2 , total_tokens = 3 , details = {}),
667672 model_name = 'gemini-1.5-flash-123' ,
668673 timestamp = IsNow (tz = timezone .utc ),
674+ vendor_details = {'finish_reason' : 'STOP' },
669675 ),
670676 ModelRequest (
671677 parts = [
@@ -688,6 +694,7 @@ async def get_location(loc_name: str) -> str:
688694 usage = Usage (requests = 1 , request_tokens = 1 , response_tokens = 2 , total_tokens = 3 , details = {}),
689695 model_name = 'gemini-1.5-flash-123' ,
690696 timestamp = IsNow (tz = timezone .utc ),
697+ vendor_details = {'finish_reason' : 'STOP' },
691698 ),
692699 ]
693700 )
@@ -1099,6 +1106,7 @@ async def get_image() -> BinaryContent:
10991106 usage = Usage (requests = 1 , request_tokens = 38 , response_tokens = 28 , total_tokens = 427 , details = {}),
11001107 model_name = 'gemini-2.5-pro-preview-03-25' ,
11011108 timestamp = IsDatetime (),
1109+ vendor_details = {'finish_reason' : 'STOP' },
11021110 ),
11031111 ModelRequest (
11041112 parts = [
@@ -1122,6 +1130,7 @@ async def get_image() -> BinaryContent:
11221130 usage = Usage (requests = 1 , request_tokens = 360 , response_tokens = 11 , total_tokens = 572 , details = {}),
11231131 model_name = 'gemini-2.5-pro-preview-03-25' ,
11241132 timestamp = IsDatetime (),
1133+ vendor_details = {'finish_reason' : 'STOP' },
11251134 ),
11261135 ]
11271136 )
@@ -1244,6 +1253,7 @@ async def test_gemini_model_instructions(allow_model_requests: None, gemini_api_
12441253 usage = Usage (requests = 1 , request_tokens = 13 , response_tokens = 8 , total_tokens = 21 , details = {}),
12451254 model_name = 'gemini-1.5-flash' ,
12461255 timestamp = IsDatetime (),
1256+ vendor_details = {'finish_reason' : 'STOP' },
12471257 ),
12481258 ]
12491259 )
@@ -1284,3 +1294,18 @@ async def get_temperature(location: dict[str, CurrentLocation]) -> float: # pra
12841294 assert result .output == snapshot (
12851295 'I need a location dictionary to use the `get_temperature` function. I cannot provide the temperature in Tokyo without more information.\n '
12861296 )
1297+
1298+
1299+ async def test_gemini_no_finish_reason (get_gemini_client : GetGeminiClient ):
1300+ response = gemini_response (
1301+ _content_model_response (ModelResponse (parts = [TextPart ('Hello world' )])), finish_reason = None
1302+ )
1303+ gemini_client = get_gemini_client (response )
1304+ m = GeminiModel ('gemini-1.5-flash' , provider = GoogleGLAProvider (http_client = gemini_client ))
1305+ agent = Agent (m )
1306+
1307+ result = await agent .run ('Hello World' )
1308+
1309+ for message in result .all_messages ():
1310+ if isinstance (message , ModelResponse ):
1311+ assert message .vendor_details is None
0 commit comments