cache-env / env /tasks.py
Parv Pareek
done
e75c8ce
import random
from env.task_graders import TASK_AGENT_GRADERS
# Declared for GET /tasks + openenv.yaml (Phase 1 task/grader discovery).
TASK_MANIFEST = [
{
"name": "easy",
"description": (
"Fewer cache items and low volatility; easier to infer staleness from noisy observations."
),
"difficulty": "easy",
"max_steps": 10,
"grader": True,
"grader_kind": "programmatic",
"grader_callable": "env.task_graders:easy_agent_grader",
"score_range": [0.0, 1.0],
},
{
"name": "medium",
"description": (
"More items and moderate volatility; invalidation vs keep tradeoffs matter more."
),
"difficulty": "medium",
"max_steps": 10,
"grader": True,
"grader_kind": "programmatic",
"grader_callable": "env.task_graders:medium_agent_grader",
"score_range": [0.0, 1.0],
},
{
"name": "hard",
"description": (
"Most items and high volatility; staleness signal is noisy and costly mistakes are easier."
),
"difficulty": "hard",
"max_steps": 10,
"grader": True,
"grader_kind": "programmatic",
"grader_callable": "env.task_graders:hard_agent_grader",
"score_range": [0.0, 1.0],
},
]
def get_task(task_id):
if task_id == "easy":
return {"num_items": 2, "volatility": 0.1}
elif task_id == "medium":
return {"num_items": 3, "volatility": 0.4}
elif task_id == "hard":
return {"num_items": 4, "volatility": 0.8}
else:
return {
"num_items": 3,
"volatility": 0.3,
}
def sample_task(rng=None):
r = rng if rng is not None else random
return r.choice(["easy", "medium", "hard"])
def list_graders():
"""Return task ids that have an enabled agent grader."""
return [
{
"task": name,
"grader_enabled": fn is not None,
"callable": getattr(fn, "__name__", str(fn)),
}
for name, fn in TASK_AGENT_GRADERS.items()
]