Mohammed-Altaf commited on
Commit
19b4563
·
1 Parent(s): 4534b45

changes upper and lower bounds for inference grading

Browse files
helpers/logging.py CHANGED
@@ -1,6 +1,18 @@
1
  from typing import List, Optional
2
 
3
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  def log_start(task: str, env: str, model: str) -> None:
5
  """Emit the [START] line at episode begin."""
6
  print(f"[START] task={task} env={env} model={model}", flush=True)
@@ -21,13 +33,12 @@ def log_step(step: int, action: str, reward: float, done: bool, error: Optional[
21
  print(f"[STEP] step={step} action={action} reward={reward:.2f} done={done_val} error={error_val}", flush=True)
22
 
23
 
24
- def log_end(success: bool, steps: int, rewards: List[float]) -> None:
25
- """Emit the [END] line after env.close(), always emitted even on exception.
26
 
27
  Args:
28
- success: Whether the episode was successful.
 
29
  steps: Total number of steps taken.
30
- rewards: List of per-step rewards, each formatted to 2 decimal places.
31
  """
32
- rewards_str = ",".join(f"{r:.2f}" for r in rewards)
33
- print(f"[END] success={str(success).lower()} steps={steps} rewards={rewards_str}", flush=True)
 
1
  from typing import List, Optional
2
 
3
 
4
+ def safe_score(raw: float) -> float:
5
+ """Clamp a raw score to the strictly-open interval (0.05, 0.95).
6
+
7
+ Args:
8
+ raw: Unclamped score value.
9
+
10
+ Returns:
11
+ Score guaranteed to be in [0.05, 0.95].
12
+ """
13
+ return max(0.05, min(0.95, float(raw)))
14
+
15
+
16
  def log_start(task: str, env: str, model: str) -> None:
17
  """Emit the [START] line at episode begin."""
18
  print(f"[START] task={task} env={env} model={model}", flush=True)
 
33
  print(f"[STEP] step={step} action={action} reward={reward:.2f} done={done_val} error={error_val}", flush=True)
34
 
35
 
36
+ def log_end(task_id: int, score: float, steps: int) -> None:
37
+ """Emit the [END] line after the episode completes.
38
 
39
  Args:
40
+ task_id: The task number that just ran.
41
+ score: Final clamped score in [0.05, 0.95].
42
  steps: Total number of steps taken.
 
43
  """
44
+ print(f"[END] task={task_id} score={score:.2f} steps={steps}", flush=True)
 
inference.py CHANGED
@@ -11,7 +11,7 @@ from openai import OpenAI
11
 
12
  from client import DataAnalysisClient
13
  from helpers.constants import *
14
- from helpers.logging import log_end, log_start, log_step
15
  from helpers.prompts import SYSTEM_PROMPT
16
  from helpers.response_parser import FALLBACK_ACTION, parse_model_action
17
  from models import DataAction
@@ -26,13 +26,15 @@ def run_task(openai_client: OpenAI, env_client: Any, task_id: int) -> float:
26
  task_id: Task to evaluate (1 - 6)
27
 
28
  Returns:
29
- Final score for this task between 0.0 and 1.0.
30
  """
31
  try:
32
  result = env_client.reset(task_id=task_id)
33
  except Exception as exc:
34
  print(f"[DEBUG] env reset failed: {exc}", flush=True)
35
- return 0.0
 
 
36
 
37
  obs = result.observation
38
  rewards: List[float] = []
@@ -65,6 +67,7 @@ def run_task(openai_client: OpenAI, env_client: Any, task_id: int) -> float:
65
  except Exception as exc:
66
  print(f"[DEBUG] Model request failed: {exc}", flush=True)
67
  response_text = FALLBACK_ACTION
 
68
  action = parse_model_action(response_text)
69
  action_type = action.get("action", "")
70
 
@@ -94,18 +97,20 @@ def run_task(openai_client: OpenAI, env_client: Any, task_id: int) -> float:
94
  DataAction(action_type="submit_answer", answer=action.get("answer", ""))
95
  )
96
  submit_obs = submit_result.observation
97
- score = float(submit_obs.metadata.get("score", 0.0) if submit_obs.metadata else submit_result.reward)
98
  except Exception as exc:
99
  print(f"[DEBUG] env step failed: {exc}", flush=True)
100
  log_step(step=step + 1, action=action_type, reward=0.0, done=True, error=str(exc))
101
- log_end(success=False, steps=step + 1, rewards=rewards)
102
- return 0.0
 
103
 
104
- score = max(0.01, min(0.99, score))
105
- rewards.append(score)
106
- log_step(step=step + 1, action=action_type, reward=score, done=True, error=None)
107
- log_end(success=score > 0.01, steps=step + 1, rewards=rewards)
108
- return score
 
109
 
110
  else:
111
  log_step(
@@ -128,11 +133,14 @@ def run_task(openai_client: OpenAI, env_client: Any, task_id: int) -> float:
128
  }
129
  )
130
 
131
- log_end(success=False, steps=MAX_STEPS, rewards=rewards)
132
- return 0.0
 
 
133
 
134
 
135
  def main():
 
136
  print("Executing Data Analysis Environment")
137
  openai_client = OpenAI(api_key=API_KEY, base_url=API_BASE_URL)
138
  scores = {}
@@ -150,14 +158,14 @@ def main():
150
  score = run_task(openai_client=openai_client, env_client=env_client, task_id=task_id)
151
  scores[task_id] = score
152
 
153
- # print("\n" + "=" * 55)
154
- # print("RESULTS")
155
- # print("=" * 55)
156
- # for task_id, score in scores.items():
157
- # print(f" Task {task_id} ({difficulties[task_id]:6s}): {score:.2f}")
158
- # avg = sum(scores.values()) / len(scores)
159
- # print(f"\n Average Score : {avg:.2f}")
160
- # print("=" * 55)
161
 
162
 
163
  if __name__ == "__main__":
 
11
 
12
  from client import DataAnalysisClient
13
  from helpers.constants import *
14
+ from helpers.logging import log_end, log_start, log_step, safe_score
15
  from helpers.prompts import SYSTEM_PROMPT
16
  from helpers.response_parser import FALLBACK_ACTION, parse_model_action
17
  from models import DataAction
 
26
  task_id: Task to evaluate (1 - 6)
27
 
28
  Returns:
29
+ Final clamped score for this task in [0.05, 0.95].
30
  """
31
  try:
32
  result = env_client.reset(task_id=task_id)
33
  except Exception as exc:
34
  print(f"[DEBUG] env reset failed: {exc}", flush=True)
35
+ log_start(task=str(task_id), env=ENV_SERVER_URL, model=MODEL_NAME)
36
+ log_end(task_id=task_id, score=safe_score(0.0), steps=0)
37
+ return safe_score(0.0)
38
 
39
  obs = result.observation
40
  rewards: List[float] = []
 
67
  except Exception as exc:
68
  print(f"[DEBUG] Model request failed: {exc}", flush=True)
69
  response_text = FALLBACK_ACTION
70
+
71
  action = parse_model_action(response_text)
72
  action_type = action.get("action", "")
73
 
 
97
  DataAction(action_type="submit_answer", answer=action.get("answer", ""))
98
  )
99
  submit_obs = submit_result.observation
100
+ raw_score = float(submit_obs.metadata.get("score", 0.0) if submit_obs.metadata else submit_result.reward)
101
  except Exception as exc:
102
  print(f"[DEBUG] env step failed: {exc}", flush=True)
103
  log_step(step=step + 1, action=action_type, reward=0.0, done=True, error=str(exc))
104
+ final_score = safe_score(sum(rewards) / len(rewards)) if rewards else safe_score(0.0)
105
+ log_end(task_id=task_id, score=final_score, steps=step + 1)
106
+ return final_score
107
 
108
+ clamped = safe_score(raw_score)
109
+ rewards.append(clamped)
110
+ log_step(step=step + 1, action=action_type, reward=clamped, done=True, error=None)
111
+ final_score = safe_score(sum(rewards) / len(rewards))
112
+ log_end(task_id=task_id, score=final_score, steps=step + 1)
113
+ return final_score
114
 
115
  else:
116
  log_step(
 
133
  }
134
  )
