paramjitbaral commited on
Commit
ee9f0c7
·
verified ·
1 Parent(s): 048171a

Upload folder using huggingface_hub

Browse files
app/environment/core.py CHANGED
@@ -1,6 +1,6 @@
1
  import json
2
  from pathlib import Path
3
- from typing import Any
4
 
5
  from app.environment.graders import grade_task
6
  from app.environment.scenarios.accident import generate_accident_case
@@ -84,9 +84,9 @@ class EmergencyEnv:
84
  seed=seed,
85
  task_id=resolved_task_id,
86
  task_objective=TASKS[resolved_task_id]["objective"],
87
- scenario_type=scenario_type,
88
  scenario_name=scenario["scenario_name"],
89
- scenario_difficulty=difficulty,
90
  patient_condition=scenario["patient_condition"],
91
  required_specialization=scenario["required_specialization"],
92
  initial_critical_time_limit_minutes=scenario["critical_time_limit_minutes"],
@@ -121,7 +121,7 @@ class EmergencyEnv:
121
 
122
  self.last_info = StepInfo(
123
  task_id=resolved_task_id,
124
- difficulty=difficulty,
125
  objective=TASKS[resolved_task_id]["objective"],
126
  progress_score=MIN_REWARD,
127
  reward_model=RewardModel(
@@ -174,7 +174,7 @@ class EmergencyEnv:
174
  was_failed_before = selected.hospital_id in self.state_data.failed_hospitals
175
 
176
  original_traffic = selected.traffic
177
- selected.traffic = self._traffic_shift(selected.traffic, self.state_data.scenario_difficulty)
178
 
179
  speed = compute_speed_kmh(self.base_speed_kmh, selected.traffic)
180
  travel_time = compute_travel_time_minutes(selected.distance_km, speed)
@@ -288,9 +288,11 @@ class EmergencyEnv:
288
  )
289
 
290
  info = self.last_info.model_dump() if self.last_info else {}
 
 
291
  return {
292
  "observation": self._build_observation(),
293
- "reward": reward,
294
  "done": self.state_data.done,
295
  "info": info,
296
  }
@@ -303,12 +305,11 @@ class EmergencyEnv:
303
  return Action(step=self.state_data.step, hospital_id=action, rationale="policy selection")
304
  if isinstance(action, dict):
305
  assert self.state_data is not None
306
- payload = {
307
- "step": action.get("step", self.state_data.step),
308
- "hospital_id": action.get("hospital_id"),
309
- "rationale": action.get("rationale"),
310
- }
311
- return Action(**payload)
312
  raise ValueError("Action must be Action, hospital_id string, or action dict.")
313
 
314
  def _build_hospital_states(self, scenario: dict[str, Any]) -> list[HospitalState]:
@@ -388,8 +389,8 @@ class EmergencyEnv:
388
  distance_km=distance,
389
  icu_display=icu_display,
390
  icu_actual=icu_actual,
391
- specialization=specialization,
392
- traffic=traffic,
393
  )
394
  )
395
  extra_count += 1
@@ -444,18 +445,18 @@ class EmergencyEnv:
444
  )
445
  reward = max(MIN_REWARD, min(MAX_REWARD, reward))
446
 
 
 
 
 
 
 
 
447
  breakdown = RewardBreakdown(
448
  survival_component=max(MIN_REWARD, min(MAX_REWARD, (status_reward + 0.5) / 1.5)),
449
  time_efficiency_component=max(MIN_REWARD, min(MAX_REWARD, 1.0 - (travel_time / 25.0))),
450
- specialization_component=(MAX_REWARD if self._specialization_match(selected) else 0.4),
451
- delay_penalty=min(
452
- MAX_REWARD,
453
- unknown_critical_penalty
454
- + repeat_penalty
455
- + failed_repeat_penalty
456
- + traffic_penalty
457
- + hidden_case_penalty,
458
- ),
459
  )
460
 
461
  return reward, breakdown
@@ -1019,7 +1020,7 @@ class EmergencyEnv:
1019
  assert self.state_data is not None
1020
  for hospital in self.state_data.hospitals:
1021
  if self._rng.random() < 0.40:
1022
- hospital.traffic = self._traffic_shift(hospital.traffic, self.state_data.scenario_difficulty)
1023
 
1024
  if self._rng.random() < DifficultyModifier.get_icu_mismatch_probability(self.state_data.scenario_difficulty):
1025
  hospital.icu_actual = not hospital.icu_actual
@@ -1082,7 +1083,9 @@ class EmergencyEnv:
1082
 
1083
  def _update_learning_memory(self, hospital_id: str, success: bool, reward: float) -> None:
1084
  memory = self._load_memory()
1085
- entry = memory.get(hospital_id, LearningEntry())
 
 
1086
 
1087
  if success:
1088
  entry.success += 1
@@ -1113,7 +1116,7 @@ class EmergencyEnv:
1113
  progress_component = self._progress_score()
1114
  reward_component = max(MIN_REWARD, min(MAX_REWARD, self.state_data.reward))
1115
  score = 0.15 + (0.35 * reward_component) + (0.25 * progress_component)
1116
- return max(0.1, min(0.85, score))
1117
 
1118
  def _success_score(self) -> float:
1119
  assert self.state_data is not None
@@ -1123,7 +1126,7 @@ class EmergencyEnv:
1123
  rejected_steps = sum(1 for item in self.trajectory if item.get("outcome_status") == "rejected")
1124
  route_quality = max(0.0, 1.0 - (rejected_steps / total_steps))
1125
  score = (0.45 * reward_component) + (0.40 * progress_component) + (0.15 * route_quality)
1126
- return max(0.25, min(0.99, score))
1127
 
1128
 
1129
  ACDEEnvironment = EmergencyEnv
 
1
  import json
2
  from pathlib import Path
3
+ from typing import Any, Literal, cast
4
 
5
  from app.environment.graders import grade_task
6
  from app.environment.scenarios.accident import generate_accident_case
 
84
  seed=seed,
85
  task_id=resolved_task_id,
86
  task_objective=TASKS[resolved_task_id]["objective"],
87
+ scenario_type=cast(Literal["medical", "accident", "fire"], scenario_type),
88
  scenario_name=scenario["scenario_name"],
89
+ scenario_difficulty=cast(Literal["easy", "medium", "hard"], difficulty),
90
  patient_condition=scenario["patient_condition"],
91
  required_specialization=scenario["required_specialization"],
92
  initial_critical_time_limit_minutes=scenario["critical_time_limit_minutes"],
 
121
 
122
  self.last_info = StepInfo(
123
  task_id=resolved_task_id,
124
+ difficulty=cast(Literal["easy", "medium", "hard"], difficulty),
125
  objective=TASKS[resolved_task_id]["objective"],
126
  progress_score=MIN_REWARD,
127
  reward_model=RewardModel(
 
174
  was_failed_before = selected.hospital_id in self.state_data.failed_hospitals
175
 
176
  original_traffic = selected.traffic
177
+ selected.traffic = cast(Literal["low", "medium", "high"], self._traffic_shift(selected.traffic, self.state_data.scenario_difficulty))
178
 
179
  speed = compute_speed_kmh(self.base_speed_kmh, selected.traffic)
180
  travel_time = compute_travel_time_minutes(selected.distance_km, speed)
 
288
  )
289
 
290
  info = self.last_info.model_dump() if self.last_info else {}
291
+ # Clamp reward into the strict open interval (0, 1) for the external validator.
292
+ clamped_reward = max(MIN_REWARD, min(MAX_REWARD, reward))
293
  return {
294
  "observation": self._build_observation(),
295
+ "reward": clamped_reward,
296
  "done": self.state_data.done,
297
  "info": info,
298
  }
 
305
  return Action(step=self.state_data.step, hospital_id=action, rationale="policy selection")
306
  if isinstance(action, dict):
307
  assert self.state_data is not None
308
+ return Action(
309
+ step=action.get("step", self.state_data.step),
310
+ hospital_id=str(action.get("hospital_id", "")),
311
+ rationale=action.get("rationale"),
312
+ )
 
313
  raise ValueError("Action must be Action, hospital_id string, or action dict.")
314
 
315
  def _build_hospital_states(self, scenario: dict[str, Any]) -> list[HospitalState]:
 
389
  distance_km=distance,
390
  icu_display=icu_display,
391
  icu_actual=icu_actual,
392
+ specialization=cast(Literal["cardiac", "trauma", "general"], specialization),
393
+ traffic=cast(Literal["low", "medium", "high"], traffic),
394
  )
