ajaxwin
Structure Changed, files reviewed
88875f7
Raw
History Blame
1.22 kB
"""
grader.py (Task 1 – Targeted Vulnerability Detection)
-------------------------------------------------------
Deterministic grader. Score range: 0.0 – 1.0
1.0 – correct function + correct vulnerability keyword
0.5 – correct function + wrong/unrecognised vulnerability keyword
0.0 – wrong function name
"""
from __future__ import annotations
from typing import Dict
from utils import SemanticMatcher
class Task1Grader:
def __init__(self, target_function: str, vulnerability_issue: str) -> None:
self.target_function = target_function.lower()
self.vulnerability_issue = vulnerability_issue
def grade_submission(self, submitted_function: str, submitted_vuln_type: str) -> float:
if submitted_function.strip().lower() != self.target_function:
return 0.0
return 1.0 if SemanticMatcher().match(self.vulnerability_issue, submitted_vuln_type) else 0.5
def reward_for_score(self, score: float) -> float:
if score == 1.0: return 5.0
if score == 0.5: return 1.0
return -1.5
def get_canonical_answer(self) -> Dict[str, str]:
return {"function": self.target_function, "vulnerability": self.vulnerability_issue}