135
 
136
+ # Max steps reached without submission
137
+ final_score = safe_score(sum(rewards) / len(rewards)) if rewards else safe_score(0.0)
138
+ log_end(task_id=task_id, score=final_score, steps=MAX_STEPS)
139
+ return final_score
140
 
141
 
142
  def main():
143
+ """Run inference across all 6 tasks and report scores."""
144
  print("Executing Data Analysis Environment")
145
  openai_client = OpenAI(api_key=API_KEY, base_url=API_BASE_URL)
146
  scores = {}
 
158
  score = run_task(openai_client=openai_client, env_client=env_client, task_id=task_id)
159
  scores[task_id] = score
160
 
161
+ print("\n" + "=" * 55)
162
+ print("RESULTS")
163
+ print("=" * 55)
164
+ for task_id, score in scores.items():
165
+ print(f" Task {task_id} ({difficulties[task_id]:6s}): {score:.2f}")
166
+ avg = sum(scores.values()) / len(scores)
167
+ print(f"\n Average Score : {avg:.2f}")
168
+ print("=" * 55)
169
 
170
 
171
  if __name__ == "__main__":
server/data_analysis_env.py CHANGED
@@ -271,7 +271,7 @@ class DataAnalysisEnv(Environment):
271
 
272
  self._state.answer_submitted = True