395
  )
396
  extra_count += 1
 
445
  )
446
  reward = max(MIN_REWARD, min(MAX_REWARD, reward))
447
 
448
+ raw_delay = (
449
+ unknown_critical_penalty
450
+ + repeat_penalty
451
+ + failed_repeat_penalty
452
+ + traffic_penalty
453
+ + hidden_case_penalty
454
+ )
455
  breakdown = RewardBreakdown(
456
  survival_component=max(MIN_REWARD, min(MAX_REWARD, (status_reward + 0.5) / 1.5)),
457
  time_efficiency_component=max(MIN_REWARD, min(MAX_REWARD, 1.0 - (travel_time / 25.0))),
458
+ specialization_component=max(MIN_REWARD, min(MAX_REWARD, MAX_REWARD if self._specialization_match(selected) else 0.4)),
459
+ delay_penalty=max(MIN_REWARD, min(MAX_REWARD, raw_delay)),
 
 
 
 
 
 
 
460
  )
461
 
462
  return reward, breakdown
 
1020
  assert self.state_data is not None
1021
  for hospital in self.state_data.hospitals:
1022
  if self._rng.random() < 0.40:
1023
+ hospital.traffic = cast(Literal["low", "medium", "high"], self._traffic_shift(hospital.traffic, self.state_data.scenario_difficulty))
1024
 
1025
  if self._rng.random() < DifficultyModifier.get_icu_mismatch_probability(self.state_data.scenario_difficulty):
1026
  hospital.icu_actual = not hospital.icu_actual
 
1083
 
1084
  def _update_learning_memory(self, hospital_id: str, success: bool, reward: float) -> None:
1085
  memory = self._load_memory()
1086
+ entry = memory.get(hospital_id)
1087
+ if entry is None:
1088
+ entry = LearningEntry()
1089
 
1090
  if success:
1091
  entry.success += 1
 
1116
  progress_component = self._progress_score()
1117
  reward_component = max(MIN_REWARD, min(MAX_REWARD, self.state_data.reward))
1118
  score = 0.15 + (0.35 * reward_component) + (0.25 * progress_component)
1119
+ return max(MIN_REWARD, min(MAX_REWARD, max(0.1, min(0.85, score))))
1120
 
1121
  def _success_score(self) -> float:
1122
  assert self.state_data is not None
 
1126
  rejected_steps = sum(1 for item in self.trajectory if item.get("outcome_status") == "rejected")
1127
  route_quality = max(0.0, 1.0 - (rejected_steps / total_steps))
1128
  score = (0.45 * reward_component) + (0.40 * progress_component) + (0.15 * route_quality)
1129
+ return max(MIN_REWARD, min(MAX_REWARD, max(0.25, min(0.99, score))))
1130
 
1131
 
1132
  ACDEEnvironment = EmergencyEnv
app/models/reward.py CHANGED
@@ -1,35 +1,73 @@
1
- from typing import Literal
2
-
3
- from pydantic import BaseModel, Field
4
-
5
-
6
- class RewardBreakdown(BaseModel):
7
- survival_component: float = Field(gt=0.0, lt=1.0)
8
- time_efficiency_component: float = Field(gt=0.0, lt=1.0)
9
- specialization_component: float = Field(gt=0.0, lt=1.0)
10
- delay_penalty: float = Field(gt=0.0, lt=1.0)
11
-
12
-
13
- class RewardModel(BaseModel):
14
- value: float = Field(gt=0.0, lt=1.0)
15
- breakdown: RewardBreakdown
16
-
17
-
18
- class GraderResult(BaseModel):
19
- task_id: Literal["acde_easy", "acde_medium", "acde_hard"]
20
- difficulty: Literal["easy", "medium", "hard"]
21
- objective: str
22
- score: float = Field(gt=0.0, lt=1.0)
23
- passed: bool
24
- criteria: dict[str, float] = Field(default_factory=dict)
25
-
26
-
27
- class StepInfo(BaseModel):
28
- last_action_error: str | None = None
29
- task_id: Literal["acde_easy", "acde_medium", "acde_hard"]
30
- difficulty: Literal["easy", "medium", "hard"]
31
- objective: str
32
- progress_score: float = Field(gt=0.0, lt=1.0)
33
- reward_model: RewardModel
34
- grader: GraderResult | None = None
35
- outcome: dict[str, str] | None = None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Literal
2
+
3
+ from pydantic import BaseModel, Field, field_validator
4
+
5
+
6
+ # Strict boundaries for all score-like fields.
7
+ # The external validator requires scores strictly between 0 and 1
8
+ # (not 0.0 and not 1.0), so we clamp all values to [0.001, 0.999].
9
+ _FLOOR = 0.001
10
+ _CEIL = 0.999
11
+
12
+
13
+ def _clamp(v: float) -> float:
14
+ """Clamp a score to the open interval (0, 1)."""
15
+ return max(_FLOOR, min(_CEIL, v))
16
+
17
+
18
+ class RewardBreakdown(BaseModel):
19
+ survival_component: float = Field(ge=_FLOOR, le=_CEIL)
20
+ time_efficiency_component: float = Field(ge=_FLOOR, le=_CEIL)
21
+ specialization_component: float = Field(ge=_FLOOR, le=_CEIL)
22
+ delay_penalty: float = Field(ge=_FLOOR, le=_CEIL)
23
+
24
+ @field_validator(
25
+ "survival_component",
26
+ "time_efficiency_component",
27
+ "specialization_component",
28
+ "delay_penalty",
29
+ mode="before",
30
+ )
31
+ @classmethod
32
+ def clamp_score(cls, v: float) -> float:
33
+ return _clamp(v)
34
+
35
+
36
+ class RewardModel(BaseModel):
37
+ value: float = Field(ge=_FLOOR, le=_CEIL)
38
+ breakdown: RewardBreakdown
39
+
40
+ @field_validator("value", mode="before")
41
+ @classmethod
42
+ def clamp_value(cls, v: float) -> float:
43
+ return _clamp(v)
44
+
45
+
46
+ class GraderResult(BaseModel):
47
+ task_id: Literal["acde_easy", "acde_medium", "acde_hard"]
48
+ difficulty: Literal["easy", "medium", "hard"]
49
+ objective: str
50
+ score: float = Field(ge=_FLOOR, le=_CEIL)
51
+ passed: bool
52
+ criteria: dict[str, float] = Field(default_factory=dict)
53
+
54
+ @field_validator("score", mode="before")
55
+ @classmethod
56
+ def clamp_score(cls, v: float) -> float:
57
+ return _clamp(v)
58
+
59
+
60
+ class StepInfo(BaseModel):
61
+ last_action_error: str | None = None
62
+ task_id: Literal["acde_easy", "acde_medium", "acde_hard"]
63
+ difficulty: Literal["easy", "medium", "hard"]
64
+ objective: str
65
+ progress_score: float = Field(ge=_FLOOR, le=_CEIL)
66
+ reward_model: RewardModel
67
+ grader: GraderResult | None = None
68
+ outcome: dict[str, str] | None = None
69
+
70
+ @field_validator("progress_score", mode="before")
71
+ @classmethod
72
+ def clamp_progress(cls, v: float) -> float:
73
+ return _clamp(v)
app/models/state.py CHANGED
@@ -56,8 +56,8 @@ class EnvState(BaseModel):
56
  selected_hospital_id: str | None = None
57
  done: bool = False
58
  final_outcome: Literal["SUCCESS", "FAILURE"] | None = None
59
- final_score: float = Field(default=0.0, ge=0.0, le=1.0)
60
- reward: float = Field(default=0.0, ge=0.0, le=1.0)
61
  ambulance_status: Literal["en_route", "in_transit", "arrived", "admitted", "rerouting"] = "en_route"
62
  current_location_context: str = "incident_site"
63
  visited_hospitals: list[str] = Field(default_factory=list)
 
56
  selected_hospital_id: str | None = None
57
  done: bool = False
58
  final_outcome: Literal["SUCCESS", "FAILURE"] | None = None
59
+ final_score: float = Field(default=0.001, ge=0.001, le=0.999)
60
+ reward: float = Field(default=0.001, ge=0.001, le=0.999)
61
  ambulance_status: Literal["en_route", "in_transit", "arrived", "admitted", "rerouting"] = "en_route"
