feat: Implement Spatial Graphs as Signal Processing Layer

This commit is contained in:
2026-04-12 11:55:25 +05:30
parent 079fe3ff22
commit 3902999f60
6 changed files with 814 additions and 7 deletions

View File

@@ -5,6 +5,7 @@ from pathlib import Path
from entities import Entity, Player
from memory import MemoryEntry
from spatial_graph import SpatialGraph
from time_utils import WorldClock
from world_architect import WorldState
@@ -16,6 +17,7 @@ class Scenario:
entities: dict
player_id: str | None = None
world_state: WorldState | None = None
spatial_graph: SpatialGraph | None = None
def load_scenario(path: Path) -> Scenario:
@@ -96,11 +98,32 @@ def load_scenario(path: Path) -> Scenario:
logger.info("Initialized WorldState for scenario")
# Initialize spatial graph
spatial_graph = SpatialGraph()
spatial_data = payload.get("spatial_graph", {})
if spatial_data:
spatial_graph.load_from_json(spatial_data)
# Position entities in spatial graph
for entity_id, entity in entities.items():
metadata_info = raw_entities[
next(i for i, e in enumerate(raw_entities) if (e.get("id") or e["name"]).strip().lower() == entity_id)
].get("metadata", {})
location_id = metadata_info.get("location", "gate_post")
spatial_descriptor = metadata_info.get("spatial_descriptor", "")
spatial_graph.set_entity_position(entity_id, location_id, spatial_descriptor)
logger.info(f"Positioned {entity_id} at {location_id}")
logger.info("Initialized SpatialGraph for scenario")
return Scenario(
metadata=metadata,
entities=entities,
player_id=player_id,
world_state=world_state,
spatial_graph=spatial_graph,
)
@@ -126,10 +149,16 @@ def dump_scenario(scenario: Scenario) -> dict:
if scenario.player_id and metadata.get("player_id") != scenario.player_id:
metadata["player_id"] = scenario.player_id
return {
result = {
"scenario": metadata,
"entities": entity_payloads,
}
# Include spatial graph if available
if hasattr(scenario, 'spatial_graph') and scenario.spatial_graph:
result["spatial_graph"] = scenario.spatial_graph.to_dict()
return result
def dumps_scenario(scenario: Scenario) -> str: