my-env / tests /test_graders.py
TheOnlyKaks's picture
some fixes
f9cf02d
Raw
History Blame Contribute Delete
3.71 kB
"""
Tests for the BugTriageGrader (server/graders/__init__.py, grader_*.py).
Verifies that each difficulty's grader produces expected scores given
known metric inputs and that the GraderResult model is valid.
"""
from __future__ import annotations
import pytest
from server.graders import BugTriageGrader, GraderResult
# Representative metrics that correspond to a perfect easy-task run:
_PERFECT_EASY_METRICS = {
"severity_correct": 7,
"priority_correct": 7,
"component_correct": 7,
"team_correct": 7,
"duplicate_correct": 1,
"duplicate_total": 1,
"duplicate_expected_total": 1,
"info_request_correct": 1,
"info_needed_total": 1,
"major_mistakes": 0,
"incorrect_close_count": 0,
"critical_severity_correct": 2,
"critical_severity_total": 2,
"sla_met": 2,
"sla_total": 2,
"escalation_correct": 2,
"escalation_total": 2,
"destructive_actions": 0,
"missed_critical_escalation": 0,
"steps_used": 21,
"step_budget": 50,
"label_total": 7,
"assignment_total": 7,
}
_ZERO_METRICS: dict = {k: 0 for k in _PERFECT_EASY_METRICS}
_ZERO_METRICS["step_budget"] = 50
_ZERO_METRICS["label_total"] = 7
_ZERO_METRICS["assignment_total"] = 7
_ZERO_METRICS["duplicate_expected_total"] = 1
_ZERO_METRICS["info_needed_total"] = 1
_ZERO_METRICS["critical_severity_total"] = 2
_ZERO_METRICS["sla_total"] = 2
_ZERO_METRICS["escalation_total"] = 2
class TestBugTriageGraderEasy:
def test_unknown_task_raises(self):
with pytest.raises(ValueError):
BugTriageGrader(task_id="nonexistent")
def test_returns_grader_result(self):
grader = BugTriageGrader(task_id="bug_triage_easy")
result = grader.grade_episode([], [], _PERFECT_EASY_METRICS)
assert isinstance(result, GraderResult)
def test_perfect_metrics_score_close_to_one(self):
grader = BugTriageGrader(task_id="bug_triage_easy")
result = grader.grade_episode([], [], _PERFECT_EASY_METRICS)
assert result.score > 0.9
def test_zero_metrics_score_below_threshold(self):
grader = BugTriageGrader(task_id="bug_triage_easy")
result = grader.grade_episode([], [], _ZERO_METRICS)
assert result.score < 0.75
assert result.passed is False
def test_score_strictly_in_open_interval(self):
grader = BugTriageGrader(task_id="bug_triage_easy")
result = grader.grade_episode([], [], _PERFECT_EASY_METRICS)
assert 0.0 < result.score < 1.0
def test_passed_false_when_score_below_threshold(self):
grader = BugTriageGrader(task_id="bug_triage_easy", threshold=0.99)
result = grader.grade_episode([], [], _ZERO_METRICS)
assert result.passed is False
class TestBugTriageGraderMedium:
def test_grade_medium_runs(self):
grader = BugTriageGrader(task_id="bug_triage_medium")
metrics = dict(_PERFECT_EASY_METRICS)
result = grader.grade_episode([], [], metrics)
assert isinstance(result, GraderResult)
assert 0.0 < result.score < 1.0
class TestBugTriageGraderHard:
def test_grade_hard_runs(self):
grader = BugTriageGrader(task_id="bug_triage_hard")
metrics = dict(_PERFECT_EASY_METRICS)
result = grader.grade_episode([], [], metrics)
assert isinstance(result, GraderResult)
assert 0.0 < result.score < 1.0
def test_zero_critical_accuracy_generates_mistake(self):
grader = BugTriageGrader(task_id="bug_triage_hard")
metrics = dict(_ZERO_METRICS)
metrics["critical_severity_total"] = 4
result = grader.grade_episode([], [], metrics)
assert any("Critical severity" in m for m in result.mistakes)