62
  current_location_context: str = "incident_site"
63
  visited_hospitals: list[str] = Field(default_factory=list)
data/learning_archive.json CHANGED
@@ -7370,6 +7370,722 @@
7370
  "best_scenario_name": "Bridge Crash (Infrastructure Blocked)",
7371
  "best_difficulty": "hard",
7372
  "best_required_specialization": "trauma"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7373
  }
7374
  },
7375
  "episodes": [
@@ -9248,6 +9964,179 @@
9248
  "H5"
9249
  ],
9250
  "timestamp": "2026-04-09T04:57:26.758443+00:00"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9251
  }
9252
  ]
9253
  }
 
7370
  "best_scenario_name": "Bridge Crash (Infrastructure Blocked)",
7371
  "best_difficulty": "hard",
7372
  "best_required_specialization": "trauma"
7373
+ },
7374
+ "865967163|acde_easy": {
7375
+ "attempts": 1,
7376
+ "best_score": 0.7872000000000001,
7377
+ "best_actions": [
7378
+ "H4",
7379
+ "H1"
7380
+ ],
7381
+ "best_steps": 2,
7382
+ "step_stats": {
7383
+ "1": {
7384
+ "H4": {
7385
+ "count": 1,
7386
+ "success": 0,
7387
+ "accepted": 0,
7388
+ "partial": 1,
7389
+ "rejected": 0,
7390
+ "total_reward": 0.274,
7391
+ "avg_reward": 0.274,
7392
+ "last_status": "PARTIAL",
7393
+ "last_reason": "Critical deterioration managed temporarily; reroute still needed",
7394
+ "success_rate": 0.0
7395
+ }
7396
+ },
7397
+ "2": {
7398
+ "H1": {
7399
+ "count": 1,
7400
+ "success": 1,
7401
+ "accepted": 1,
7402
+ "partial": 0,
7403
+ "rejected": 0,
7404
+ "total_reward": 0.8960000000000001,
7405
+ "avg_reward": 0.8960000000000001,
7406
+ "last_status": "ACCEPTED",
7407
+ "last_reason": "Patient stabilized after delayed admission",
7408
+ "success_rate": 1.0
7409
+ }
7410
+ }
7411
+ },
7412
+ "last_score": 0.7872000000000001,
7413
+ "last_success": true,
7414
+ "last_run_at": "2026-04-09T05:14:40.441962+00:00",
7415
+ "last_actions": [
7416
+ "H4",
7417
+ "H1"
7418
+ ],
7419
+ "last_required_specialization": "trauma",
7420
+ "last_scenario_type": "accident",
7421
+ "last_scenario_name": "Highway Collision (Severe)",
7422
+ "best_success": true,
7423
+ "best_scenario_name": "Highway Collision (Severe)",
7424
+ "best_difficulty": "easy",
7425
+ "best_required_specialization": "trauma"
7426
+ },
7427
+ "865967164|acde_medium": {
7428
+ "attempts": 1,
7429
+ "best_score": 0.48340000000000005,
7430
+ "best_actions": [
7431
+ "H3",
7432
+ "H2",
7433
+ "H3"
7434
+ ],
7435
+ "best_steps": 3,
7436
+ "step_stats": {
7437
+ "1": {
7438
+ "H3": {
7439
+ "count": 1,
7440
+ "success": 0,
7441
+ "accepted": 0,
7442
+ "partial": 1,
7443
+ "rejected": 0,
7444
+ "total_reward": 0.4690000000000001,
7445
+ "avg_reward": 0.4690000000000001,
7446
+ "last_status": "PARTIAL",
7447
+ "last_reason": "Admitted with delays: doctor delayed",
7448
+ "success_rate": 0.0
7449
+ }
7450
+ },
7451
+ "2": {
7452
+ "H2": {
7453
+ "count": 1,
7454
+ "success": 0,
7455
+ "accepted": 0,
7456
+ "partial": 0,
7457
+ "rejected": 1,
7458
+ "total_reward": 0.079,
7459
+ "avg_reward": 0.079,
7460
+ "last_status": "REJECTED",
7461
+ "last_reason": "Hospital cannot admit: ICU unavailable",
7462
+ "success_rate": 0.0
7463
+ }
7464
+ },
7465
+ "3": {
7466
+ "H3": {
7467
+ "count": 1,
7468
+ "success": 1,
7469
+ "accepted": 1,
7470
+ "partial": 0,
7471
+ "rejected": 0,
7472
+ "total_reward": 0.532,
7473
+ "avg_reward": 0.532,
7474
+ "last_status": "ACCEPTED",
7475
+ "last_reason": "Condition stabilized after progressive treatment",
7476
+ "success_rate": 1.0
7477
+ }
7478
+ }
7479
+ },
7480
+ "last_score": 0.48340000000000005,
7481
+ "last_success": true,
7482
+ "last_run_at": "2026-04-09T05:14:41.433914+00:00",
7483
+ "last_actions": [
7484
+ "H3",
7485
+ "H2",
7486
+ "H3"
7487
+ ],
7488
+ "last_required_specialization": "trauma",
7489
+ "last_scenario_type": "accident",
7490
+ "last_scenario_name": "Urban Pile-up (Rush Hour)",
7491
+ "best_success": true,
7492
+ "best_scenario_name": "Urban Pile-up (Rush Hour)",
7493
+ "best_difficulty": "medium",
7494
+ "best_required_specialization": "trauma"
7495
+ },
7496
+ "865967165|acde_hard": {
7497
+ "attempts": 1,
7498
+ "best_score": 0.15059999999999998,
7499
+ "best_actions": [
7500
+ "H6",
7501
+ "H2",
7502
+ "H6",
7503
+ "H3"
7504
+ ],
7505
+ "best_steps": 4,
7506
+ "step_stats": {
7507
+ "1": {
7508
+ "H6": {
7509
+ "count": 1,
7510
+ "success": 0,
7511
+ "accepted": 0,
7512
+ "partial": 0,
7513
+ "rejected": 1,
7514
+ "total_reward": 0.001,
7515
+ "avg_reward": 0.001,
7516
+ "last_status": "REJECTED",
7517
+ "last_reason": "Hospital cannot admit: ICU unavailable",
7518
+ "success_rate": 0.0
7519
+ }
7520
+ },
7521
+ "2": {
7522
+ "H2": {
7523
+ "count": 1,
7524
+ "success": 0,
7525
+ "accepted": 0,
7526
+ "partial": 0,
7527
+ "rejected": 1,
7528
+ "total_reward": 0.001,
7529
+ "avg_reward": 0.001,
7530
+ "last_status": "REJECTED",
7531
+ "last_reason": "Hospital cannot admit: No specialist available",
7532
+ "success_rate": 0.0
7533
+ }
7534
+ },
7535
+ "3": {
7536
+ "H6": {
7537
+ "count": 1,
7538
+ "success": 0,
7539
+ "accepted": 0,
7540
+ "partial": 0,
7541
+ "rejected": 1,
7542
+ "total_reward": 0.001,
7543
+ "avg_reward": 0.001,
7544
+ "last_status": "REJECTED",
7545
+ "last_reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required.",
7546
+ "success_rate": 0.0
7547
+ }
7548
+ },
7549
+ "4": {
7550
+ "H3": {
7551
+ "count": 1,
7552
+ "success": 0,
7553
+ "accepted": 0,
7554
+ "partial": 0,
7555
+ "rejected": 1,
7556
+ "total_reward": 0.001,
7557
+ "avg_reward": 0.001,
7558
+ "last_status": "REJECTED",
7559
+ "last_reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required.",
7560
+ "success_rate": 0.0
7561
+ }
7562
+ }
7563
+ },
7564
+ "last_score": 0.15059999999999998,
7565
+ "last_success": false,
7566
+ "last_run_at": "2026-04-09T05:14:43.050718+00:00",
7567
+ "last_actions": [
7568
+ "H6",
7569
+ "H2",
7570
+ "H6",
7571
+ "H3"
7572
+ ],
7573
+ "last_required_specialization": "trauma",
7574
+ "last_scenario_type": "accident",
7575
+ "last_scenario_name": "Bridge Crash (Infrastructure Blocked)",
7576
+ "best_success": false,
7577
+ "best_scenario_name": "Bridge Crash (Infrastructure Blocked)",
7578
+ "best_difficulty": "hard",
7579
+ "best_required_specialization": "trauma"
7580
+ },
7581
+ "562874771|acde_easy": {
7582
+ "attempts": 1,
7583
+ "best_score": 0.4838,
7584
+ "best_actions": [
7585
+ "H4",
7586
+ "H1",
7587
+ "H4"
7588
+ ],
7589
+ "best_steps": 3,
7590
+ "step_stats": {
7591
+ "1": {
7592
+ "H4": {
7593
+ "count": 1,
7594
+ "success": 0,
7595
+ "accepted": 0,
7596
+ "partial": 1,
7597
+ "rejected": 0,
7598
+ "total_reward": 0.234,
7599
+ "avg_reward": 0.234,
7600
+ "last_status": "PARTIAL",
7601
+ "last_reason": "Critical deterioration managed temporarily; reroute still needed",
7602
+ "success_rate": 0.0
7603
+ }
7604
+ },
7605
+ "2": {
7606
+ "H1": {
7607
+ "count": 1,
7608
+ "success": 0,
7609
+ "accepted": 0,
7610
+ "partial": 0,
7611
+ "rejected": 1,
7612
+ "total_reward": 0.008999999999999996,
7613
+ "avg_reward": 0.008999999999999996,
7614
+ "last_status": "REJECTED",
7615
+ "last_reason": "Condition became irreversible after delays",
7616
+ "success_rate": 0.0
7617
+ }
7618
+ },
7619
+ "3": {
7620
+ "H4": {
7621
+ "count": 1,
7622
+ "success": 1,
7623
+ "accepted": 1,
7624
+ "partial": 0,
7625
+ "rejected": 0,
7626
+ "total_reward": 0.6023999999999999,
7627
+ "avg_reward": 0.6023999999999999,
7628
+ "last_status": "ACCEPTED",
7629
+ "last_reason": "Emergency stabilization at last attempt",
7630
+ "success_rate": 1.0
7631
+ }
7632
+ }
7633
+ },
7634
+ "last_score": 0.4838,
7635
+ "last_success": true,
7636
+ "last_run_at": "2026-04-09T05:18:04.053307+00:00",
7637
+ "last_actions": [
7638
+ "H4",
7639
+ "H1",
7640
+ "H4"
7641
+ ],
7642
+ "last_required_specialization": "cardiac",
7643
+ "last_scenario_type": "medical",
7644
+ "last_scenario_name": "Heart Attack (Critical)",
7645
+ "best_success": true,
7646
+ "best_scenario_name": "Heart Attack (Critical)",
7647
+ "best_difficulty": "easy",
7648
+ "best_required_specialization": "cardiac"
7649
+ },
7650
+ "562874772|acde_medium": {
7651
+ "attempts": 1,
7652
+ "best_score": 0.9226500000000001,
7653
+ "best_actions": [
7654
+ "H5"
7655
+ ],
7656
+ "best_steps": 1,
7657
+ "step_stats": {
7658
+ "1": {
7659
+ "H5": {
7660
+ "count": 1,
7661
+ "success": 1,
7662
+ "accepted": 1,
7663
+ "partial": 0,
7664
+ "rejected": 0,
7665
+ "total_reward": 0.909,
7666
+ "avg_reward": 0.909,
7667
+ "last_status": "ACCEPTED",
7668
+ "last_reason": "Patient admitted and treatment began",
7669
+ "success_rate": 1.0
7670
+ }
7671
+ }
7672
+ },
7673
+ "last_score": 0.9226500000000001,
7674
+ "last_success": true,
7675
+ "last_run_at": "2026-04-09T05:18:04.467741+00:00",
7676
+ "last_actions": [
7677
+ "H5"
7678
+ ],
7679
+ "last_required_specialization": "cardiac",
7680
+ "last_scenario_type": "medical",
7681
+ "last_scenario_name": "Heart Attack (Unstable)",
7682
+ "best_success": true,
7683
+ "best_scenario_name": "Heart Attack (Unstable)",
7684
+ "best_difficulty": "medium",
7685
+ "best_required_specialization": "cardiac"
7686
+ },
7687
+ "562874773|acde_hard": {
7688
+ "attempts": 1,
7689
+ "best_score": 0.17603749999999999,
7690
+ "best_actions": [
7691
+ "H6",
7692
+ "H1",
7693
+ "H4",
7694
+ "H3"
7695
+ ],
7696
+ "best_steps": 4,
7697
+ "step_stats": {
7698
+ "1": {
7699
+ "H6": {
7700
+ "count": 1,
7701
+ "success": 0,
7702
+ "accepted": 0,
7703
+ "partial": 0,
7704
+ "rejected": 1,
7705
+ "total_reward": 0.001,
7706
+ "avg_reward": 0.001,
7707
+ "last_status": "REJECTED",
7708
+ "last_reason": "Hospital cannot admit: Hospital overloaded",
7709
+ "success_rate": 0.0
7710
+ }
7711
+ },
7712
+ "2": {
7713
+ "H1": {
7714
+ "count": 1,
7715
+ "success": 0,
7716
+ "accepted": 0,
7717
+ "partial": 1,
7718
+ "rejected": 0,
7719
+ "total_reward": 0.40800000000000014,
7720
+ "avg_reward": 0.40800000000000014,
7721
+ "last_status": "PARTIAL",
7722
+ "last_reason": "Admitted with delays: prolonged transfer strain",
7723
+ "success_rate": 0.0
7724
+ }
7725
+ },
7726
+ "3": {
7727
+ "H4": {
7728
+ "count": 1,
7729
+ "success": 0,
7730
+ "accepted": 0,
7731
+ "partial": 0,
7732
+ "rejected": 1,
7733
+ "total_reward": 0.001,
7734
+ "avg_reward": 0.001,
7735
+ "last_status": "REJECTED",
7736
+ "last_reason": "Hospital cannot admit: ICU unavailable, No specialist available",
7737
+ "success_rate": 0.0
7738
+ }
7739
+ },
7740
+ "4": {
7741
+ "H3": {
7742
+ "count": 1,
7743
+ "success": 0,
7744
+ "accepted": 0,
7745
+ "partial": 0,
7746
+ "rejected": 1,
7747
+ "total_reward": 0.001,
7748
+ "avg_reward": 0.001,
7749
+ "last_status": "REJECTED",
7750
+ "last_reason": "Hospital cannot admit: No specialist available",
7751
+ "success_rate": 0.0
7752
+ }
7753
+ }
7754
+ },
7755
+ "last_score": 0.17603749999999999,
7756
+ "last_success": false,
7757
+ "last_run_at": "2026-04-09T05:18:06.091131+00:00",
7758
+ "last_actions": [
7759
+ "H6",
7760
+ "H1",
7761
+ "H4",
7762
+ "H3"
7763
+ ],
7764
+ "last_required_specialization": "general",
7765
+ "last_scenario_type": "fire",
7766
+ "last_scenario_name": "Wildfire Front (Evacuation Gridlock)",
7767
+ "best_success": false,
7768
+ "best_scenario_name": "Wildfire Front (Evacuation Gridlock)",
7769
+ "best_difficulty": "hard",
7770
+ "best_required_specialization": "general"
7771
+ },
7772
+ "850880720|acde_easy": {
7773
+ "attempts": 1,
7774
+ "best_score": 0.99,
7775
+ "best_actions": [
7776
+ "H3"
7777
+ ],
7778
+ "best_steps": 1,
7779
+ "step_stats": {
7780
+ "1": {
7781
+ "H3": {
7782
+ "count": 1,
7783
+ "success": 1,
7784
+ "accepted": 1,
7785
+ "partial": 0,
7786
+ "rejected": 0,
7787
+ "total_reward": 0.999,
7788
+ "avg_reward": 0.999,
7789
+ "last_status": "ACCEPTED",
7790
+ "last_reason": "Patient admitted and treatment began",
7791
+ "success_rate": 1.0
7792
+ }
7793
+ }
7794
+ },
7795
+ "last_score": 0.99,
7796
+ "last_success": true,
7797
+ "last_run_at": "2026-04-09T05:18:37.126090+00:00",
7798
+ "last_actions": [
7799
+ "H3"
7800
+ ],
7801
+ "last_required_specialization": "general",
7802
+ "last_scenario_type": "fire",
7803
+ "last_scenario_name": "Apartment Fire (Smoke Inhalation)",
7804
+ "best_success": true,
7805
+ "best_scenario_name": "Apartment Fire (Smoke Inhalation)",
7806
+ "best_difficulty": "easy",
7807
+ "best_required_specialization": "general"
7808
+ },
7809
+ "850880721|acde_medium": {
7810
+ "attempts": 1,
7811
+ "best_score": 0.16988124999999998,
7812
+ "best_actions": [
7813
+ "H2",
7814
+ "H3",
7815
+ "H5",
7816
+ "H3"
7817
+ ],
7818
+ "best_steps": 4,
7819
+ "step_stats": {
7820
+ "1": {
7821
+ "H2": {
7822
+ "count": 1,
7823
+ "success": 0,
7824
+ "accepted": 0,
7825
+ "partial": 1,
7826
+ "rejected": 0,
7827
+ "total_reward": 0.13650000000000004,
7828
+ "avg_reward": 0.13650000000000004,
7829
+ "last_status": "PARTIAL",
7830
+ "last_reason": "Admitted with delays: prolonged transfer strain, hospital busy but manageable",
7831
+ "success_rate": 0.0
7832
+ }
7833
+ },
7834
+ "2": {
7835
+ "H3": {
7836
+ "count": 1,
7837
+ "success": 0,
7838
+ "accepted": 0,
7839
+ "partial": 1,
7840
+ "rejected": 0,
7841
+ "total_reward": 0.17400000000000002,
7842
+ "avg_reward": 0.17400000000000002,
7843
+ "last_status": "PARTIAL",
7844
+ "last_reason": "Condition worsened but remains temporarily transferable",
7845
+ "success_rate": 0.0
7846
+ }
7847
+ },
7848
+ "3": {
7849
+ "H5": {
7850
+ "count": 1,
7851
+ "success": 0,
7852
+ "accepted": 0,
7853
+ "partial": 0,
7854
+ "rejected": 1,
7855
+ "total_reward": 0.001,
7856
+ "avg_reward": 0.001,
7857
+ "last_status": "REJECTED",
7858
+ "last_reason": "Doctor was reassigned to another emergency at arrival",
7859
+ "success_rate": 0.0
7860
+ }
7861
+ },
7862
+ "4": {
7863
+ "H3": {
7864
+ "count": 1,
7865
+ "success": 0,
7866
+ "accepted": 0,
7867
+ "partial": 0,
7868
+ "rejected": 1,
7869
+ "total_reward": 0.001,
7870
+ "avg_reward": 0.001,
7871
+ "last_status": "REJECTED",
7872
+ "last_reason": "Condition became non-transferable during delay; immediate critical care failed",
7873
+ "success_rate": 0.0
7874
+ }
7875
+ }
7876
+ },
7877
+ "last_score": 0.16988124999999998,
7878
+ "last_success": false,
7879
+ "last_run_at": "2026-04-09T05:18:38.648867+00:00",
7880
+ "last_actions": [
7881
+ "H2",
7882
+ "H3",
7883
+ "H5",
7884
+ "H3"
7885
+ ],
7886
+ "last_required_specialization": "cardiac",
7887
+ "last_scenario_type": "medical",
7888
+ "last_scenario_name": "Heart Attack (Unstable)",
7889
+ "best_success": false,
7890
+ "best_scenario_name": "Heart Attack (Unstable)",
7891
+ "best_difficulty": "medium",
7892
+ "best_required_specialization": "cardiac"
7893
+ },
7894
+ "850880722|acde_hard": {
7895
+ "attempts": 1,
7896
+ "best_score": 0.45350000000000007,
7897
+ "best_actions": [
7898
+ "H3",
7899
+ "H5"
7900
+ ],
7901
+ "best_steps": 2,
7902
+ "step_stats": {
7903
+ "1": {
7904
+ "H3": {
7905
+ "count": 1,
7906
+ "success": 0,
7907
+ "accepted": 0,
7908
+ "partial": 0,
7909
+ "rejected": 1,
7910
+ "total_reward": 0.001,
7911
+ "avg_reward": 0.001,
7912
+ "last_status": "REJECTED",
7913
+ "last_reason": "Hospital cannot admit: ICU unavailable",
7914
+ "success_rate": 0.0
7915
+ }
7916
+ },
7917
+ "2": {
7918
+ "H5": {
7919
+ "count": 1,
7920
+ "success": 1,
7921
+ "accepted": 1,
7922
+ "partial": 0,
7923
+ "rejected": 0,
7924
+ "total_reward": 0.5820000000000001,
7925
+ "avg_reward": 0.5820000000000001,
7926
+ "last_status": "ACCEPTED",
7927
+ "last_reason": "Condition stabilized after progressive treatment",
7928
+ "success_rate": 1.0
7929
+ }
7930
+ }
7931
+ },
7932
+ "last_score": 0.45350000000000007,
7933
+ "last_success": true,
7934
+ "last_run_at": "2026-04-09T05:18:39.464469+00:00",
7935
+ "last_actions": [
7936
+ "H3",
7937
+ "H5"
7938
+ ],
7939
+ "last_required_specialization": "cardiac",
7940
+ "last_scenario_type": "medical",
7941
+ "last_scenario_name": "Mass Cardiac Event (Overload)",
7942
+ "best_success": true,
7943
+ "best_scenario_name": "Mass Cardiac Event (Overload)",
7944
+ "best_difficulty": "hard",
7945
+ "best_required_specialization": "cardiac"
7946
+ },
7947
+ "600335717|acde_easy": {
7948
+ "attempts": 1,
7949
+ "best_score": 0.2334,
7950
+ "best_actions": [
7951
+ "H1"
7952
+ ],
7953
+ "best_steps": 1,
7954
+ "step_stats": {
7955
+ "1": {
7956
+ "H1": {
7957
+ "count": 1,
7958
+ "success": 0,
7959
+ "accepted": 0,
7960
+ "partial": 0,
7961
+ "rejected": 1,
7962
+ "total_reward": 0.139,
7963
+ "avg_reward": 0.139,
7964
+ "last_status": "REJECTED",
7965
+ "last_reason": "Condition became non-transferable during delay; immediate critical care failed",
7966
+ "success_rate": 0.0
7967
+ }
7968
+ }
7969
+ },
7970
+ "last_score": 0.2334,
7971
+ "last_success": false,
7972
+ "last_run_at": "2026-04-09T05:19:11.834510+00:00",
7973
+ "last_actions": [
7974
+ "H1"
7975
+ ],
7976
+ "last_required_specialization": "cardiac",
7977
+ "last_scenario_type": "medical",
7978
+ "last_scenario_name": "Heart Attack (Critical)",
7979
+ "best_success": false,
7980
+ "best_scenario_name": "Heart Attack (Critical)",
7981
+ "best_difficulty": "easy",
7982
+ "best_required_specialization": "cardiac"
7983
+ },
7984
+ "600335718|acde_medium": {
7985
+ "attempts": 1,
7986
+ "best_score": 0.43220000000000003,
7987
+ "best_actions": [
7988
+ "H2",
7989
+ "H4"
7990
+ ],
7991
+ "best_steps": 2,
7992
+ "step_stats": {
7993
+ "1": {
7994
+ "H2": {
7995
+ "count": 1,
7996
+ "success": 0,
7997
+ "accepted": 0,
7998
+ "partial": 0,
7999
+ "rejected": 1,
8000
+ "total_reward": 0.109,
8001
+ "avg_reward": 0.109,
8002
+ "last_status": "REJECTED",
8003
+ "last_reason": "Hospital cannot admit: ICU unavailable",
8004
+ "success_rate": 0.0
8005
+ }
8006
+ },
8007
+ "2": {
8008
+ "H4": {
8009
+ "count": 1,
8010
+ "success": 1,
8011
+ "accepted": 1,
8012
+ "partial": 0,
8013
+ "rejected": 0,
8014
+ "total_reward": 0.516,
8015
+ "avg_reward": 0.516,
8016
+ "last_status": "ACCEPTED",
8017
+ "last_reason": "Patient stabilized after delayed admission",
8018
+ "success_rate": 1.0
8019
+ }
8020
+ }
8021
+ },
8022
+ "last_score": 0.43220000000000003,
8023
+ "last_success": true,
8024
+ "last_run_at": "2026-04-09T05:19:12.461036+00:00",
8025
+ "last_actions": [
8026
+ "H2",
8027
+ "H4"
8028
+ ],
8029
+ "last_required_specialization": "trauma",
8030
+ "last_scenario_type": "accident",
8031
+ "last_scenario_name": "Urban Pile-up (Rush Hour)",
8032
+ "best_success": true,
8033
+ "best_scenario_name": "Urban Pile-up (Rush Hour)",
8034
+ "best_difficulty": "medium",
8035
+ "best_required_specialization": "trauma"
8036
+ },
8037
+ "600335719|acde_hard": {
8038
+ "attempts": 1,
8039
+ "best_score": 0.15059999999999998,
8040
+ "best_actions": [
8041
+ "H6",
8042
+ "H5"
8043
+ ],
8044
+ "best_steps": 2,
8045
+ "step_stats": {
8046
+ "1": {
8047
+ "H6": {
8048
+ "count": 1,
8049
+ "success": 0,
8050
+ "accepted": 0,
8051
+ "partial": 0,
8052
+ "rejected": 1,
8053
+ "total_reward": 0.001,
8054
+ "avg_reward": 0.001,
8055
+ "last_status": "REJECTED",
8056
+ "last_reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required.",
8057
+ "success_rate": 0.0
8058
+ }
8059
+ },
8060
+ "2": {
8061
+ "H5": {
8062
+ "count": 1,
8063
+ "success": 0,
8064
+ "accepted": 0,
8065
+ "partial": 0,
8066
+ "rejected": 1,
8067
+ "total_reward": 0.001,
8068
+ "avg_reward": 0.001,
8069
+ "last_status": "REJECTED",
8070
+ "last_reason": "Condition became non-transferable during delay; immediate critical care failed",
8071
+ "success_rate": 0.0
8072
+ }
8073
+ }
8074
+ },
8075
+ "last_score": 0.15059999999999998,
8076
+ "last_success": false,
8077
+ "last_run_at": "2026-04-09T05:19:13.261267+00:00",
8078
+ "last_actions": [
8079
+ "H6",
8080
+ "H5"
8081
+ ],
8082
+ "last_required_specialization": "general",
8083
+ "last_scenario_type": "fire",
8084
+ "last_scenario_name": "Wildfire Front (Evacuation Gridlock)",
8085
+ "best_success": false,
8086
+ "best_scenario_name": "Wildfire Front (Evacuation Gridlock)",
8087
+ "best_difficulty": "hard",
8088
+ "best_required_specialization": "general"
8089
  }
