engineer-manager / graders.py
AzraelH's picture
Align task and grader interfaces with validator
ec7e9a5
Raw
History Blame Contribute Delete
1.68 kB
from __future__ import annotations
from typing import Any
TASK_NAMES = {
0: "quiet-morning",
1: "meeting-surgery",
2: "delivery-triage",
}
def _normalize_reward(reward: float) -> float:
return min(max(float(reward), 0.0), 1.0)
def _state_task_id(state: Any) -> int | None:
if not isinstance(state, dict):
return None
task_id = state.get("task_id")
if isinstance(task_id, int):
return task_id
task_name = state.get("task_name")
if isinstance(task_name, str):
for index, name in TASK_NAMES.items():
if name == task_name:
return index
metadata = state.get("metadata")
if isinstance(metadata, dict):
nested_task_id = metadata.get("task_id")
if isinstance(nested_task_id, int):
return nested_task_id
return None
def grade_task_0(state: dict, reward: float) -> float:
return _normalize_reward(reward if _state_task_id(state) == 0 else 0.0)
def grade_task_1(state: dict, reward: float) -> float:
return _normalize_reward(reward if _state_task_id(state) == 1 else 0.0)
def grade_task_2(state: dict, reward: float) -> float:
return _normalize_reward(reward if _state_task_id(state) == 2 else 0.0)
GRADERS = {
"engineer_manager_task_0": grade_task_0,
"engineer_manager_task_1": grade_task_1,
"engineer_manager_task_2": grade_task_2,
}
TASK_GRADER_PAIRS = [
("engineer_manager_task_0", grade_task_0),
("engineer_manager_task_1", grade_task_1),
("engineer_manager_task_2", grade_task_2),
]
__all__ = [
"grade_task_0",
"grade_task_1",
"grade_task_2",
"GRADERS",
"TASK_GRADER_PAIRS",
]