Class: Legion::Extensions::Agentic::Affect::Reward::Helpers::RewardStore
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Affect::Reward::Helpers::RewardStore
- Defined in:
- lib/legion/extensions/agentic/affect/reward/helpers/reward_store.rb
Instance Attribute Summary collapse
-
#signal ⇒ Object
readonly
Returns the value of attribute signal.
Instance Method Summary collapse
- #all_domain_averages ⇒ Object
- #domain_report(domain) ⇒ Object
- #health_assessment ⇒ Object
-
#initialize(signal: nil) ⇒ RewardStore
constructor
A new instance of RewardStore.
- #process_tick(tick_results) ⇒ Object
Constructor Details
#initialize(signal: nil) ⇒ RewardStore
Returns a new instance of RewardStore.
12 13 14 |
# File 'lib/legion/extensions/agentic/affect/reward/helpers/reward_store.rb', line 12 def initialize(signal: nil) @signal = signal || RewardSignal.new end |
Instance Attribute Details
#signal ⇒ Object (readonly)
Returns the value of attribute signal.
10 11 12 |
# File 'lib/legion/extensions/agentic/affect/reward/helpers/reward_store.rb', line 10 def signal @signal end |
Instance Method Details
#all_domain_averages ⇒ Object
35 36 37 38 39 |
# File 'lib/legion/extensions/agentic/affect/reward/helpers/reward_store.rb', line 35 def all_domain_averages @signal.domain_history.keys.to_h do |domain| [domain, @signal.domain_average(domain).round(4)] end end |
#domain_report(domain) ⇒ Object
26 27 28 29 30 31 32 33 |
# File 'lib/legion/extensions/agentic/affect/reward/helpers/reward_store.rb', line 26 def domain_report(domain) { domain: domain, average: @signal.domain_average(domain), trend: @signal.domain_trend(domain), history: @signal.domain_history[domain]&.last(10) || [] } end |
#health_assessment ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/legion/extensions/agentic/affect/reward/helpers/reward_store.rb', line 41 def health_assessment avg = @signal.running_average vol = @signal.reward_volatility if @signal.anhedonic? { status: :anhedonic, description: 'Persistently low reward — possible disengagement', severity: :high } elsif @signal.euphoric? { status: :euphoric, description: 'Persistently high reward — possible overconfidence', severity: :moderate } elsif vol > 0.4 { status: :volatile, description: 'Highly variable reward — unstable learning signals', severity: :moderate } elsif avg.between?(-0.1, 0.1) { status: :neutral, description: 'Low reward signal — minimal learning happening', severity: :low } else { status: :healthy, description: 'Balanced reward signal — healthy learning', severity: :none } end end |
#process_tick(tick_results) ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/legion/extensions/agentic/affect/reward/helpers/reward_store.rb', line 16 def process_tick(tick_results) source_signals = extract_signals(tick_results) result = @signal.compute(source_signals) domain = extract_domain(tick_results) @signal.record_domain_reward(domain, result[:reward]) if domain result end |