8090
  },
8091
  "episodes": [
 
9964
  "H5"
9965
  ],
9966
  "timestamp": "2026-04-09T04:57:26.758443+00:00"
9967
+ },
9968
+ {
9969
+ "seed": 865967163,
9970
+ "task_id": "acde_easy",
9971
+ "difficulty": "easy",
9972
+ "required_specialization": "trauma",
9973
+ "scenario_name": "Highway Collision (Severe)",
9974
+ "score": 0.7872000000000001,
9975
+ "success": true,
9976
+ "actions": [
9977
+ "H4",
9978
+ "H1"
9979
+ ],
9980
+ "timestamp": "2026-04-09T05:14:40.441962+00:00"
9981
+ },
9982
+ {
9983
+ "seed": 865967164,
9984
+ "task_id": "acde_medium",
9985
+ "difficulty": "medium",
9986
+ "required_specialization": "trauma",
9987
+ "scenario_name": "Urban Pile-up (Rush Hour)",
9988
+ "score": 0.48340000000000005,
9989
+ "success": true,
9990
+ "actions": [
9991
+ "H3",
9992
+ "H2",
9993
+ "H3"
9994
+ ],
9995
+ "timestamp": "2026-04-09T05:14:41.433914+00:00"
9996
+ },
9997
+ {
9998
+ "seed": 865967165,
9999
+ "task_id": "acde_hard",
10000
+ "difficulty": "hard",
10001
+ "required_specialization": "trauma",
10002
+ "scenario_name": "Bridge Crash (Infrastructure Blocked)",
10003
+ "score": 0.15059999999999998,
10004
+ "success": false,
10005
+ "actions": [
10006
+ "H6",
10007
+ "H2",
10008
+ "H6",
10009
+ "H3"
10010
+ ],
10011
+ "timestamp": "2026-04-09T05:14:43.050718+00:00"
10012
+ },
10013
+ {
10014
+ "seed": 562874771,
10015
+ "task_id": "acde_easy",
10016
+ "difficulty": "easy",
10017
+ "required_specialization": "cardiac",
10018
+ "scenario_name": "Heart Attack (Critical)",
10019
+ "score": 0.4838,
10020
+ "success": true,
10021
+ "actions": [
10022
+ "H4",
10023
+ "H1",
10024
+ "H4"
10025
+ ],
10026
+ "timestamp": "2026-04-09T05:18:04.053307+00:00"
10027
+ },
10028
+ {
10029
+ "seed": 562874772,
10030
+ "task_id": "acde_medium",
10031
+ "difficulty": "medium",
10032
+ "required_specialization": "cardiac",
10033
+ "scenario_name": "Heart Attack (Unstable)",
10034
+ "score": 0.9226500000000001,
10035
+ "success": true,
10036
+ "actions": [
10037
+ "H5"
10038
+ ],
10039
+ "timestamp": "2026-04-09T05:18:04.467741+00:00"
10040
+ },
10041
+ {
10042
+ "seed": 562874773,
10043
+ "task_id": "acde_hard",
10044
+ "difficulty": "hard",
10045
+ "required_specialization": "general",
10046
+ "scenario_name": "Wildfire Front (Evacuation Gridlock)",
10047
+ "score": 0.17603749999999999,
10048
+ "success": false,
10049
+ "actions": [
10050
+ "H6",
10051
+ "H1",
10052
+ "H4",
10053
+ "H3"
10054
+ ],
10055
+ "timestamp": "2026-04-09T05:18:06.091131+00:00"
10056
+ },
10057
+ {
10058
+ "seed": 850880720,
10059
+ "task_id": "acde_easy",
10060
+ "difficulty": "easy",
10061
+ "required_specialization": "general",
10062
+ "scenario_name": "Apartment Fire (Smoke Inhalation)",
10063
+ "score": 0.99,
10064
+ "success": true,
10065
+ "actions": [
10066
+ "H3"
10067
+ ],
10068
+ "timestamp": "2026-04-09T05:18:37.126090+00:00"
10069
+ },
10070
+ {
10071
+ "seed": 850880721,
10072
+ "task_id": "acde_medium",
10073
+ "difficulty": "medium",
10074
+ "required_specialization": "cardiac",
10075
+ "scenario_name": "Heart Attack (Unstable)",
10076
+ "score": 0.16988124999999998,
10077
+ "success": false,
10078
+ "actions": [
10079
+ "H2",
10080
+ "H3",
10081
+ "H5",
10082
+ "H3"
10083
+ ],
10084
+ "timestamp": "2026-04-09T05:18:38.648867+00:00"
10085
+ },
10086
+ {
10087
+ "seed": 850880722,
10088
+ "task_id": "acde_hard",
10089
+ "difficulty": "hard",
10090
+ "required_specialization": "cardiac",
10091
+ "scenario_name": "Mass Cardiac Event (Overload)",
10092
+ "score": 0.45350000000000007,
10093
+ "success": true,
10094
+ "actions": [
10095
+ "H3",
10096
+ "H5"
10097
+ ],
10098
+ "timestamp": "2026-04-09T05:18:39.464469+00:00"
10099
+ },
10100
+ {
10101
+ "seed": 600335717,
10102
+ "task_id": "acde_easy",
10103
+ "difficulty": "easy",
10104
+ "required_specialization": "cardiac",
10105
+ "scenario_name": "Heart Attack (Critical)",
10106
+ "score": 0.2334,
10107
+ "success": false,
10108
+ "actions": [
10109
+ "H1"
10110
+ ],
10111
+ "timestamp": "2026-04-09T05:19:11.834510+00:00"
10112
+ },
10113
+ {
10114
+ "seed": 600335718,
10115
+ "task_id": "acde_medium",
10116
+ "difficulty": "medium",
10117
+ "required_specialization": "trauma",
10118
+ "scenario_name": "Urban Pile-up (Rush Hour)",
10119
+ "score": 0.43220000000000003,
10120
+ "success": true,
10121
+ "actions": [
10122
+ "H2",
10123
+ "H4"
10124
+ ],
10125
+ "timestamp": "2026-04-09T05:19:12.461036+00:00"
10126
+ },
10127
+ {
10128
+ "seed": 600335719,
10129
+ "task_id": "acde_hard",
10130
+ "difficulty": "hard",
10131
+ "required_specialization": "general",
10132
+ "scenario_name": "Wildfire Front (Evacuation Gridlock)",
10133
+ "score": 0.15059999999999998,
10134
+ "success": false,
10135
+ "actions": [
10136
+ "H6",
10137
+ "H5"
10138
+ ],
10139
+ "timestamp": "2026-04-09T05:19:13.261267+00:00"
10140
  }
