1919from modelgauge .retry_decorator import retry
2020from modelgauge .secret_values import InjectSecret
2121from modelgauge .sut import REFUSAL_RESPONSE , PromptResponseSUT , SUTOptions , SUTResponse # usort: skip
22+ from modelgauge .sut_capabilities import AcceptsTextPrompt
23+ from modelgauge .sut_decorator import modelgauge_sut
24+ from modelgauge .sut_registry import SUTS
2225from modelgauge .suts .google_generativeai import (
2326 GOOGLE_REFUSAL_FINISH_REASONS ,
2427 GoogleAiApiKey ,
2528) # Both SDKs use the same API key.
26- from modelgauge .sut_capabilities import AcceptsTextPrompt
27- from modelgauge .sut_decorator import modelgauge_sut
28- from modelgauge .sut_registry import SUTS
2929
3030
3131class GenAiRequest (BaseModel ):
@@ -76,16 +76,13 @@ def evaluate(self, request: GenAiRequest) -> GenerateContentResponse:
7676 return self .client .models .generate_content (** request .model_dump (exclude_none = True ))
7777
7878 def translate_response (self , request : GenAiRequest , response : GenerateContentResponse ) -> SUTResponse :
79- assert (
80- len (response .candidates ) <= 1
81- ), f"Expected a single candidate in the response, got { len (response .candidates )} ."
82- if len (response .candidates ) == 0 :
79+ if response .candidates is None or len (response .candidates ) == 0 :
8380 # This is apparently a refusal. At least, it's what happens consistently with a set of
8481 # prompts in the CSE, SRC, and SXC hazards
8582 response_text = REFUSAL_RESPONSE
86- else :
83+ elif len ( response . candidates ) == 1 :
8784 candidate = response .candidates [0 ]
88- if candidate .finish_reason in GOOGLE_REFUSAL_FINISH_REASONS :
85+ if candidate .finish_reason in GOOGLE_REFUSAL_FINISH_REASONS + [ "OTHER" ] :
8986 response_text = REFUSAL_RESPONSE
9087 elif candidate .content is not None :
9188 response_text = candidate .content .parts [0 ].text
@@ -95,7 +92,8 @@ def translate_response(self, request: GenAiRequest, response: GenerateContentRes
9592 f"The candidate does not have any content,"
9693 f" but it's finish reason { candidate .finish_reason } does not qualify as a refusal."
9794 )
98-
95+ else :
96+ raise AssertionError (f"Expected a single candidate in the response, got { response .candidates } ." )
9997 return SUTResponse (text = response_text )
10098
10199
0 commit comments