Prince9868 commited on
Commit
c0ebea1
·
1 Parent(s): 8fb9494

Harden OpenEnv grader entrypoints

Browse files
tasks/airline_seat_upsell_gauntlet/grader.py CHANGED
@@ -4,6 +4,7 @@ from guardian_openenv.task_graders import grade_airline_seat_upsell_gauntlet
4
  def grade(*args: Any, **kwargs: Any):
5
  """Grader function mapped for the OpenEnv Phase 2 validator."""
6
  try:
7
- return grade_airline_seat_upsell_gauntlet(*args, **kwargs)
 
8
  except Exception:
9
  return 0.001
 
4
  def grade(*args: Any, **kwargs: Any):
5
  """Grader function mapped for the OpenEnv Phase 2 validator."""
6
  try:
7
+ result = grade_airline_seat_upsell_gauntlet(*args, **kwargs)
8
+ return float(result)
9
  except Exception:
10
  return 0.001
tasks/marketplace_ghost_checkout/grader.py CHANGED
@@ -4,6 +4,7 @@ from guardian_openenv.task_graders import grade_marketplace_ghost_checkout
4
  def grade(*args: Any, **kwargs: Any):
5
  """Grader function mapped for the OpenEnv Phase 2 validator."""
6
  try:
7
- return grade_marketplace_ghost_checkout(*args, **kwargs)
 
8
  except Exception:
9
  return 0.001
 
4
  def grade(*args: Any, **kwargs: Any):
5
  """Grader function mapped for the OpenEnv Phase 2 validator."""
6
  try:
7
+ result = grade_marketplace_ghost_checkout(*args, **kwargs)
8
+ return float(result)
9
  except Exception:
10
  return 0.001
tasks/value_hotel_budget_guard/grader.py CHANGED
@@ -4,7 +4,8 @@ from guardian_openenv.task_graders import grade_value_hotel_budget_guard
4
  def grade(*args: Any, **kwargs: Any):
5
  """Grader function mapped for the OpenEnv Phase 2 validator."""
6
  try:
7
- return grade_value_hotel_budget_guard(*args, **kwargs)
 
8
  except Exception:
9
  # Fallback to a valid score if evaluation throws to avoid full crash
10
  return 0.001
 
4
  def grade(*args: Any, **kwargs: Any):
5
  """Grader function mapped for the OpenEnv Phase 2 validator."""
6
  try:
7
+ result = grade_value_hotel_budget_guard(*args, **kwargs)
8
+ return float(result)
9
  except Exception:
10
  # Fallback to a valid score if evaluation throws to avoid full crash
11
  return 0.001
validate_submission.py CHANGED
@@ -1,7 +1,10 @@
1
  from __future__ import annotations
2
 
 
3
  from pathlib import Path
4
 
 
 
5
  from guardian_openenv.environment import GuardianReviewEnvironment
6
  from guardian_openenv.models import ActionType, GuardianAction
7
  from guardian_openenv.tasks import TASKS
@@ -19,11 +22,34 @@ def main() -> None:
19
  if missing:
20
  raise SystemExit(f"Missing required files: {', '.join(missing)}")
21
 
 
 
 
 
 
 
 
22
  env = GuardianReviewEnvironment()
23
  if len(TASKS) < 3:
24
  raise SystemExit("At least 3 tasks are required.")
25
 
26
  for task in TASKS:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  observation = env.reset(task.task_id)
28
  if observation.task_id != task.task_id:
29
  raise SystemExit(f"reset() returned wrong task for {task.task_id}")
 
1
  from __future__ import annotations
2
 
3
+ import importlib
4
  from pathlib import Path
5
 
6
+ import yaml
7
+
8
  from guardian_openenv.environment import GuardianReviewEnvironment
9
  from guardian_openenv.models import ActionType, GuardianAction
10
  from guardian_openenv.tasks import TASKS
 
22
  if missing:
23
  raise SystemExit(f"Missing required files: {', '.join(missing)}")
24
 
25
+ manifest = yaml.safe_load(Path("openenv.yaml").read_text(encoding="utf-8")) or {}
26
+ manifest_graders = {
27
+ str(task.get("id")): str(task.get("grader"))
28
+ for task in manifest.get("tasks", [])
29
+ if task.get("id") and task.get("grader")
30
+ }
31
+
32
  env = GuardianReviewEnvironment()
33
  if len(TASKS) < 3:
34
  raise SystemExit("At least 3 tasks are required.")
35
 
36
  for task in TASKS:
37
+ grader_path = manifest_graders.get(task.task_id)
38
+ if not grader_path:
39
+ raise SystemExit(f"Task {task.task_id} is missing a grader in openenv.yaml")
40
+ module_name, function_name = grader_path.rsplit(":", 1)
41
+ grader_fn = getattr(importlib.import_module(module_name), function_name)
42
+ manifest_score = grader_fn()
43
+ if not isinstance(manifest_score, (int, float)):
44
+ raise SystemExit(
45
+ f"Manifest grader for {task.task_id} must return a plain numeric score, got {type(manifest_score).__name__}"
46
+ )
47
+ if not (0.0 < float(manifest_score) < 1.0):
48
+ raise SystemExit(
49
+ f"Manifest grader score out of range for {task.task_id}: {manifest_score} "
50
+ "(must be strictly between 0 and 1)"
51
+ )
52
+
53
  observation = env.reset(task.task_id)
54
  if observation.task_id != task.task_id:
55
  raise SystemExit(f"reset() returned wrong task for {task.task_id}")