Spaces:
Sleeping
Sleeping
| from typing import Dict, Any, Optional | |
| from src.tools.base import ToolConnector | |
| from src.brain.runtime import BrainRuntime | |
| class ActInEnvironmentConnector(ToolConnector): | |
| def __init__(self): | |
| super().__init__( | |
| name="act_in_environment", | |
| description="Executes a physical or simulated locomotion/foraging action in the virtual ecosystem.", | |
| timeout_sec=5.0 | |
| ) | |
| self.agent_pos = [0.0, 0.0] | |
| self.heading_rad = 0.0 | |
| def input_schema(self) -> Dict[str, Any]: | |
| return { | |
| "type": "object", | |
| "properties": { | |
| "action_type": {"type": "string", "enum": ["move_forward", "turn_left", "turn_right", "forage"]}, | |
| "magnitude": {"type": "number", "default": 1.0} | |
| }, | |
| "required": ["action_type"] | |
| } | |
| def output_schema(self) -> Dict[str, Any]: | |
| return { | |
| "type": "object", | |
| "properties": { | |
| "new_position": {"type": "array"}, | |
| "heading": {"type": "number"}, | |
| "foraged_reward": {"type": "number"} | |
| }, | |
| "required": ["new_position", "heading", "foraged_reward"] | |
| } | |
| def _execute(self, params: Dict[str, Any], execution_id: str) -> Dict[str, Any]: | |
| act = params["action_type"] | |
| mag = float(params.get("magnitude", 1.0)) | |
| reward = 0.0 | |
| if act == "move_forward": | |
| self.agent_pos[0] += mag * 0.1 | |
| self.agent_pos[1] += mag * 0.1 | |
| elif act == "turn_left": | |
| self.heading_rad += 0.1 * mag | |
| elif act == "turn_right": | |
| self.heading_rad -= 0.1 * mag | |
| elif act == "forage": | |
| reward = 0.5 * mag | |
| return { | |
| "new_position": [round(p, 3) for p in self.agent_pos], | |
| "heading": round(self.heading_rad, 3), | |
| "foraged_reward": reward | |
| } | |
| class InspectSelfConnector(ToolConnector): | |
| def __init__(self, brain: BrainRuntime): | |
| super().__init__( | |
| name="inspect_self", | |
| description="Inspects internal computational state, drives, attention, and spike telemetry of the brain.", | |
| timeout_sec=5.0 | |
| ) | |
| self.brain = brain | |
| def input_schema(self) -> Dict[str, Any]: | |
| return {"type": "object", "properties": {}} | |
| def output_schema(self) -> Dict[str, Any]: | |
| return { | |
| "type": "object", | |
| "properties": { | |
| "step": {"type": "integer"}, | |
| "total_spikes": {"type": "integer"}, | |
| "energy": {"type": "number"}, | |
| "curiosity": {"type": "number"}, | |
| "social": {"type": "number"}, | |
| "integrity": {"type": "number"}, | |
| "num_neurons": {"type": "integer"}, | |
| "num_synapses": {"type": "integer"} | |
| }, | |
| "required": ["step", "energy", "num_neurons", "num_synapses"] | |
| } | |
| def _execute(self, params: Dict[str, Any], execution_id: str) -> Dict[str, Any]: | |
| return { | |
| "step": self.brain.state.step_count, | |
| "total_spikes": self.brain.state.total_spikes, | |
| "energy": round(self.brain.state.drives.energy, 4), | |
| "curiosity": round(self.brain.state.drives.curiosity, 4), | |
| "social": round(self.brain.state.drives.social, 4), | |
| "integrity": round(self.brain.state.drives.integrity, 4), | |
| "num_neurons": self.brain.graph.num_neurons, | |
| "num_synapses": self.brain.graph.num_synapses | |
| } | |
| class SleepConnector(ToolConnector): | |
| def __init__(self, brain: BrainRuntime): | |
| super().__init__( | |
| name="sleep", | |
| description="Enters sleep/quiescent state to replenish homeostatic energy and repair neural integrity.", | |
| timeout_sec=5.0 | |
| ) | |
| self.brain = brain | |
| def input_schema(self) -> Dict[str, Any]: | |
| return { | |
| "type": "object", | |
| "properties": { | |
| "duration_cycles": {"type": "integer", "default": 5} | |
| } | |
| } | |
| def output_schema(self) -> Dict[str, Any]: | |
| return { | |
| "type": "object", | |
| "properties": { | |
| "energy_restored": {"type": "number"}, | |
| "current_energy": {"type": "number"} | |
| }, | |
| "required": ["energy_restored", "current_energy"] | |
| } | |
| def _execute(self, params: Dict[str, Any], execution_id: str) -> Dict[str, Any]: | |
| cycles = int(params.get("duration_cycles", 5)) | |
| before_e = self.brain.state.drives.energy | |
| restored = min(1.0 - before_e, 0.1 * cycles) | |
| self.brain.state.drives.energy = min(1.0, before_e + restored) | |
| self.brain.state.drives.integrity = min(1.0, self.brain.state.drives.integrity + 0.05 * cycles) | |
| return { | |
| "energy_restored": round(restored, 4), | |
| "current_energy": round(self.brain.state.drives.energy, 4) | |
| } | |