Class: Legion::Extensions::Agentic::Self::Personality::Helpers::PersonalityStore

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/agentic/self/personality/helpers/personality_store.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePersonalityStore

Returns a new instance of PersonalityStore.



12
13
14
# File 'lib/legion/extensions/agentic/self/personality/helpers/personality_store.rb', line 12

def initialize
  @model = TraitModel.new
end

Instance Attribute Details

#modelObject (readonly)

Returns the value of attribute model.



10
11
12
# File 'lib/legion/extensions/agentic/self/personality/helpers/personality_store.rb', line 10

def model
  @model
end

Instance Method Details

#compatibility_score(other_profile) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/legion/extensions/agentic/self/personality/helpers/personality_store.rb', line 32

def compatibility_score(other_profile)
  return nil unless other_profile.is_a?(Hash)

  diffs = Constants::TRAITS.map do |trait|
    mine = @model.trait(trait) || 0.5
    theirs = other_profile[trait] || 0.5
    (mine - theirs).abs
  end
  avg_diff = diffs.sum / diffs.size.to_f
  (1.0 - avg_diff).round(3)
end

#full_descriptionObject



23
24
25
26
27
28
29
30
# File 'lib/legion/extensions/agentic/self/personality/helpers/personality_store.rb', line 23

def full_description
  return 'Personality not yet formed — insufficient observations.' unless @model.formed?

  parts = Constants::TRAITS.filter_map do |trait|
    @model.describe(trait)
  end
  "#{parts.join('. ')}."
end

#update(tick_results) ⇒ Object



16
17
18
19
20
21
# File 'lib/legion/extensions/agentic/self/personality/helpers/personality_store.rb', line 16

def update(tick_results)
  signals = extract_signals(tick_results)
  @model.update(signals)
  partner_signals = extract_partner_signals(tick_results)
  @model.apply_partner_signals(partner_signals) unless partner_signals.empty?
end