Module: Legion::Extensions::Agentic::Self::Agency::Runners::Agency

Includes:
Helpers::Lex
Included in:
Client
Defined in:
lib/legion/extensions/agentic/self/agency/runners/agency.rb

Instance Method Summary collapse

Instance Method Details

#agency_statsObject



108
109
110
# File 'lib/legion/extensions/agentic/self/agency/runners/agency.rb', line 108

def agency_stats(**)
  { success: true, stats: efficacy_model.to_h }
end

#check_efficacy(domain:) ⇒ Object



67
68
69
70
71
72
73
74
75
76
# File 'lib/legion/extensions/agentic/self/agency/runners/agency.rb', line 67

def check_efficacy(domain:, **)
  {
    success:       true,
    domain:        domain,
    efficacy:      efficacy_model.efficacy_for(domain).round(4),
    label:         efficacy_model.efficacy_label(domain),
    success_rate:  efficacy_model.success_rate(domain).round(4),
    history_count: efficacy_model.domain_history(domain).size
  }
end

#efficacy_modelObject



12
13
14
# File 'lib/legion/extensions/agentic/self/agency/runners/agency.rb', line 12

def efficacy_model
  @efficacy_model ||= Helpers::EfficacyModel.new
end

#record_mastery(domain:, outcome_type:, magnitude: 1.0, attribution: :full_agency) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/legion/extensions/agentic/self/agency/runners/agency.rb', line 16

def record_mastery(domain:, outcome_type:, magnitude: 1.0, attribution: :full_agency, **)
  event = Helpers::OutcomeEvent.new(
    domain: domain, outcome_type: outcome_type, source: :mastery,
    magnitude: magnitude, attribution: attribution
  )
  efficacy_model.record_outcome(event)
  log.debug "[agency] mastery #{outcome_type} in #{domain} " \
            "efficacy=#{efficacy_model.efficacy_for(domain).round(4)}"
  { success: true, event: event.to_h, efficacy: efficacy_model.efficacy_for(domain).round(4) }
end

#record_persuasion(domain:, positive: true, magnitude: 0.5) ⇒ Object



37
38
39
40
41
42
43
44
45
46
# File 'lib/legion/extensions/agentic/self/agency/runners/agency.rb', line 37

def record_persuasion(domain:, positive: true, magnitude: 0.5, **)
  outcome = positive ? :success : :failure
  event = Helpers::OutcomeEvent.new(
    domain: domain, outcome_type: outcome, source: :persuasion,
    magnitude: magnitude, attribution: :partial_agency
  )
  efficacy_model.record_outcome(event)
  log.debug "[agency] persuasion #{positive ? 'positive' : 'negative'} in #{domain}"
  { success: true, event: event.to_h, efficacy: efficacy_model.efficacy_for(domain).round(4) }
end

#record_physiological(domain:, state: :energized) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/legion/extensions/agentic/self/agency/runners/agency.rb', line 48

def record_physiological(domain:, state: :energized, **)
  outcome = %i[energized calm focused].include?(state) ? :success : :failure
  magnitude = %i[energized calm focused].include?(state) ? 0.6 : 0.4
  event = Helpers::OutcomeEvent.new(
    domain: domain, outcome_type: outcome, source: :physiological,
    magnitude: magnitude, attribution: :low_agency
  )
  efficacy_model.record_outcome(event)
  log.debug "[agency] physiological #{state} in #{domain}"
  { success: true, event: event.to_h, efficacy: efficacy_model.efficacy_for(domain).round(4) }
end

#record_vicarious(domain:, outcome_type:, magnitude: 1.0) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/legion/extensions/agentic/self/agency/runners/agency.rb', line 27

def record_vicarious(domain:, outcome_type:, magnitude: 1.0, **)
  event = Helpers::OutcomeEvent.new(
    domain: domain, outcome_type: outcome_type, source: :vicarious,
    magnitude: magnitude, attribution: :partial_agency
  )
  efficacy_model.record_outcome(event)
  log.debug "[agency] vicarious #{outcome_type} in #{domain}"
  { success: true, event: event.to_h, efficacy: efficacy_model.efficacy_for(domain).round(4) }
end

#should_attempt?(domain:, threshold: 0.3) ⇒ Boolean

Returns:

  • (Boolean)


78
79
80
81
82
83
84
85
86
87
88
# File 'lib/legion/extensions/agentic/self/agency/runners/agency.rb', line 78

def should_attempt?(domain:, threshold: 0.3, **)
  efficacy = efficacy_model.efficacy_for(domain)
  {
    success:        true,
    domain:         domain,
    efficacy:       efficacy.round(4),
    threshold:      threshold,
    should_attempt: efficacy >= threshold,
    label:          efficacy_model.efficacy_label(domain)
  }
end

#strongest_domains(count: 5) ⇒ Object



90
91
92
93
94
95
96
97
# File 'lib/legion/extensions/agentic/self/agency/runners/agency.rb', line 90

def strongest_domains(count: 5, **)
  domains = efficacy_model.strongest_domains(count)
  {
    success: true,
    domains: domains.transform_values { |v| v.round(4) },
    count:   domains.size
  }
end

#update_agencyObject



60
61
62
63
64
65
# File 'lib/legion/extensions/agentic/self/agency/runners/agency.rb', line 60

def update_agency(**)
  efficacy_model.decay_all
  log.debug "[agency] tick: domains=#{efficacy_model.domain_count} " \
            "overall=#{efficacy_model.overall_efficacy.round(4)}"
  { success: true, stats: efficacy_model.to_h }
end

#weakest_domains(count: 5) ⇒ Object



99
100
101
102
103
104
105
106
# File 'lib/legion/extensions/agentic/self/agency/runners/agency.rb', line 99

def weakest_domains(count: 5, **)
  domains = efficacy_model.weakest_domains(count)
  {
    success: true,
    domains: domains.transform_values { |v| v.round(4) },
    count:   domains.size
  }
end