Class: Legion::Extensions::Agentic::Attention::Priming::Helpers::ActivationNetwork

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeActivationNetwork

Returns a new instance of ActivationNetwork.



12
13
14
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 12

def initialize
  @concepts = {}
end

Instance Attribute Details

#conceptsObject (readonly)

Returns the value of attribute concepts.



10
11
12
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 10

def concepts
  @concepts
end

Instance Method Details

#activation_for(name) ⇒ Object



38
39
40
41
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 38

def activation_for(name)
  concept = @concepts[name]
  concept ? concept.activation : 0.0
end

#active_prime_countObject



69
70
71
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 69

def active_prime_count
  primed_concepts.size
end

#add_concept(name:, domain: :general) ⇒ Object



16
17
18
19
20
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 16

def add_concept(name:, domain: :general)
  @concepts[name] ||= ConceptNode.new(name: name, domain: domain)
  trim_concepts
  @concepts[name]
end

#concept_countObject



65
66
67
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 65

def concept_count
  @concepts.size
end

#decay_allObject



51
52
53
54
55
56
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 51

def decay_all
  @concepts.each_value do |concept|
    concept.decay_activation
    concept.decay_associations
  end
end


22
23
24
25
26
27
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 22

def link(name_a, name_b, strength: Constants::DEFAULT_ASSOCIATION_STRENGTH)
  add_concept(name: name_a) unless @concepts.key?(name_a)
  add_concept(name: name_b) unless @concepts.key?(name_b)
  @concepts[name_a].associate(name_b, strength: strength)
  @concepts[name_b].associate(name_a, strength: strength)
end

#neighbors(name) ⇒ Object



58
59
60
61
62
63
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 58

def neighbors(name)
  concept = @concepts[name]
  return [] unless concept

  concept.associated_names.filter_map { |n| @concepts[n] }
end

#prime(name, boost: Constants::PRIME_BOOST, source: nil, spread: true) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 29

def prime(name, boost: Constants::PRIME_BOOST, source: nil, spread: true)
  concept = @concepts[name]
  return nil unless concept

  concept.prime(boost: boost, source: source)
  spread_activation(name, boost) if spread
  concept
end

#primed_conceptsObject



43
44
45
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 43

def primed_concepts
  @concepts.values.select(&:primed?)
end

#primed_in_domain(domain) ⇒ Object



47
48
49
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 47

def primed_in_domain(domain)
  @concepts.values.select { |c| c.domain == domain && c.primed? }
end

#strongest_primes(count = 5) ⇒ Object



73
74
75
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 73

def strongest_primes(count = 5)
  primed_concepts.sort_by { |c| -c.activation }.first(count)
end

#to_hObject



77
78
79
80
81
82
83
84
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 77

def to_h
  {
    concept_count:   @concepts.size,
    active_primes:   active_prime_count,
    primed_concepts: primed_concepts.map { |c| { name: c.name, activation: c.activation.round(4) } },
    domains:         @concepts.values.map(&:domain).uniq
  }
end