aether-core / aether_demo.py
camdog920's picture
Upload aether_demo.py
3b04293 verified
#!/usr/bin/env python3
"""
AETHER Demo Script.
Demonstrates the full neuro-symbolic self-evolving architecture.
"""
import torch
import logging
import json
import time
from aether.core import AetherCore, AetherConfig
from aether.knowledge import KnowledgeGraphEngine
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("AETHER.Demo")
def demo_knowledge_graph():
logger.info("\n" + "=" * 60)
logger.info("DEMO: Knowledge Graph Engine")
logger.info("=" * 60)
kg = KnowledgeGraphEngine(embedding_dim=128, num_relations=20)
facts = [
("AETHER", "is_a", "Agent"),
("AETHER", "has_capability", "Reasoning"),
("AETHER", "has_capability", "Learning"),
("AETHER", "has_capability", "Evolution"),
("Agent", "requires", "Memory"),
("Reasoning", "uses", "Knowledge_Graph"),
("Learning", "uses", "Neural_Networks"),
("Evolution", "optimizes", "Architecture"),
("Neural_Networks", "implement", "Learning"),
("Knowledge_Graph", "implements", "Reasoning"),
]
for h, r, t in facts:
kg.add_fact(h, r, t, confidence=1.0)
logger.info(f" Added: ({h}, {r}, {t})")
logger.info("\n Query: 'AETHER capabilities'")
result = kg.query("AETHER has_capability")
for r in result["results"]:
logger.info(f" -> {r['tail']} (confidence={r['confidence']:.2f}, source={r['source']})")
logger.info("\n Symbolic query: 'AETHER is_a ?'")
symbolic = kg.reason_symbolic("AETHER", "is_a")
for r in symbolic:
logger.info(f" -> {r['tail']} (path={r['path']})")
stats = kg.stats()
logger.info(f"\n KG Stats: {json.dumps(stats, indent=2)}")
return kg
def demo_memory_system():
logger.info("\n" + "=" * 60)
logger.info("DEMO: CoALA Memory System")
logger.info("=" * 60)
from aether.memory import CoALAMemory
memory = CoALAMemory(capacity=16)
memory.store({"task": "Solve math problem", "priority": "high"}, "working")
memory.store({"task": "Update knowledge graph", "priority": "medium"}, "working")
memory.store({"task": "Evolve architecture", "priority": "high"}, "working")
for i in range(5):
memory.store({
"episode": i,
"action": f"action_{i}",
"reward": 0.5 + i * 0.1,
}, "episodic")
memory.store({
"gravity": "9.8 m/s^2",
"pi": "3.14159",
"euler": "2.71828",
}, "semantic")
logger.info("\n Retrieve 'task' from working memory:")
results = memory.retrieve("task", memory_type="working", top_k=3)
for r in results:
logger.info(f" -> {r}")
logger.info("\n Retrieve 'episode' from episodic memory:")
results = memory.retrieve("episode", memory_type="episodic", top_k=3)
for r in results:
logger.info(f" -> {r}")
logger.info(f"\n Memory stats: working={len(memory.working)}, episodic={len(memory.episodic)}")
return memory
def demo_agents():
logger.info("\n" + "=" * 60)
logger.info("DEMO: Agent Orchestration")
logger.info("=" * 60)
from aether.agents import AetherAgentOrchestrator
config = AetherConfig(
macro_policy_dim=128,
micro_policy_dim=64,
num_agents=4,
)
orchestrator = AetherAgentOrchestrator(config)
logger.info("\n Executing task: 'Build a reasoning system'")
result = orchestrator.execute("Build a reasoning system", None, {})
logger.info(f"\n Output: {result['output'][:100]}...")
logger.info(f" Blueprint: {result['blueprint']}")
logger.info(f" Agents used: {list(result['agent_outputs'].keys())}")
logger.info(f" Routing weights: {[f'{w:.3f}' for w in result['routing_weights']]}")
logger.info("\n Running BabyAGI loop for objective: 'Research self-evolution'")
babyagi_result = orchestrator.run_babyagi("Research self-evolution", max_iterations=3)
logger.info(f" Completed {babyagi_result['iterations']} iterations")
logger.info(f" Tasks completed: {len(babyagi_result['completed_tasks'])}")
return orchestrator
def demo_evolution():
logger.info("\n" + "=" * 60)
logger.info("DEMO: Evolutionary Engine")
logger.info("=" * 60)
from aether.evolution import AetherEvolutionEngine
config = AetherConfig(
population_size=8,
mutation_rate=0.15,
learning_rate=2e-5,
macro_policy_dim=256,
micro_policy_dim=128,
num_agents=4,
)
engine = AetherEvolutionEngine(config)
logger.info("\n Generating candidate architectures...")
candidates = engine.generate_candidates(config, population_size=8)
logger.info(f" Generated {len(candidates)} candidates")
fitness_scores = [0.3 + 0.5 * torch.rand(1).item() for _ in candidates]
logger.info(f" Fitness scores: {[f'{s:.3f}' for s in fitness_scores]}")
logger.info("\n Selecting candidates (Performance-Novelty)...")
selected = engine.select(candidates, fitness_scores, alpha_exploration=0.3)
logger.info(f" Selected {len(selected)} candidates")
logger.info("\n Applying constrained mutations...")
mutated = engine.mutate(selected, mutation_rate=0.2)
logger.info(f" Produced {len(mutated)} mutants")
engine.update_archive(candidates, fitness_scores)
logger.info(f"\n Archive stats: {json.dumps(engine.get_diversity_stats(), indent=2)}")
return engine
def demo_safety():
logger.info("\n" + "=" * 60)
logger.info("DEMO: Safety Sandbox")
logger.info("=" * 60)
from aether.safety import SafetySandbox
sandbox = SafetySandbox(timeout=30.0)
config = AetherConfig(population_size=8, mutation_rate=0.15, learning_rate=2e-5)
logger.info("\n Validating safe config...")
valid = sandbox.validate_architecture(config)
logger.info(f" Result: {'PASS' if valid else 'FAIL'}")
bad_config = AetherConfig(population_size=200, mutation_rate=0.8, learning_rate=0.1)
logger.info("\n Validating unsafe config...")
valid = sandbox.validate_architecture(bad_config)
logger.info(f" Result: {'PASS' if valid else 'FAIL'}")
logger.info("\n Testing sandbox execution...")
with sandbox.sandbox() as ctx:
result = sum(range(100))
ctx["modifications_attempted"].append("safe_operation")
logger.info(f" Safe operation result: {result}")
logger.info(f"\n Audit summary: {json.dumps(sandbox.get_audit_summary(), indent=2)}")
return sandbox
def demo_full_aether():
logger.info("\n" + "=" * 60)
logger.info("DEMO: Full AETHER Integration")
logger.info("=" * 60)
config = AetherConfig(
population_size=4,
generations=3,
mutation_rate=0.1,
learning_rate=2e-5,
macro_policy_dim=128,
micro_policy_dim=64,
num_agents=2,
enable_self_modification=True,
)
aether = AetherCore(config=config, model_name="demo-model")
facts = [
("AI", "is_a", "Technology"),
("AGI", "is_a", "AI"),
("AETHER", "is_a", "AGI"),
("AETHER", "integrates", "Neural_Networks"),
("AETHER", "integrates", "Symbolic_Reasoning"),
("Neural_Networks", "enables", "Learning"),
("Symbolic_Reasoning", "enables", "Explainability"),
]
for h, r, t in facts:
aether.knowledge.add_fact(h, r, t)
tasks = [
"What is AETHER?",
"How does AETHER learn?",
"Explain AETHER reasoning",
]
for task in tasks:
logger.info(f"\n Task: {task}")
result = aether.forward(task)
logger.info(f" Symbolic weight: {result['symbolic_weight']:.3f}")
logger.info(f" Neural weight: {result['neural_weight']:.3f}")
logger.info(f" KG context: {len(result['kg_context']['results'])} results")
logger.info("\n Self-reflection...")
reflection = aether.self_reflect()
logger.info(f" Generation: {reflection['generation']}")
logger.info(f" Memory stats: {json.dumps(reflection['memory_stats'], indent=2)}")
logger.info(f" Neuro-symbolic balance: {json.dumps(reflection['neuro_symbolic_balance'], indent=2)}")
logger.info("\n Mock evolution...")
def mock_eval(cfg):
return 0.5 + 0.3 * torch.rand(1).item()
evolve_result = aether.evolve(mock_eval, num_generations=2)
logger.info(f" Best fitness: {evolve_result['best_fitness']:.4f}")
logger.info(f" Generations evolved: {evolve_result['generations_evolved']}")
logger.info(f" Architecture changes: {len(evolve_result['architecture_history'])}")
logger.info("\n Exporting state...")
state = aether.export_state()
logger.info(f" State keys: {list(state.keys())}")
logger.info(f" Metadata: {json.dumps(state['metadata'], indent=2)}")
return aether
def main():
logger.info("\n" + "=" * 70)
logger.info(" AETHER: A Self-Evolving Neuro-Symbolic Architecture")
logger.info(" Integrating AlphaEvolve + BabyAGI + HiMAC + GEA + Yunjue + ASI-Evolve")
logger.info(" + CoALA + MLPO + Agentic Neural Networks + CoMAS")
logger.info("=" * 70)
start_time = time.time()
demo_knowledge_graph()
demo_memory_system()
demo_agents()
demo_evolution()
demo_safety()
demo_full_aether()
elapsed = time.time() - start_time
logger.info("\n" + "=" * 70)
logger.info(f" All demos completed in {elapsed:.2f}s")
logger.info("=" * 70)
logger.info("\n Components verified:")
logger.info(" [x] Knowledge Graph Engine (RGCN + ComplEx)")
logger.info(" [x] CoALA Memory (Working + Episodic + Semantic + Procedural)")
logger.info(" [x] Agent Orchestration (Hierarchical + BabyAGI + MLPO)")
logger.info(" [x] Evolution Engine (MAP-Elites + Performance-Novelty)")
logger.info(" [x] Safety Sandbox (Validation + Audit + Constraints)")
logger.info(" [x] Full AETHER Integration")
logger.info("\n Ready for training with TRL GRPO!")
if __name__ == "__main__":
main()