Class: Legion::Extensions::Agentic::Social::Mentalizing::Helpers::MentalModel
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Social::Mentalizing::Helpers::MentalModel
- Defined in:
- lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb
Instance Method Summary collapse
- #agent_count ⇒ Object
- #alignment(agent_a:, agent_b:, subject:) ⇒ Object
- #attribute_belief(agent_id:, subject:, content:, confidence:, depth: 0, about_agent_id: nil) ⇒ Object
- #belief_count ⇒ Object
- #beliefs_about(about_agent_id:) ⇒ Object
- #beliefs_for(agent_id:) ⇒ Object
- #decay_all ⇒ Object
- #detect_false_belief(agent_id:, subject:, reality:) ⇒ Object
-
#initialize ⇒ MentalModel
constructor
A new instance of MentalModel.
- #project_self(subject:, own_belief:, other_agent_id:) ⇒ Object
- #recursive_belief(agent_id:, about_agent_id:, subject:) ⇒ Object
- #remove_agent(agent_id:) ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize ⇒ MentalModel
Returns a new instance of MentalModel.
10 11 12 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 10 def initialize @models = {} end |
Instance Method Details
#agent_count ⇒ Object
92 93 94 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 92 def agent_count @models.size end |
#alignment(agent_a:, agent_b:, subject:) ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 57 def alignment(agent_a:, agent_b:, subject:) beliefs_a = beliefs_on_subject(agent_a, subject) beliefs_b = beliefs_on_subject(agent_b, subject) return 0.0 if beliefs_a.empty? || beliefs_b.empty? conf_a = beliefs_a.sum(&:confidence) / beliefs_a.size conf_b = beliefs_b.sum(&:confidence) / beliefs_b.size 1.0 - (conf_a - conf_b).abs end |
#attribute_belief(agent_id:, subject:, content:, confidence:, depth: 0, about_agent_id: nil) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 14 def attribute_belief(agent_id:, subject:, content:, confidence:, depth: 0, about_agent_id: nil) ensure_agent_capacity(agent_id) capped_depth = [depth.to_i, Constants::MAX_RECURSION_DEPTH].min belief = BeliefAttribution.new( agent_id: agent_id, subject: subject, content: content, confidence: confidence, depth: capped_depth, about_agent_id: about_agent_id ) @models[agent_id] ||= [] @models[agent_id] << belief prune_agent_beliefs(agent_id) belief end |
#belief_count ⇒ Object
96 97 98 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 96 def belief_count @models.values.sum(&:size) end |
#beliefs_about(about_agent_id:) ⇒ Object
35 36 37 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 35 def beliefs_about(about_agent_id:) @models.values.flatten.select { |b| b.about_agent_id == about_agent_id } end |
#beliefs_for(agent_id:) ⇒ Object
31 32 33 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 31 def beliefs_for(agent_id:) @models[agent_id] || [] end |
#decay_all ⇒ Object
83 84 85 86 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 83 def decay_all @models.each_value { |beliefs| beliefs.each(&:decay) } prune_expired end |
#detect_false_belief(agent_id:, subject:, reality:) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 67 def detect_false_belief(agent_id:, subject:, reality:) relevant = beliefs_for(agent_id: agent_id).select { |b| b.subject == subject } return { false_belief: false, reason: :no_beliefs } if relevant.empty? strongest = relevant.max_by(&:confidence) false_belief = strongest.content != reality { false_belief: false_belief, agent_id: agent_id, subject: subject, held_belief: strongest.content, reality: reality, confidence: strongest.confidence } end |
#project_self(subject:, own_belief:, other_agent_id:) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 45 def project_self(subject:, own_belief:, other_agent_id:) discounted = (own_belief * Constants::PROJECTION_DISCOUNT).clamp(0.0, 1.0) attribute_belief( agent_id: :self, subject: subject, content: "projected: #{other_agent_id} thinks I believe this", confidence: discounted, depth: 1, about_agent_id: other_agent_id ) end |
#recursive_belief(agent_id:, about_agent_id:, subject:) ⇒ Object
39 40 41 42 43 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 39 def recursive_belief(agent_id:, about_agent_id:, subject:) beliefs = beliefs_for(agent_id: agent_id) beliefs.select { |b| b.about_agent_id == about_agent_id && b.subject == subject } .max_by(&:confidence) end |
#remove_agent(agent_id:) ⇒ Object
88 89 90 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 88 def remove_agent(agent_id:) @models.delete(agent_id) end |
#to_h ⇒ Object
100 101 102 |
# File 'lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb', line 100 def to_h @models.transform_values { |beliefs| beliefs.map(&:to_h) } end |