Spaces:
Sleeping
Sleeping
Commit ·
19b4563
1
Parent(s): 4534b45
changes upper and lower bounds for inference grading
Browse files- helpers/logging.py +17 -6
- inference.py +29 -21
- server/data_analysis_env.py +1 -1
- tasks/task_easy.py +1 -1
- tasks/task_hard.py +1 -1
- tasks/task_hard_2.py +1 -1
- tasks/task_hard_3.py +1 -1
- tasks/task_medium.py +1 -1
- tasks/task_medium_2.py +1 -1
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(
|
| 25 |
-
"""Emit the [END] line after
|
| 26 |
|
| 27 |
Args:
|
| 28 |
-
|
|
|
|
| 29 |
steps: Total number of steps taken.
|
| 30 |
-
rewards: List of per-step rewards, each formatted to 2 decimal places.
|
| 31 |
"""
|
| 32 |
-
|
| 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
|
| 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 |
-
|
|
|
|
|
|
|
| 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 |
-
|
| 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 |
-
|
| 102 |
-
|
|
|
|
| 103 |
|
| 104 |
-
|
| 105 |
-
rewards.append(
|
| 106 |
-
log_step(step=step + 1, action=action_type, reward=
|
| 107 |
-
|
| 108 |
-
|
|
|
|
| 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 |
-
|
| 132 |
-
|
|
|
|
|
|
|
| 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 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 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.
|
| 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.
|
|
|
|
| 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.
|
|
|
|
| 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.
|
|
|
|
| 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.
|
|
|
|
| 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.
|
|
|
|
| 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.
|
|
|
|
| 85 |
except ValueError:
|
| 86 |
pass
|
| 87 |
|
| 88 |
+
return max(0.05, min(0.95, score))
|