# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 from .math_utils import extract_answer, grade_answer_mathd, grade_answer_sympy def get_deepscaler_rule_based_reward(response, label): if "" in response: model_solution = response.split("")[-1] elif "###Response" in response: model_solution = response.split("###Response")[1] else: return 0 model_answer = extract_answer(model_solution) if model_answer is None: return 0 if label == "": return 0 # Convert single answer to list for uniform processing assert isinstance(label, (str, float, int)) ground_truths = [label] # Process each ground truth processed_ground_truths = [] for truth in ground_truths: truth = str(truth) if "\\boxed" in truth: processed_truth = extract_answer(truth) if processed_truth is not None: processed_ground_truths.append(processed_truth) else: processed_ground_truths.append(truth) if not processed_ground_truths: return 0 # Check against all possible correct answers for ground_truth in processed_ground_truths: is_correct = grade_answer_mathd(model_answer, ground_truth) or grade_answer_sympy(model_answer, ground_truth) if is_correct: return 1 return 0