Module: Legion::Extensions::Agentic::Affect::Resilience::Runners::Resilience
- Includes:
- Helpers::Lex
- Included in:
- Client
- Defined in:
- lib/legion/extensions/agentic/affect/resilience/runners/resilience.rb
Instance Method Summary collapse
- #adversity_report ⇒ Object
- #dimension_detail(dimension:) ⇒ Object
- #register_adversity(type:, severity:, context: {}) ⇒ Object
- #resilience_stats ⇒ Object
- #resilience_status ⇒ Object
- #update_resilience(tick_results: {}) ⇒ Object
Instance Method Details
#adversity_report ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/legion/extensions/agentic/affect/resilience/runners/resilience.rb', line 52 def adversity_report(**) log.debug('[resilience] adversity report') { active: adversity_tracker.active_adversities, by_type: adversity_tracker.active_by_type, total: adversity_tracker.total_adversities, worst: adversity_tracker.worst_health.round(4), avg_speed: adversity_tracker.average_recovery_speed.round(4) } end |
#dimension_detail(dimension:) ⇒ Object
64 65 66 67 68 69 70 |
# File 'lib/legion/extensions/agentic/affect/resilience/runners/resilience.rb', line 64 def dimension_detail(dimension:, **) detail = resilience_model.dimension_detail(dimension.to_sym) return { error: "unknown dimension: #{dimension}" } unless detail log.debug("[resilience] dimension #{dimension}: #{detail[:value]}") detail end |
#register_adversity(type:, severity:, context: {}) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/legion/extensions/agentic/affect/resilience/runners/resilience.rb', line 32 def register_adversity(type:, severity:, context: {}, **) adversity = adversity_tracker.register(type: type, severity: severity, context: context) return { success: false, error: 'invalid type or severity' } unless adversity log.info("[resilience] adversity registered: type=#{type} severity=#{severity}") { success: true, adversity: adversity } end |
#resilience_stats ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/legion/extensions/agentic/affect/resilience/runners/resilience.rb', line 72 def resilience_stats(**) log.debug('[resilience] stats') { composite: resilience_model.composite_score.round(4), classification: resilience_model.classification, dimensions: resilience_model.dimensions.transform_values { |v| v.round(4) }, growth_bonus: resilience_model.growth_bonus.round(4), trend: resilience_model.trend, total_adversities: adversity_tracker.total_adversities, active_adversities: adversity_tracker.active_adversities.size, recovery_rate: adversity_tracker.recovery_rate.round(4), consecutive_recoveries: adversity_tracker.consecutive_recoveries, history_size: resilience_model.history.size } end |
#resilience_status ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/legion/extensions/agentic/affect/resilience/runners/resilience.rb', line 40 def resilience_status(**) model_state = resilience_model.to_h log.debug("[resilience] status: #{model_state[:class]} score=#{model_state[:composite]}") model_state.merge( active_adversities: adversity_tracker.active_adversities.size, total_adversities: adversity_tracker.total_adversities, consecutive_recoveries: adversity_tracker.consecutive_recoveries, recovery_rate: adversity_tracker.recovery_rate.round(4) ) end |
#update_resilience(tick_results: {}) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/legion/extensions/agentic/affect/resilience/runners/resilience.rb', line 13 def update_resilience(tick_results: {}, **) detect_adversities(tick_results) recovery = adversity_tracker.tick_recovery resilience_model.update_from_tracker(adversity_tracker) log.debug("[resilience] active=#{recovery[:active_count]} " \ "resolved=#{recovery[:resolved_count]} " \ "composite=#{resilience_model.composite_score.round(3)}") { active_adversities: recovery[:active_count], resolved_this_tick: recovery[:resolved_count], worst_health: recovery[:worst_health], composite_score: resilience_model.composite_score.round(4), classification: resilience_model.classification, growth_bonus: resilience_model.growth_bonus.round(4) } end |