Module: Legion::Extensions::Agentic::Affect::Reappraisal::Runners::CognitiveReappraisal

Includes:
Helpers::Lex
Included in:
Client
Defined in:
lib/legion/extensions/agentic/affect/reappraisal/runners/cognitive_reappraisal.rb

Instance Method Summary collapse

Instance Method Details

#auto_reappraise_event(event_id:, engine: nil) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/legion/extensions/agentic/affect/reappraisal/runners/cognitive_reappraisal.rb', line 49

def auto_reappraise_event(event_id:, engine: nil, **)
  eng   = engine || reappraisal_engine
  event = eng.events[event_id]
  return { success: false, reason: :event_not_found } unless event

  strategy  = select_strategy_for(event)
  appraisal = llm_appraisal_for(event, strategy) ||
              Helpers::ReappraisalEngine.mechanical_appraisal(strategy, event.current_valence)
  result    = eng.reappraise(event_id: event_id, strategy: strategy, new_appraisal: appraisal)

  if result[:success]
    log.info("[cognitive_reappraisal] auto-reappraised event=#{event_id[0..7]} " \
             "strategy=#{strategy}")
  else
    log.debug("[cognitive_reappraisal] auto-reappraisal failed: #{result[:reason]}")
  end

  result
end

#intense_events(engine: nil) ⇒ Object



76
77
78
79
80
81
# File 'lib/legion/extensions/agentic/affect/reappraisal/runners/cognitive_reappraisal.rb', line 76

def intense_events(engine: nil, **)
  eng    = engine || reappraisal_engine
  events = eng.intense_events
  log.debug("[cognitive_reappraisal] intense events count=#{events.size}")
  { events: events.map(&:to_h), count: events.size }
end

#most_regulated_events(limit: 5, engine: nil) ⇒ Object



83
84
85
86
87
88
# File 'lib/legion/extensions/agentic/affect/reappraisal/runners/cognitive_reappraisal.rb', line 83

def most_regulated_events(limit: 5, engine: nil, **)
  eng    = engine || reappraisal_engine
  events = eng.most_regulated(limit: limit)
  log.debug("[cognitive_reappraisal] most regulated count=#{events.size}")
  { events: events.map(&:to_h), count: events.size }
end

#negative_events(engine: nil) ⇒ Object



69
70
71
72
73
74
# File 'lib/legion/extensions/agentic/affect/reappraisal/runners/cognitive_reappraisal.rb', line 69

def negative_events(engine: nil, **)
  eng    = engine || reappraisal_engine
  events = eng.negative_events
  log.debug("[cognitive_reappraisal] negative events count=#{events.size}")
  { events: events.map(&:to_h), count: events.size }
end

#reappraisal_report(engine: nil) ⇒ Object



102
103
104
105
106
# File 'lib/legion/extensions/agentic/affect/reappraisal/runners/cognitive_reappraisal.rb', line 102

def reappraisal_report(engine: nil, **)
  eng = engine || reappraisal_engine
  log.debug('[cognitive_reappraisal] generating report')
  { success: true, report: eng.reappraisal_report }
end

#reappraisal_status(engine: nil) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
# File 'lib/legion/extensions/agentic/affect/reappraisal/runners/cognitive_reappraisal.rb', line 90

def reappraisal_status(engine: nil, **)
  eng = engine || reappraisal_engine
  log.debug("[cognitive_reappraisal] status: overall=#{eng.overall_regulation_ability.round(2)}")
  {
    overall_regulation_ability: eng.overall_regulation_ability,
    average_regulation:         eng.average_regulation,
    total_events:               eng.events.size,
    total_reappraisals:         eng.reappraisal_log.size,
    strategy_effectiveness:     eng.strategy_effectiveness
  }
end

#reappraise_event(event_id:, strategy:, new_appraisal:, engine: nil) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/legion/extensions/agentic/affect/reappraisal/runners/cognitive_reappraisal.rb', line 30

def reappraise_event(event_id:, strategy:, new_appraisal:, engine: nil, **)
  unless Helpers::Constants.valid_strategy?(strategy)
    return { success: false, reason: :invalid_strategy, valid_strategies: Helpers::Constants::STRATEGIES }
  end

  eng = engine || reappraisal_engine
  appraisal = llm_appraisal_for(eng.events[event_id], strategy) || new_appraisal
  result = eng.reappraise(event_id: event_id, strategy: strategy, new_appraisal: appraisal)

  if result[:success]
    log.info("[cognitive_reappraisal] reappraised event=#{event_id[0..7]} " \
             "strategy=#{strategy} change=#{result[:change].round(2)}")
  else
    log.debug("[cognitive_reappraisal] reappraisal failed event=#{event_id[0..7]} reason=#{result[:reason]}")
  end

  result
end

#register_event(content:, valence:, intensity:, appraisal:, engine: nil) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/legion/extensions/agentic/affect/reappraisal/runners/cognitive_reappraisal.rb', line 13

def register_event(content:, valence:, intensity:, appraisal:, engine: nil, **)
  eng = engine || reappraisal_engine
  event = eng.register_event(content: content, valence: valence, intensity: intensity, appraisal: appraisal)

  log.debug("[cognitive_reappraisal] registered event id=#{event.id[0..7]} " \
            "valence=#{event.initial_valence.round(2)} intensity=#{event.initial_intensity.round(2)}")

  {
    success:   true,
    event_id:  event.id,
    valence:   event.initial_valence.round(10),
    intensity: event.initial_intensity.round(10),
    negative:  event.negative?,
    intense:   event.intense?
  }
end

#regulate_pending_events(engine: nil) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/legion/extensions/agentic/affect/reappraisal/runners/cognitive_reappraisal.rb', line 108

def regulate_pending_events(engine: nil, **)
  eng       = engine || reappraisal_engine
  events    = eng.events.values
  checked   = events.size
  regulated = 0
  event_ids = []

  events.each do |event|
    next unless event.negative? && event.reappraisal_count.zero?

    result = eng.auto_reappraise(event_id: event.id)
    next unless result[:success]

    regulated += 1
    event_ids << event.id
  end

  log.debug("[reappraisal] regulate pending: checked=#{checked} regulated=#{regulated}")
  { checked: checked, regulated: regulated, event_ids: event_ids }
end