-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
155 lines (116 loc) · 4.19 KB
/
main.py
File metadata and controls
155 lines (116 loc) · 4.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import argparse
import os
import sys
import yaml
from core.brain import VirtualBrain
from decision.decision_engine import DecisionEngine
from memory.memory_manager import MemoryManager
from simulation.simulator import Simulator
from simulation.scenarios import build_structured_learning_scenario
from utils.logger import BrainLogger
# =====================================================
# ARGUMENT PARSER
# =====================================================
def parse_arguments():
parser = argparse.ArgumentParser(description="Virtual Brain Engine")
parser.add_argument(
"--mode",
type=str,
default="simulate",
choices=["simulate", "live"],
help="Run mode of the brain"
)
parser.add_argument(
"--deterministic",
action="store_true",
help="Run without stochastic noise"
)
parser.add_argument(
"--cycles",
type=int,
default=100,
help="Number of simulation cycles"
)
return parser.parse_args()
# =====================================================
# LOAD CONFIG
# =====================================================
def load_chemical_config():
with open("config/chemicals.yaml", "r") as f:
return yaml.safe_load(f)
def load_decision_config():
with open("config/decision.yaml", "r") as f:
payload = yaml.safe_load(f) or {}
return payload.get("decision", payload)
# =====================================================
# MAIN
# =====================================================
def main():
args = parse_arguments()
logger = BrainLogger()
logger.info("Starting Virtual Brain...")
memory_manager = MemoryManager(storage_path="memory_store.json")
loaded_state = None
if os.path.exists("memory_store.json"):
payload = memory_manager.load()
if isinstance(payload, dict):
loaded_state = payload
logger.info("Loaded persisted brain state from memory_store.json")
else:
logger.warning("memory_store.json exists but is not a brain state snapshot; starting fresh.")
chemical_configs = load_chemical_config()
decision_config = load_decision_config()
decision_engine = DecisionEngine(
decision_config=decision_config,
deterministic=args.deterministic,
)
brain = VirtualBrain(
chemical_configs=chemical_configs["chemicals"],
interaction_matrix=chemical_configs.get("interactions"),
decision_engine=decision_engine,
deterministic=args.deterministic
)
if loaded_state:
brain.set_state(loaded_state)
# ================================
# SIMULATION MODE
# ================================
if args.mode == "simulate":
logger.info(
f"Running structured learning simulation for {args.cycles} cycles"
)
simulator = Simulator(brain, memory_manager=memory_manager)
scenario = build_structured_learning_scenario(args.cycles)
simulator.run_scenario(
scenario_events=scenario,
steps=args.cycles
)
# ================================
# BASIC LIVE DEBUG MODE
# ================================
elif args.mode == "live":
logger.info("Running in basic live debug mode")
run_live_debug(brain, memory_manager=memory_manager)
memory_manager.save(brain.get_state())
logger.info("Shutting down Virtual Brain.")
# =====================================================
# BASIC LIVE DEBUG (OLD STYLE)
# =====================================================
def run_live_debug(brain, memory_manager=None):
print("Virtual Brain Debug Mode. Type 'exit' to quit.\n")
while True:
user_input = input(">> ")
if user_input.lower() == "exit":
break
brain.tick()
state = brain.get_state()
print(f"Current State: {state}\n")
if memory_manager:
memory_manager.save(state)
# =====================================================
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\nInterrupted by user.")
sys.exit(0)