Spaces:
Running
Running
File size: 1,462 Bytes
fbb0927 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | """
Grader registry for LogTriageEnv.
Maps task_id strings to grader class instances.
"""
from server.graders.crash_grader import CrashGrader
from server.graders.cascade_grader import CascadeGrader
from server.graders.noise_grader import NoiseGrader
# Registry: task_id → grader instance
GRADER_REGISTRY = {
"single_crash": CrashGrader(),
"cascading_failure": CascadeGrader(),
"silent_degradation": NoiseGrader(),
}
def get_grader(task_id: str):
"""
Get the grader for a given task.
Raises ValueError if task_id is unknown.
"""
if task_id not in GRADER_REGISTRY:
raise ValueError(
f"No grader registered for task '{task_id}'. "
f"Valid tasks: {list(GRADER_REGISTRY.keys())}"
)
return GRADER_REGISTRY[task_id]
def score_episode(task_id: str, state) -> dict:
"""
Score a completed episode and return full result dict.
This is what the /grader endpoint calls.
"""
grader = get_grader(task_id)
score = grader.score(state)
breakdown = grader.get_breakdown() if hasattr(grader, "get_breakdown") else {}
return {
"score": score,
"task_id": task_id,
"episode_id": state.episode_id,
"steps_taken": state.step_count,
"max_steps": state.max_steps,
"breakdown": breakdown,
"resolved": any(
a.get("action_type") == "resolve"
for a in state.action_history
),
}
|