File size: 2,316 Bytes
09be84b | 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 | import pytest
from synapse.agent import IntegratedAgent
from synapse.config import SynapseConfig
from synapse.auto_programmer import (
run_diagnostic_episodes,
diagnose_failures,
synthesize_weight_patch,
execute_closed_loop_repair,
)
from synapse.patches import preview_patch
def test_run_diagnostic_episodes():
config = SynapseConfig(seed=42, nodes_per_source=20)
agent = IntegratedAgent(config)
diag = run_diagnostic_episodes(agent, task='forage', num_episodes=2, max_steps_per_episode=10, seed=42)
assert diag['task'] == 'forage'
assert diag['num_episodes'] == 2
assert len(diag['returns']) == 2
assert len(diag['lengths']) == 2
assert 'mean_graph_activity' in diag
assert 'mean_approach_valence' in diag
assert 'mean_avoid_valence' in diag
def test_diagnose_failures():
dummy_diag = {
'mean_return': 0.1,
'mean_approach_valence': -0.2,
'mean_avoid_valence': 0.5,
'mean_graph_activity': 0.02,
'action_mean': [0.01, 0.0, 0.0, 0.0, 0.0],
}
hyp = diagnose_failures(dummy_diag)
assert 'primary_surface' in hyp
assert 'suggested_fix' in hyp
assert len(hyp['hypotheses']) > 0
def test_synthesize_weight_patch():
config = SynapseConfig(seed=42, nodes_per_source=20)
agent = IntegratedAgent(config)
diagnosis = {
'primary_surface': 'mb.w_mbon',
'suggested_fix': 'reinforce_approach',
'mean_return': 0.0,
}
packet = synthesize_weight_patch(agent, diagnosis)
assert packet['schema'] == 'synapse-weight-program-v1'
assert packet['writes'] > 0
preview = preview_patch(agent, packet)
assert preview['ok'] is True
def test_execute_closed_loop_repair():
config = SynapseConfig(seed=42, nodes_per_source=20)
agent = IntegratedAgent(config)
report = execute_closed_loop_repair(
agent,
task='forage',
num_diagnostic_episodes=1,
num_eval_episodes=1,
min_gain=-1.0, # permissive to test successful execution and commit
seed=42,
)
assert report['status'] == 'ok'
assert 'accepted' in report
assert 'baseline_return' in report
assert 'diagnosis' in report
assert 'provenance' in report
assert report['provenance']['writer_disconnected_for_confirmation'] is True
|