10141
  ]
10142
  }
data/learning_memory.json CHANGED
@@ -1,44 +1,44 @@
1
  {
2
  "H2": {
3
- "success": 109,
4
- "fail": 211,
5
- "avg": 0.3393390625000006,
6
- "accepted": 109,
7
- "rejected": 211
8
  },
9
  "H6": {
10
  "success": 50,
11
- "fail": 140,
12
- "avg": 0.2986710526315795,
13
  "accepted": 50,
14
- "rejected": 140
15
  },
16
  "H5": {
17
- "success": 112,
18
- "fail": 176,
19
- "avg": 0.38393784722222196,
20
- "accepted": 112,
21
- "rejected": 176
22
  },
23
  "H1": {
24
- "success": 110,
25
- "fail": 107,
26
- "avg": 0.4174359447004605,
27
- "accepted": 110,
28
- "rejected": 107
29
  },
30
  "H3": {
31
- "success": 97,
32
- "fail": 152,
33
- "avg": 0.35650481927710814,
34
- "accepted": 97,
35
- "rejected": 152
36
  },
37
  "H4": {
38
- "success": 37,
39
- "fail": 102,
40
- "avg": 0.3546151079136686,
41
- "accepted": 37,
42
- "rejected": 102
43
  }
44
  }
 
