ncncomplete commited on
Commit
69cf4ae
·
verified ·
1 Parent(s): 4595e5f

Upload folder using huggingface_hub

Browse files
Files changed (2) hide show
  1. inference.py +20 -8
  2. server/task_bank.py +11 -4
inference.py CHANGED
@@ -27,12 +27,18 @@ ENV_BASE_URL = os.getenv("ENV_BASE_URL", "http://localhost:8000")
27
  BENCHMARK = os.getenv("BENCHMARK", "coding_env")
28
  MAX_STEPS = int(os.getenv("MAX_STEPS", "1"))
29
  SUCCESS_SCORE_THRESHOLD = float(os.getenv("SUCCESS_SCORE_THRESHOLD", "0.60"))
 
 
30
 
31
 
32
  def _bool_text(value: bool) -> str:
33
  return "true" if value else "false"
34
 
35
 
 
 
 
 
36
  def log_start(task: str, env: str, model: str) -> None:
37
  print(f"[START] task={task} env={env} model={model}", flush=True)
38
 
@@ -129,7 +135,7 @@ line_number (integer), confidence (0.0-1.0 float)
129
  def run_task(task_id: str, client: OpenAI | None) -> float:
130
  episode_id = f"baseline-{task_id}"
131
  rewards: List[float] = []
132
- score = 0.0
133
  success = False
134
  last_error: str | None = None
135
  steps_taken = 0
@@ -163,7 +169,7 @@ def run_task(task_id: str, client: OpenAI | None) -> float:
163
  "episode_id": episode_id,
164
  },
165
  )
166
- reward = float(step_data.get("reward", 0.0) or 0.0)
167
  done = bool(step_data.get("done", not bool(step_data)))
168
  obs_after = step_data.get("observation", {}) if isinstance(step_data, dict) else {}
169
  raw_error = obs_after.get("last_action_error")
@@ -179,17 +185,23 @@ def run_task(task_id: str, client: OpenAI | None) -> float:
179
  grader_data = _safe_json(
180
  "GET", f"{ENV_BASE_URL}/grader?task_id={task_id}&episode_id={episode_id}"
181
  )
182
- grader_score = float(grader_data.get("score", 0.0) or 0.0)
183
- step_score = rewards[-1] if rewards else 0.0
184
- score = max(grader_score, step_score)
185
  success = score >= SUCCESS_SCORE_THRESHOLD
186
  except Exception as exc:
187
  last_error = str(exc)
188
  if steps_taken == 0:
189
- log_step(1, "bug_type=none;line=-1;confidence=0.00", 0.0, True, last_error)
190
- rewards.append(0.0)
 
 
 
 
 
 
191
  steps_taken = 1
192
- score = 0.0
193
  success = False
194
  finally:
195
  log_end(success, max(1, steps_taken), score, rewards or [0.0])
 
27
  BENCHMARK = os.getenv("BENCHMARK", "coding_env")
28
  MAX_STEPS = int(os.getenv("MAX_STEPS", "1"))
29
  SUCCESS_SCORE_THRESHOLD = float(os.getenv("SUCCESS_SCORE_THRESHOLD", "0.60"))
30
+ MIN_STRICT_SCORE = 0.01
31
+ MAX_STRICT_SCORE = 0.99
32
 
33
 
34
  def _bool_text(value: bool) -> str:
35
  return "true" if value else "false"
36
 
37
 
38
+ def _strict_score(value: float) -> float:
39
+ return max(MIN_STRICT_SCORE, min(MAX_STRICT_SCORE, round(float(value), 4)))
40
+
41
+
42
  def log_start(task: str, env: str, model: str) -> None:
43
  print(f"[START] task={task} env={env} model={model}", flush=True)
44
 
 
135
  def run_task(task_id: str, client: OpenAI | None) -> float:
136
  episode_id = f"baseline-{task_id}"
137
  rewards: List[float] = []
138
+ score = MIN_STRICT_SCORE
139
  success = False
140
  last_error: str | None = None
141
  steps_taken = 0
 
169
  "episode_id": episode_id,
170
  },
171
  )
172
+ reward = _strict_score(float(step_data.get("reward", MIN_STRICT_SCORE) or MIN_STRICT_SCORE))
173
  done = bool(step_data.get("done", not bool(step_data)))
