Coverage for integrations / agent_engine / federation_tools.py: 60.9%

23 statements  

« prev     ^ index     » next       coverage.py v7.14.0, created at 2026-05-12 04:49 +0000

1""" 

2Unified Agent Goal Engine - Federation AutoGen Tools 

3 

44 tools for the federation goal type. Follows ip_protection_tools.py pattern. 

5""" 

6 

7 

8def check_federation_convergence() -> dict: 

9 """Check convergence score across federated nodes. 

10 

11 Returns convergence score (0-1), epoch count, and peer count. 

12 Higher = more synchronized learning across the network. 

13 """ 

14 try: 

15 from .federated_aggregator import get_federated_aggregator 

16 agg = get_federated_aggregator() 

17 stats = agg.get_stats() 

18 return { 

19 'success': True, 

20 'convergence': stats['convergence'], 

21 'epoch': stats['epoch'], 

22 'peer_count': stats['peer_count'], 

23 'trend': stats['convergence_history'], 

24 } 

25 except Exception as e: 

26 return {'success': False, 'error': str(e)} 

27 

28 

29def get_federation_stats() -> dict: 

30 """Get detailed federation statistics for dashboard. 

31 

32 Returns peer count, epoch, convergence, and last aggregated metrics. 

33 """ 

34 try: 

35 from .federated_aggregator import get_federated_aggregator 

36 return {'success': True, 'stats': get_federated_aggregator().get_stats()} 

37 except Exception as e: 

38 return {'success': False, 'error': str(e)} 

39 

40 

41def trigger_federation_sync() -> dict: 

42 """Manually trigger a federation sync cycle. 

43 

44 Runs extract → broadcast → aggregate → apply → track. 

45 """ 

46 try: 

47 from .federated_aggregator import get_federated_aggregator 

48 result = get_federated_aggregator().tick() 

49 return {'success': True, **result} 

50 except Exception as e: 

51 return {'success': False, 'error': str(e)} 

52 

53 

54def get_peer_learning_health() -> dict: 

55 """Get learning health status across all federated peers. 

56 

57 Reports per-peer flush rates, skill distribution, and HiveMind activity. 

58 """ 

59 try: 

60 from .federated_aggregator import get_federated_aggregator 

61 agg = get_federated_aggregator() 

62 stats = agg.get_stats() 

63 aggregated = stats.get('last_aggregated') or {} 

64 return { 

65 'success': True, 

66 'peer_count': stats['peer_count'], 

67 'network_experience': aggregated.get('experience_stats', {}), 

68 'network_ralt': aggregated.get('ralt_stats', {}), 

69 'network_hivemind': aggregated.get('hivemind_state', {}), 

70 'network_quality': aggregated.get('quality_metrics', {}), 

71 } 

72 except Exception as e: 

73 return {'success': False, 'error': str(e)} 

74 

75 

76# Tool descriptors for AutoGen registration 

77FEDERATION_TOOLS = [ 

78 { 

79 'name': 'check_federation_convergence', 

80 'description': 'Check convergence score across federated learning nodes.', 

81 'function': check_federation_convergence, 

82 }, 

83 { 

84 'name': 'get_federation_stats', 

85 'description': 'Get detailed federation statistics for dashboard.', 

86 'function': get_federation_stats, 

87 }, 

88 { 

89 'name': 'trigger_federation_sync', 

90 'description': 'Manually trigger a federation sync cycle.', 

91 'function': trigger_federation_sync, 

92 }, 

93 { 

94 'name': 'get_peer_learning_health', 

95 'description': 'Get learning health status across all federated peers.', 

96 'function': get_peer_learning_health, 

97 }, 

98]