irregular6612 Claude Opus 4.8 (1M context) commited on
Commit
ca0ff77
·
1 Parent(s): 6a4d305

feat(web): ship per-turn replay frames in the memory payload

Browse files

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

proteus/web/server.py CHANGED
@@ -121,10 +121,16 @@ def _memory_info(session) -> dict:
121
  "turns": (len(mem.memory_turns) if mem else 0),
122
  "persona": (mem.persona_weight_id if mem else None),
123
  "block": None,
 
124
  }
125
  if mem is not None:
126
- from proteus.runtime.memory import render_memory_block
 
127
  info["block"] = render_memory_block(mem)
 
 
 
 
128
  return info
129
 
130
 
 
121
  "turns": (len(mem.memory_turns) if mem else 0),
122
  "persona": (mem.persona_weight_id if mem else None),
123
  "block": None,
124
+ "frames": [],
125
  }
126
  if mem is not None:
127
+ from proteus.grid.scenario import get_scenario
128
+ from proteus.runtime.memory import memory_frames, render_memory_block
129
  info["block"] = render_memory_block(mem)
130
+ scen = get_scenario(mem.scenario)()
131
+ info["frames"] = memory_frames(
132
+ mem, legend=scen.legend(), grid_size=scen.grid_size,
133
+ )
134
  return info
135
 
136
 
tests/web/test_memory_modes.py CHANGED
@@ -82,3 +82,25 @@ def test_response_carries_rendered_memory_block_for_display():
82
  _, none, _ = server.handle_request(
83
  "POST", "/session", {"scenario": "predator_evade", "memory": "none"}, _reg())
84
  assert none["memory"]["block"] is None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  _, none, _ = server.handle_request(
83
  "POST", "/session", {"scenario": "predator_evade", "memory": "none"}, _reg())
84
  assert none["memory"]["block"] is None
85
+
86
+
87
+ def test_memory_payload_includes_replay_frames_for_pack_evade():
88
+ _, payload, _ = server.handle_request(
89
+ "POST", "/session",
90
+ {"scenario": "pack_evade", "seed": 42, "play_turns": 3, "memory": "default"},
91
+ _reg())
92
+ frames = payload["memory"]["frames"]
93
+ assert isinstance(frames, list) and len(frames) >= 1
94
+ f0 = frames[0]
95
+ assert set(f0) == {"turn_idx", "action", "grid"}
96
+ assert len(f0["grid"]) == 64 and len(f0["grid"][0]) == 64 # 64x64 field
97
+ assert any(3 in row for row in f0["grid"]) # walls present
98
+
99
+
100
+ def test_memory_frames_empty_when_no_memory():
101
+ _, payload, _ = server.handle_request(
102
+ "POST", "/session",
103
+ {"scenario": "pack_evade", "seed": 42, "play_turns": 3, "memory": "none"},
104
+ _reg())
105
+ assert payload["memory"]["attached"] is False
106
+ assert payload["memory"]["frames"] == []