| --- |
| title: Disaster Response Coordination Environment |
| emoji: 🚨 |
| colorFrom: red |
| colorTo: yellow |
| sdk: docker |
| pinned: false |
| app_port: 8000 |
| base_path: /web |
| tags: |
| - openenv |
| --- |
| |
| # Disaster Response Coordination Environment |
|
|
| This OpenEnv environment simulates an Emergency Operations Center allocating scarce resources across simultaneous disaster targets. The agent must reduce preventable deaths, critical injuries, exposure harm, and infrastructure failure across a ladder of progressively harder scenes. |
|
|
| ## Motivation |
|
|
| This is a real-world coordination problem rather than a toy task. It evaluates whether an agent can: |
|
|
| - prioritize under time pressure |
| - reason about vulnerability and deadlines |
| - handle mixed rescue and infrastructure triage |
| - avoid harmful but superficially plausible actions |
|
|
| The environment is designed to provide rich per-step reward while keeping the true harm model hidden from the agent. |
|
|
| ## Action Space |
|
|
| Each turn the agent submits a `DisasterAction` with zero or more resource assignments: |
|
|
| ```json |
| { |
| "assignments": [ |
| {"resource_id": "engineering_strike", "target_id": "hospital_power"}, |
| {"resource_id": "tunnel_rescue", "target_id": "tunnel_train"} |
| ] |
| } |
| ``` |
|
|
| Constraints: |
|
|
| - a resource may be assigned at most once per turn |
| - unavailable resources must not be assigned |
| - resolved or failed targets should not be assigned |
| - assignments with no capability overlap are ineffective and penalized |
|
|
| ## Observation Space |
|
|
| The agent sees: |
|
|
| - scene id, name, and level |
| - narrative briefing |
| - visible target state: |
| - status |
| - estimated people |
| - observed risk |
| - `critical_now` |
| - `priority_band` |
| - vulnerability label |
| - progress |
| - time remaining |
| - recommended capabilities |
| - visible resource state: |
| - capabilities |
| - availability |
| - remaining uses |
| - available-until turn |
| - structured feedback from the previous step |
|
|
| The latent harm model remains hidden so the policy cannot self-score. |
|
|
| ## Task Ladder |
|
|
| The environment contains a genuine easy-to-hard difficulty range: |
|
|
| 1. `scene_1`: Flash Flood, Two Rescue Calls, One Boat |
| 2. `scene_2`: Flood Rescue vs Medical Transport |
| 3. `scene_3`: Building Collapse vs Highway Hazmat Crash |
| 4. `scene_4`: Wildfire Suburb vs Nursing Home |
| 5. `scene_5`: Hospital Backup Power vs Tunnel Train Entrapment |
| 6. `scene_6`: Toxic Plume vs Downtown Office Tower Fire |
| 7. `scene_7`: Bridge Collapse During VIP Event Weekend |
| 8. `scene_8`: Regional Multi-Disaster with Scarce Air Assets |
|
|
| For submission purposes, this exceeds the minimum requirement of three tasks with easy, medium, and hard coverage. |
|
|
| ## Reward And Grading |
|
|
| Per-step reward is dense and shaped: |
|
|
| - positive reward for reducing latent remaining harm |
| - penalties for invalid actions |
| - penalties for ineffective assignments |
| - penalties for leaving compatible resources idle during critical windows |
| - penalties for deadline misses, churn, and failed targets |
|
|
| Final evaluation uses a normalized score against a no-op baseline: |
|
|
| - `final_score` in `[0, 100]` |
| - `grader_score = final_score / 100.0` in `[0.0, 1.0]` |
|
|
| This keeps grading deterministic and reproducible while preserving a meaningful learning signal. |
|
|
| ## Baselines |
|
|
| The repo-root [`inference.py`](/c:/Users/pavan/meta-pytorch-hackathon/inference.py) supports: |
|
|
| - `heuristic` |
| - `random` |
| - `llm` |
|
|
| Recent observed behavior: |
|
|
| - strong scenes: `scene_4`, `scene_6`, `scene_7` |
| - middling scenes: `scene_2`, `scene_5` |
| - weak scenes: `scene_1`, `scene_3` |
| - hard-fail scene: `scene_8` |
|
|
| ## Validate Locally |
|
|
| From this directory: |
|
|
| ```powershell |
| .\.venv\Scripts\openenv.exe validate |
| ``` |
|
|
| ## Run Locally |
|
|
| Run the API locally: |
|
|
| ```powershell |
| .\.venv\Scripts\python.exe -m server.app |
| ``` |
|
|
| Or: |
|
|
| ```powershell |
| uvicorn server.app:app --host 0.0.0.0 --port 8000 |
| ``` |
|
|
| ## Docker |
|
|
| Build from this directory: |
|
|
| ```powershell |
| docker build -t hack_meta-env:latest -f server/Dockerfile . |
| ``` |
|
|
| Run: |
|
|
| ```powershell |
| docker run --rm -p 8000:8000 hack_meta-env:latest |
| ``` |
|
|
| ## Hugging Face Space |
|
|
| This package directory is the deployable environment root. Deploy from `hack_meta/`, not from the repo root. |
|
|
| Before pushing: |
|
|
| 1. configure environment secrets in the Space settings |
| 2. validate locally |
| 3. confirm `reset()` responds successfully |
|
|
| ## Package Layout |
|
|
| ```text |
| hack_meta/ |
| |-- client.py |
| |-- models.py |
| |-- openenv.yaml |
| |-- pyproject.toml |
| |-- README.md |
| `-- server/ |
| |-- app.py |
| |-- Dockerfile |
| `-- hack_meta_environment.py |
| ``` |
|
|