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
- #agency_stats ⇒ Object
- #check_efficacy(domain:) ⇒ Object
- #efficacy_model ⇒ Object
- #record_mastery(domain:, outcome_type:, magnitude: 1.0, attribution: :full_agency) ⇒ Object
- #record_persuasion(domain:, positive: true, magnitude: 0.5) ⇒ Object
- #record_physiological(domain:, state: :energized) ⇒ Object
- #record_vicarious(domain:, outcome_type:, magnitude: 1.0) ⇒ Object
- #should_attempt?(domain:, threshold: 0.3) ⇒ Boolean
- #strongest_domains(count: 5) ⇒ Object
- #update_agency ⇒ Object
- #weakest_domains(count: 5) ⇒ Object
Instance Method Details
#agency_stats ⇒ Object
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_model ⇒ Object
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
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_agency ⇒ Object
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 |