import proteus.game.scenarios # noqa: F401 (registers scenarios) from proteus.game.scenarios.base import Scenario, get_scenario def test_scenario_base_memory_brief_default_empty(): assert Scenario.memory_brief == "" from proteus.game.agents import VanillaAgent from proteus.game.engine.difficulty import Difficulty from proteus.providers import FakeProvider def _agent(action: str = "down", n: int = 20) -> VanillaAgent: return VanillaAgent(FakeProvider([f"ACTION: {action}"] * n, model_name="demo")) def test_generate_memory_is_deterministic_and_records_episode(): from proteus.game.runtime.memory_gen import generate_memory ck = generate_memory( "template", _agent(), difficulty=Difficulty.EASY, seed=42, memory_turns=5, model_name="demo", clock=lambda: "FIXED", ) assert ck.created_at == "FIXED" assert ck.model == "demo" assert ck.scenario == "template" assert ck.difficulty == "easy" assert 1 <= len(ck.memory_turns) <= 5 assert ck.memory_turns[0].action == "down" assert ck.memory_turns[0].frame_ascii # a rendered frame was captured assert ck.outcome in ("survived", "eliminated") ck2 = generate_memory( "template", _agent(), difficulty=Difficulty.EASY, seed=42, memory_turns=5, model_name="demo", clock=lambda: "FIXED", ) assert ck.model_dump() == ck2.model_dump() def test_generate_memory_uses_memory_brief_as_prompt(): from proteus.game.runtime.memory_gen import generate_memory agent = _agent() generate_memory( "template", agent, difficulty=Difficulty.EASY, seed=42, memory_turns=2, model_name="demo", clock=lambda: "FIXED", ) # The provider saw the transparent brief as the system message. system_msg = agent._provider.calls[0][0] assert system_msg["role"] == "system" assert "PRACTICE" in system_msg["content"]