273
  raw_score = self._task.grade(action.answer)
274
- score = max(0.01, min(0.99, raw_score))
275
  self._state.final_score = score
276
 
277
  return DataObservation(
 
271
 
272
  self._state.answer_submitted = True
273
  raw_score = self._task.grade(action.answer)
274
+ score = max(0.05, min(0.95, raw_score))
275
  self._state.final_score = score
276
 
277
  return DataObservation(
tasks/task_easy.py CHANGED
@@ -50,4 +50,4 @@ class TopRevenueCategoryTask(BaseTask):
50
  expected = self.expected_answer().strip().lower()
51
  submitted = answer.strip().lower()
52
  raw = 1.0 if expected in submitted else 0.0
53
- return max(0.01, min(0.99, raw))
 
50
  expected = self.expected_answer().strip().lower()
51
  submitted = answer.strip().lower()
52
  raw = 1.0 if expected in submitted else 0.0
53
+ return max(0.05, min(0.95, raw))
tasks/task_hard.py CHANGED
@@ -100,4 +100,4 @@ class RepeatCustomerCohortTask(BaseTask):
100
  except ValueError:
101
  pass
102
 
103
- return max(0.01, min(0.99, score))
 
100
  except ValueError:
101
  pass
102
 
103
+ return max(0.05, min(0.95, score))
tasks/task_hard_2.py CHANGED
@@ -100,4 +100,4 @@ class CustomerLoyaltyRevenueTask(BaseTask):
100
  except ValueError:
101
  pass
102
 
103
- return max(0.01, min(0.99, score))
 
100
  except ValueError:
101
  pass
102
 
103
+ return max(0.05, min(0.95, score))
tasks/task_hard_3.py CHANGED
@@ -104,4 +104,4 @@ class SupplierProfitabilityTask(BaseTask):
104
  except ValueError:
105
  pass
106
 
107
- return max(0.01, min(0.99, score))
 
104
  except ValueError:
105
  pass
106
 
107
+ return max(0.05, min(0.95, score))
tasks/task_medium.py CHANGED
@@ -74,4 +74,4 @@ class CityRevenueShareTask(BaseTask):
74
  except ValueError:
75
  pass
76
 
77
- return max(0.01, min(0.99, score))
 
74
  except ValueError:
75
  pass
76
 
77
+ return max(0.05, min(0.95, score))
tasks/task_medium_2.py CHANGED
@@ -85,4 +85,4 @@ class MonthlyRevenueRatioTask(BaseTask):
85
  except ValueError:
86
  pass
87
 
88
- return max(0.01, min(0.99, score))
 
85
  except ValueError:
86
  pass
87
 
88
+ return max(0.05, min(0.95, score))