abrar6024's picture
Upload folder using huggingface_hub
7547b3b verified
Raw
History Blame Contribute Delete
2.36 kB
"""
grader.py β€” Reward function for Task 1: Prompt Sensitivity Detection
Scoring (total 1.0):
0.50 β€” verdict correctness
0.25 β€” sensitive_variant_index accuracy
0.15 β€” confidence calibration
0.10 β€” explanation quality
"""
from __future__ import annotations
from typing import Any, Dict, Tuple
def grade_sensitivity(action: Any, scenario: Dict) -> Tuple[float, Dict]:
verdict = str(getattr(action, "verdict", "")).strip().lower()
confidence = float(getattr(action, "confidence", 0.0))
explanation = str(getattr(action, "explanation", ""))
sens_idx = getattr(action, "sensitive_variant_index", None)
ground_truth = scenario["ground_truth"]
gt_index = scenario["sensitive_index"]
reward = 0.0
breakdown = {}
# 1. Verdict (0.50)
if verdict == ground_truth:
reward += 0.50
breakdown["verdict"] = 0.50
elif verdict == "partial" and ground_truth == "sensitive":
reward += 0.20
breakdown["verdict"] = 0.20
else:
breakdown["verdict"] = 0.0
# 2. Sensitive index (0.25)
if ground_truth == "sensitive":
if sens_idx is not None and int(sens_idx) == gt_index:
reward += 0.25
breakdown["sensitive_index"] = 0.25
else:
breakdown["sensitive_index"] = 0.0
else:
if sens_idx is None or int(sens_idx) == -1:
reward += 0.25
breakdown["sensitive_index"] = 0.25
else:
breakdown["sensitive_index"] = 0.0
# 3. Confidence calibration (0.15)
confidence = max(0.0, min(1.0, confidence))
verdict_correct = breakdown["verdict"] >= 0.50
if verdict_correct:
reward += 0.15 if confidence >= 0.6 else round(confidence / 0.6 * 0.15, 3)
breakdown["confidence"] = 0.15 if confidence >= 0.6 else round(confidence / 0.6 * 0.15, 3)
else:
penalty = -0.05 if confidence > 0.8 else 0.0
reward += penalty
breakdown["confidence"] = penalty
# 4. Explanation quality (0.10)
if len(explanation.strip()) >= 20:
reward += 0.10
breakdown["explanation"] = 0.10
else:
breakdown["explanation"] = 0.0
reward = round(max(0.0, min(1.0, reward)), 4)
return reward, {"reward": reward, "breakdown": breakdown}