1
  {
2
  "H2": {
3
+ "success": 110,
4
+ "fail": 212,
5
+ "avg": 0.337900621118013,
6
+ "accepted": 110,
7
+ "rejected": 212
8
  },
9
  "H6": {
10
  "success": 50,
11
+ "fail": 143,
12
+ "avg": 0.2940440414507777,
13
  "accepted": 50,
14
+ "rejected": 143
15
  },
16
  "H5": {
17
+ "success": 114,
18
+ "fail": 178,
19
+ "avg": 0.38379143835616414,
20
+ "accepted": 114,
21
+ "rejected": 178
22
  },
23
  "H1": {
24
+ "success": 111,
25
+ "fail": 110,
26
+ "avg": 0.41240090497737525,
27
+ "accepted": 111,
28
+ "rejected": 110
29
  },
30
  "H3": {
31
+ "success": 102,
32
+ "fail": 156,
33
+ "avg": 0.3559833333333331,
34
+ "accepted": 102,
35
+ "rejected": 156
36
  },
37
  "H4": {
38
+ "success": 41,
39
+ "fail": 105,
40
+ "avg": 0.34951301369862975,
41
+ "accepted": 41,
42
+ "rejected": 105
43
  }
44
  }
data/trajectory_history.jsonl CHANGED
@@ -326,3 +326,32 @@
326
  {"seed": 44, "task": "acde_hard", "difficulty": "hard", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H5", "policy_score": 0.4862574941416685, "strategy": "safe policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable"}, "reward": 0.001}
327
  {"seed": 44, "task": "acde_hard", "difficulty": "hard", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H2"], "visited_hospitals": ["H2"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H2", "policy_score": 0.07027740357273131, "strategy": "risk-aware policy + immediate-retry override"}, "outcome": {"status": "REJECTED", "reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required."}, "reward": 0.001}
