Pranav Dhiran commited on
Commit
ff28a86
·
1 Parent(s): 50c7596

final 2 3

Browse files
Files changed (1) hide show
  1. app/environment.py +19 -0
app/environment.py CHANGED
@@ -65,6 +65,22 @@ class EnvironmentManager:
65
  def __init__(self):
66
  self._sessions: Dict[str, Session] = {}
67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  def reset(self, task_id: str, seed: int = 42) -> Tuple[Observation, str]:
69
  """Start a new episode. Returns (initial_observation, session_id)."""
70
  if task_id not in TASK_REGISTRY:
@@ -147,6 +163,7 @@ class EnvironmentManager:
147
 
148
  # Grade for info
149
  score, grade_breakdown = task.grade(session.world_state, session.action_history)
 
150
 
151
  reward_obj = Reward(
152
  value=round(step_reward, 4),
@@ -173,6 +190,7 @@ class EnvironmentManager:
173
  session = self._sessions[session_id]
174
  task = TASK_REGISTRY[session.task_id]
175
  score, _ = task.grade(session.world_state, session.action_history)
 
176
  return session.to_state_response(grader_score=score)
177
 
178
  def grade(self, session_id: str) -> GraderResponse:
@@ -181,6 +199,7 @@ class EnvironmentManager:
181
  session = self._sessions[session_id]
182
  task = TASK_REGISTRY[session.task_id]
183
  score, breakdown = task.grade(session.world_state, session.action_history)
 
184
 
185
  passing = score >= task.passing_score
186
  return GraderResponse(
 
65
  def __init__(self):
66
  self._sessions: Dict[str, Session] = {}
67
 
68
+ @staticmethod
69
+ def _clamp_score_strict(score: float, eps: float = 1e-6) -> float:
70
+ """
71
+ Hackathon validator requirement: task scores must be strictly within (0, 1).
72
+ We clamp away from exact endpoints to avoid returning 0.0 or 1.0.
73
+ """
74
+ try:
75
+ s = float(score)
76
+ except Exception:
77
+ s = 0.0
78
+ if s <= 0.0:
79
+ return eps
80
+ if s >= 1.0:
81
+ return 1.0 - eps
82
+ return s
83
+
84
  def reset(self, task_id: str, seed: int = 42) -> Tuple[Observation, str]:
85
  """Start a new episode. Returns (initial_observation, session_id)."""
86
  if task_id not in TASK_REGISTRY:
 
163
 
164
  # Grade for info
165
  score, grade_breakdown = task.grade(session.world_state, session.action_history)
166
+ score = self._clamp_score_strict(score)
167
 
168
  reward_obj = Reward(
169
  value=round(step_reward, 4),
 
190
  session = self._sessions[session_id]
191
  task = TASK_REGISTRY[session.task_id]
192
  score, _ = task.grade(session.world_state, session.action_history)
193
+ score = self._clamp_score_strict(score)
194
  return session.to_state_response(grader_score=score)
195
 
196
  def grade(self, session_id: str) -> GraderResponse:
 
199
  session = self._sessions[session_id]
200
  task = TASK_REGISTRY[session.task_id]
201
  score, breakdown = task.grade(session.world_state, session.action_history)
202
+ score = self._clamp_score_strict(score)
203
 
204
  passing = score >= task.passing_score
205
  return GraderResponse(