174
  obs_after = step_data.get("observation", {}) if isinstance(step_data, dict) else {}
175
  raw_error = obs_after.get("last_action_error")
 
185
  grader_data = _safe_json(
186
  "GET", f"{ENV_BASE_URL}/grader?task_id={task_id}&episode_id={episode_id}"
187
  )
188
+ grader_score = _strict_score(float(grader_data.get("score", MIN_STRICT_SCORE) or MIN_STRICT_SCORE))
189
+ step_score = _strict_score(rewards[-1] if rewards else MIN_STRICT_SCORE)
190
+ score = _strict_score(max(grader_score, step_score))
191
  success = score >= SUCCESS_SCORE_THRESHOLD
192
  except Exception as exc:
193
  last_error = str(exc)
194
  if steps_taken == 0:
195
+ log_step(
196
+ 1,
197
+ "bug_type=none;line=-1;confidence=0.00",
198
+ MIN_STRICT_SCORE,
199
+ True,
200
+ last_error,
201
+ )
202
+ rewards.append(MIN_STRICT_SCORE)
203
  steps_taken = 1
204
+ score = MIN_STRICT_SCORE
205
  success = False
206
  finally:
207
  log_end(success, max(1, steps_taken), score, rewards or [0.0])
server/task_bank.py CHANGED
@@ -88,6 +88,8 @@ TASKS: Dict[str, CodeReviewTask] = {
88
 
89
  EPISODE_SCORES: Dict[tuple[str, str], float] = {}
90
  SCORE_FILE = os.getenv("CODING_ENV_SCORE_FILE", "/tmp/coding_env_episode_scores.json")
 
 
91
 
92
 
93
  def list_tasks() -> List[Dict[str, str]]:
@@ -146,13 +148,13 @@ def grade_action(action: CodeAction, task: CodeReviewTask) -> tuple[float, str]:
146
  else:
147
  parts.append("review lacks key evidence (+0.00)")
148
 
149
- score = max(0.0, min(1.0, round(score, 4)))
150
  return score, "; ".join(parts)
151
 
152
 
153
  def record_episode_score(task_id: str, episode_id: str, score: float) -> None:
154
  """Persist normalized score for grader endpoint."""
155
- normalized = max(0.0, min(1.0, float(score)))
156
  EPISODE_SCORES[(task_id, episode_id)] = normalized
157
  _persist_score(task_id, episode_id, normalized)
158
 
@@ -194,6 +196,11 @@ def _load_persisted_score(task_id: str, episode_id: str) -> float:
194
  loaded = json.load(f)
195
  key = f"{task_id}::{episode_id}"
196
  value = loaded.get(key, 0.0) if isinstance(loaded, dict) else 0.0
197
- return max(0.0, min(1.0, float(value)))
198
  except Exception:
199
- return 0.0
 
 
 
 
 
 
88
 
89
  EPISODE_SCORES: Dict[tuple[str, str], float] = {}
90
  SCORE_FILE = os.getenv("CODING_ENV_SCORE_FILE", "/tmp/coding_env_episode_scores.json")
91
+ MIN_STRICT_SCORE = 0.01
92
+ MAX_STRICT_SCORE = 0.99
93
 
94
 
95
  def list_tasks() -> List[Dict[str, str]]:
 
148
  else:
149
  parts.append("review lacks key evidence (+0.00)")
150
 
151
+ score = _to_strict_open_score(score)
152
  return score, "; ".join(parts)
153
 
154
 
155
  def record_episode_score(task_id: str, episode_id: str, score: float) -> None:
156
  """Persist normalized score for grader endpoint."""
157
+ normalized = _to_strict_open_score(score)
158
  EPISODE_SCORES[(task_id, episode_id)] = normalized
159
  _persist_score(task_id, episode_id, normalized)
160
 
 
196
  loaded = json.load(f)
197
  key = f"{task_id}::{episode_id}"
198
  value = loaded.get(key, 0.0) if isinstance(loaded, dict) else 0.0
199
+ return _to_strict_open_score(value)
200
  except Exception:
201
+ return MIN_STRICT_SCORE
202
+
203
+
204
+ def _to_strict_open_score(value: float) -> float:
205
+ """Clamp to strict open interval (0, 1) as required by validator."""
206
+ return max(MIN_STRICT_SCORE, min(MAX_STRICT_SCORE, round(float(value), 4)))