For_Meta_Hackathon / graders.py
Muditsharmaaa's picture
fix: ensure task scores are strictly between 0 and 1 for Phase 2 validation
bece02c
Raw History Blame Contribute Delete
1.26 kB
from typing import List, Any
def _calculate_base_score(trajectory: List[dict]) -> float:
if not trajectory:
return 0.01
total_reward = sum(step.get("reward", 0.0) for step in trajectory)
max_possible_reward = len(trajectory) * 1.0
if max_possible_reward == 0:
return 0.01
score = total_reward / max_possible_reward
# Clamp strictly between 0 and 1 — never exactly 0.0 or 1.0
return max(0.01, min(0.99, score))
def grade_easy(trajectory: List[dict], env_state: Any = None) -> float:
score = _calculate_base_score(trajectory)
# Threshold: 0.3 — cap at 0.95 to stay strictly below 1.0
if score >= 0.3:
return 0.95
return max(0.01, min(0.99, score))
def grade_medium(trajectory: List[dict], env_state: Any = None) -> float:
score = _calculate_base_score(trajectory)
# Threshold: 0.6 — cap at 0.95 to stay strictly below 1.0
if score >= 0.6:
return 0.95
return max(0.01, min(0.99, score))
def grade_hard(trajectory: List[dict], env_state: Any = None) -> float:
score = _calculate_base_score(trajectory)
# Threshold: 0.9 — cap at 0.95 to stay strictly below 1.0
if score >= 0.9:
return 0.95
return max(0.01, min(0.99, score))