From 2e8644b41190e00e205495827fc5e68705411ffa Mon Sep 17 00:00:00 2001 From: vominh1919 Date: Fri, 8 May 2026 10:29:56 +0700 Subject: [PATCH] fix: guard against None content in JudgeRubric judge response When the judge model returns tool_calls or a refusal, message.content is None. The previous code did str(None) which produced the string "None", causing the judge to silently score the literal string "None" instead of raising an error. Now raises RuntimeError with a clear message when content is None, so the caller can handle the failure appropriately. --- verifiers/rubrics/judge_rubric.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/verifiers/rubrics/judge_rubric.py b/verifiers/rubrics/judge_rubric.py index 9a8b73706..5b18678c9 100644 --- a/verifiers/rubrics/judge_rubric.py +++ b/verifiers/rubrics/judge_rubric.py @@ -95,7 +95,14 @@ async def judge( messages=[{"role": "user", "content": judge_prompt}], **judge_args, ) - judge_response = str(judge_response.choices[0].message.content) + content = judge_response.choices[0].message.content + if content is None: + raise RuntimeError( + f"Judge model returned None content. " + f"This usually means the model returned tool_calls or a refusal. " + f"Model: {self.judge_model}" + ) + judge_response = str(content) except RateLimitError as e: self.logger.warning( f"Rate limit exceeded when calling judge model '{self.judge_model}'. "