import json from telltale.agents.memory import AgentMemory, MemoryDelta def test_new_memory_starts_neutral(): memory = AgentMemory.neutral("mike_mcdermott") assert memory.respect_for_player == 0 assert memory.fear_of_player == 0 assert memory.charmed_by_player == 0 assert memory.grudge_against_player == 0 assert memory.recent_player_patterns == [] assert memory.recent_dialogue_impressions == [] assert memory.summary == "" def test_recent_lists_stay_within_max_length(): memory = AgentMemory.neutral("worm") for index in range(8): memory.apply_delta( MemoryDelta( recent_player_patterns=[f"pattern-{index}"], recent_dialogue_impressions=[f"impression-{index}"], ) ) assert memory.recent_player_patterns == ["pattern-3", "pattern-4", "pattern-5", "pattern-6", "pattern-7"] assert memory.recent_dialogue_impressions == [ "impression-3", "impression-4", "impression-5", "impression-6", "impression-7", ] def test_memory_serializes_to_json(): memory = AgentMemory.neutral("molly_bloom") data = json.loads(memory.to_json()) assert data["agent_id"] == "molly_bloom" assert data["respect_for_player"] == 0 def test_memory_reset_creates_neutral_state_for_new_run(): memory = AgentMemory.neutral("teddy_kgb") memory.apply_delta({"respect_for_player": 1, "grudge_against_player": 1, "summary": "bad history"}) reset = AgentMemory.reset_for_run("teddy_kgb") assert reset.agent_id == memory.agent_id assert reset.respect_for_player == 0 assert reset.grudge_against_player == 0 assert reset.summary == "" def test_applying_bounded_memory_updates_from_model_decision(): memory = AgentMemory.neutral("ginger_mckenna") memory.apply_delta( { "respect_for_player": 2, "fear_of_player": -1, "charmed_by_player": 1.5, "grudge_against_player": 0.25, "recent_player_patterns": ["overbets turns"], "recent_dialogue_impressions": ["compliment felt sincere"], "summary": "Warming up to the player.", } ) assert memory.respect_for_player == 1 assert memory.fear_of_player == 0 assert memory.charmed_by_player == 1 assert memory.grudge_against_player == 0.25 assert memory.recent_player_patterns == ["overbets turns"] assert memory.recent_dialogue_impressions == ["compliment felt sincere"] assert memory.summary == "Warming up to the player."