File size: 1,515 Bytes
363abf3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from env import WildfireEnv
from env.briefing import briefing_to_text
from env.serialization import serialize_observation
from agents.heuristic_agent import HeuristicAgent


def test_briefing_generated_on_reset():
    env = WildfireEnv()
    obs = env.reset(task_id="medium", seed=42)
    assert obs.briefing is not None, "Briefing should be present on first obs"
    assert len(obs.briefing.priority_populated_zones) >= 1, "Should have at least 1 priority zone"
    assert obs.briefing.incident_id != ""
    assert obs.briefing.ignition_cause != ""


def test_briefing_adherence_bonus():
    env = WildfireEnv()
    agent = HeuristicAgent()
    obs = env.reset(task_id="easy", seed=42)

    total_reward = 0.0
    while not env.done:
        action = agent.act(obs)
        result = env.step(action)
        total_reward += result.reward
        obs = result.observation

    final = env.state()
    pop_lost = final.get("population_lost", 0)
    # On easy with heuristic seed=42, all pop should be saved -> briefing bonus applies
    if pop_lost == 0:
        assert total_reward > 5.0, (
            f"Expected reward > 5.0 (includes +1 briefing bonus) but got {total_reward}"
        )


def test_briefing_in_serialized_prompt():
    env = WildfireEnv()
    obs = env.reset(task_id="medium", seed=42)
    text = serialize_observation(obs, 0, 150)
    assert "OPERATIONAL BRIEFING" in text, "Briefing header missing from serialized prompt"
    assert "PRIORITY 1" in text
    assert "Commander's intent" in text