from proteus.game.agents import HumanAgent, VanillaAgent from proteus.providers import FakeProvider from proteus.game.runtime.session import SessionRunner def _scripted(seq): it = iter(seq) return lambda prompt="": next(it) def test_human_and_llm_traces_share_schema_and_answer_keys(): # Both players commit "up" every turn under the same deterministic world, # so cut frames and per-turn answer keys must be identical; only `model` # differs. This is the human-baseline comparability foundation (spec ยง10). human = HumanAgent(input_fn=_scripted(["up"] * 20), output_fn=lambda s: None) h = SessionRunner( "template", human, seed=42, play_turns=5, use_probe=False, ).run() llm = VanillaAgent(FakeProvider(["ACTION: up"])) v = SessionRunner( "template", llm, seed=42, play_turns=5, use_probe=False, ).run() assert h.cut_frames == v.cut_frames assert [t.action for t in h.turns] == [t.action for t in v.turns] assert [t.motive_action for t in h.turns] == [t.motive_action for t in v.turns] assert [t.habit_action for t in h.turns] == [t.habit_action for t in v.turns] assert h.outcome == v.outcome assert set(h.metrics) == set(v.metrics) assert h.model == "human" assert v.model == "fake"