328
  {"seed": 44, "task": "acde_hard", "difficulty": "hard", "step": 3, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H2"], "visited_hospitals": ["H2"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H5", "policy_score": 0.47341627825998767, "strategy": "risk-aware policy"}, "outcome": {"status": "REJECTED", "reason": "Condition became non-transferable during delay; immediate critical care failed"}, "reward": 0.001}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
326
  {"seed": 44, "task": "acde_hard", "difficulty": "hard", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H5", "policy_score": 0.4862574941416685, "strategy": "safe policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable"}, "reward": 0.001}
327
  {"seed": 44, "task": "acde_hard", "difficulty": "hard", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H2"], "visited_hospitals": ["H2"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H2", "policy_score": 0.07027740357273131, "strategy": "risk-aware policy + immediate-retry override"}, "outcome": {"status": "REJECTED", "reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required."}, "reward": 0.001}
328
  {"seed": 44, "task": "acde_hard", "difficulty": "hard", "step": 3, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H2"], "visited_hospitals": ["H2"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H5", "policy_score": 0.47341627825998767, "strategy": "risk-aware policy"}, "outcome": {"status": "REJECTED", "reason": "Condition became non-transferable during delay; immediate critical care failed"}, "reward": 0.001}
329
+ {"seed": 865967163, "task": "acde_easy", "difficulty": "easy", "step": 1, "state": {"patient_condition": "serious", "remaining_time_minutes": 20.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H4", "policy_score": 0.28522225923842554, "strategy": "safe policy"}, "outcome": {"status": "PARTIAL", "reason": "Critical deterioration managed temporarily; reroute still needed"}, "reward": 0.274}
330
+ {"seed": 865967163, "task": "acde_easy", "difficulty": "easy", "step": 2, "state": {"patient_condition": "stable", "remaining_time_minutes": 20.0, "failed_hospitals": [], "visited_hospitals": ["H4"], "ambulance_status": "in_transit"}, "action": {"hospital_id": "H1", "policy_score": 0.430398797272352, "strategy": "balanced policy"}, "outcome": {"status": "ACCEPTED", "reason": "Patient stabilized after delayed admission"}, "reward": 0.8960000000000001}
331
+ {"seed": 865967164, "task": "acde_medium", "difficulty": "medium", "step": 1, "state": {"patient_condition": "serious", "remaining_time_minutes": 17.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H3", "policy_score": 0.3470070739535391, "strategy": "safe policy + anti-stupidity guard"}, "outcome": {"status": "PARTIAL", "reason": "Admitted with delays: doctor delayed"}, "reward": 0.4690000000000001}
332
+ {"seed": 865967164, "task": "acde_medium", "difficulty": "medium", "step": 2, "state": {"patient_condition": "serious", "remaining_time_minutes": 17.0, "failed_hospitals": [], "visited_hospitals": ["H3"], "ambulance_status": "in_transit"}, "action": {"hospital_id": "H2", "policy_score": 0.3155267186726896, "strategy": "balanced policy + anti-stupidity guard"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable"}, "reward": 0.079}
333
+ {"seed": 865967164, "task": "acde_medium", "difficulty": "medium", "step": 3, "state": {"patient_condition": "serious", "remaining_time_minutes": 17.0, "failed_hospitals": ["H2"], "visited_hospitals": ["H3", "H2"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H3", "policy_score": 0.4258905882454945, "strategy": "risk-aware policy + anti-stupidity guard"}, "outcome": {"status": "ACCEPTED", "reason": "Condition stabilized after progressive treatment"}, "reward": 0.532}
334
+ {"seed": 865967165, "task": "acde_hard", "difficulty": "hard", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H6", "policy_score": 0.3076474962108312, "strategy": "safe policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable"}, "reward": 0.001}
335
+ {"seed": 865967165, "task": "acde_hard", "difficulty": "hard", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H6"], "visited_hospitals": ["H6"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H2", "policy_score": 0.3035629436259161, "strategy": "risk-aware policy + guided-exploration"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: No specialist available"}, "reward": 0.001}
336
+ {"seed": 865967165, "task": "acde_hard", "difficulty": "hard", "step": 3, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H6", "H4"], "visited_hospitals": ["H6", "H4"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H6", "policy_score": 0.11129517908464792, "strategy": "risk-aware policy + immediate-retry override"}, "outcome": {"status": "REJECTED", "reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required."}, "reward": 0.001}
337
+ {"seed": 865967165, "task": "acde_hard", "difficulty": "hard", "step": 4, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H6", "H4"], "visited_hospitals": ["H6", "H4"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H3", "policy_score": 0.29586549899480935, "strategy": "risk-aware policy + anti-stupidity guard"}, "outcome": {"status": "REJECTED", "reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required."}, "reward": 0.001}
338
+ {"seed": 562874771, "task": "acde_easy", "difficulty": "easy", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 16.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H4", "policy_score": 0.2712048097577652, "strategy": "safe policy + critical triage"}, "outcome": {"status": "PARTIAL", "reason": "Critical deterioration managed temporarily; reroute still needed"}, "reward": 0.234}
339
+ {"seed": 562874771, "task": "acde_easy", "difficulty": "easy", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 16.0, "failed_hospitals": [], "visited_hospitals": ["H4"], "ambulance_status": "in_transit"}, "action": {"hospital_id": "H1", "policy_score": 0.35970778218903066, "strategy": "balanced policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Condition became irreversible after delays"}, "reward": 0.008999999999999996}
340
+ {"seed": 562874771, "task": "acde_easy", "difficulty": "easy", "step": 3, "state": {"patient_condition": "critical", "remaining_time_minutes": 16.0, "failed_hospitals": ["H1"], "visited_hospitals": ["H4", "H1"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H4", "policy_score": 0.4523870351936169, "strategy": "risk-aware policy + anti-stupidity guard"}, "outcome": {"status": "ACCEPTED", "reason": "Emergency stabilization at last attempt"}, "reward": 0.6023999999999999}
341
+ {"seed": 562874772, "task": "acde_medium", "difficulty": "medium", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 14.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H5", "policy_score": 0.330475874967317, "strategy": "safe policy + critical triage"}, "outcome": {"status": "ACCEPTED", "reason": "Patient admitted and treatment began"}, "reward": 0.909}
342
+ {"seed": 562874773, "task": "acde_hard", "difficulty": "hard", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 11.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H6", "policy_score": 0.16730626096306447, "strategy": "safe policy"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: Hospital overloaded"}, "reward": 0.001}
343
+ {"seed": 562874773, "task": "acde_hard", "difficulty": "hard", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 11.0, "failed_hospitals": ["H5"], "visited_hospitals": ["H5"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H1", "policy_score": 0.38920337366242297, "strategy": "risk-aware policy + anti-stupidity guard"}, "outcome": {"status": "PARTIAL", "reason": "Admitted with delays: prolonged transfer strain"}, "reward": 0.40800000000000014}
344
+ {"seed": 562874773, "task": "acde_hard", "difficulty": "hard", "step": 3, "state": {"patient_condition": "critical", "remaining_time_minutes": 11.0, "failed_hospitals": ["H5"], "visited_hospitals": ["H5", "H1"], "ambulance_status": "in_transit"}, "action": {"hospital_id": "H4", "policy_score": 0.09872350410300806, "strategy": "balanced policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable, No specialist available"}, "reward": 0.001}
345
+ {"seed": 562874773, "task": "acde_hard", "difficulty": "hard", "step": 4, "state": {"patient_condition": "critical", "remaining_time_minutes": 11.0, "failed_hospitals": ["H5", "H4"], "visited_hospitals": ["H5", "H1", "H4"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H3", "policy_score": 0.23065044082853245, "strategy": "risk-aware policy"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: No specialist available"}, "reward": 0.001}
346
+ {"seed": 850880720, "task": "acde_easy", "difficulty": "easy", "step": 1, "state": {"patient_condition": "serious", "remaining_time_minutes": 18.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H3", "policy_score": 0.29399842964915673, "strategy": "safe policy"}, "outcome": {"status": "ACCEPTED", "reason": "Patient admitted and treatment began"}, "reward": 0.999}
347
+ {"seed": 850880721, "task": "acde_medium", "difficulty": "medium", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 14.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H2", "policy_score": 0.4445027887294011, "strategy": "safe policy + anti-stupidity guard"}, "outcome": {"status": "PARTIAL", "reason": "Admitted with delays: prolonged transfer strain, hospital busy but manageable"}, "reward": 0.13650000000000004}
348
+ {"seed": 850880721, "task": "acde_medium", "difficulty": "medium", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 14.0, "failed_hospitals": [], "visited_hospitals": ["H2"], "ambulance_status": "in_transit"}, "action": {"hospital_id": "H3", "policy_score": 0.4530366133689682, "strategy": "balanced policy + critical triage"}, "outcome": {"status": "PARTIAL", "reason": "Condition worsened but remains temporarily transferable"}, "reward": 0.17400000000000002}
349
+ {"seed": 850880721, "task": "acde_medium", "difficulty": "medium", "step": 3, "state": {"patient_condition": "critical", "remaining_time_minutes": 14.0, "failed_hospitals": [], "visited_hospitals": ["H2", "H3"], "ambulance_status": "in_transit"}, "action": {"hospital_id": "H5", "policy_score": 0.36233580012122824, "strategy": "balanced policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Doctor was reassigned to another emergency at arrival"}, "reward": 0.001}
350
+ {"seed": 850880721, "task": "acde_medium", "difficulty": "medium", "step": 4, "state": {"patient_condition": "critical", "remaining_time_minutes": 14.0, "failed_hospitals": ["H1"], "visited_hospitals": ["H2", "H3", "H1"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H3", "policy_score": 0.2867098759261258, "strategy": "risk-aware policy + immediate-retry override"}, "outcome": {"status": "REJECTED", "reason": "Condition became non-transferable during delay; immediate critical care failed"}, "reward": 0.001}
351
+ {"seed": 850880722, "task": "acde_hard", "difficulty": "hard", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 12.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H3", "policy_score": 0.4706955388080195, "strategy": "safe policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable"}, "reward": 0.001}
352
+ {"seed": 850880722, "task": "acde_hard", "difficulty": "hard", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 12.0, "failed_hospitals": ["H3"], "visited_hospitals": ["H3"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H5", "policy_score": 0.46941242001424005, "strategy": "risk-aware policy"}, "outcome": {"status": "ACCEPTED", "reason": "Condition stabilized after progressive treatment"}, "reward": 0.5820000000000001}
353
+ {"seed": 600335717, "task": "acde_easy", "difficulty": "easy", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 16.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H1", "policy_score": 0.3186401093335327, "strategy": "safe policy + critical triage + guided-exploration"}, "outcome": {"status": "REJECTED", "reason": "Condition became non-transferable during delay; immediate critical care failed"}, "reward": 0.139}
354
+ {"seed": 600335718, "task": "acde_medium", "difficulty": "medium", "step": 1, "state": {"patient_condition": "serious", "remaining_time_minutes": 17.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H2", "policy_score": 0.4037159167006607, "strategy": "safe policy"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable"}, "reward": 0.109}
355
+ {"seed": 600335718, "task": "acde_medium", "difficulty": "medium", "step": 2, "state": {"patient_condition": "serious", "remaining_time_minutes": 17.0, "failed_hospitals": ["H4"], "visited_hospitals": ["H4"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H4", "policy_score": 0.07313118251968914, "strategy": "risk-aware policy + anti-stupidity guard + immediate-retry override"}, "outcome": {"status": "ACCEPTED", "reason": "Patient stabilized after delayed admission"}, "reward": 0.516}
356
+ {"seed": 600335719, "task": "acde_hard", "difficulty": "hard", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 11.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H6", "policy_score": 0.3244976864117649, "strategy": "safe policy + critical triage + anti-stupidity guard"}, "outcome": {"status": "REJECTED", "reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required."}, "reward": 0.001}
357
+ {"seed": 600335719, "task": "acde_hard", "difficulty": "hard", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 11.0, "failed_hospitals": ["H6"], "visited_hospitals": ["H6"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H5", "policy_score": 0.2976383394515107, "strategy": "risk-aware policy"}, "outcome": {"status": "REJECTED", "reason": "Condition became non-transferable during delay; immediate critical care failed"}, "reward": 0.001}
openenv.yaml CHANGED
@@ -24,5 +24,5 @@ contracts:
24
  reward: app.models.reward.RewardModel
25
  info: app.models.reward.StepInfo
26
  state: app.models.state.EnvState
27
- reward_range: [0.0, 1.0]
28
  done_type: boolean
 
24
  reward: app.models.reward.RewardModel
25
  info: app.models.reward.StepInfo
26
  state: app.models.state.EnvState
27
+ reward_range: [0.001, 0.999]
28
  done_type: boolean
pyproject.toml CHANGED
@@ -23,3 +23,6 @@ build-backend = "setuptools.build_meta"
23
  [tool.setuptools.packages.find]
24
  include = ["app*", "server*"]
25
  exclude = ["data*"]
 
 
 
 
23
  [tool.setuptools.packages.find]
24
  include = ["app*", "server*"]
25
  exclude = ["data*"]
26
+
27
+ [tool.pyrefly]
28
+ search_path = ["."]