Class: Legion::Extensions::Agentic::Attention::Priming::Helpers::ActivationNetwork
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Attention::Priming::Helpers::ActivationNetwork
- Defined in:
- lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb
Instance Attribute Summary collapse
-
#concepts ⇒ Object
readonly
Returns the value of attribute concepts.
Instance Method Summary collapse
- #activation_for(name) ⇒ Object
- #active_prime_count ⇒ Object
- #add_concept(name:, domain: :general) ⇒ Object
- #concept_count ⇒ Object
- #decay_all ⇒ Object
-
#initialize ⇒ ActivationNetwork
constructor
A new instance of ActivationNetwork.
- #link(name_a, name_b, strength: Constants::DEFAULT_ASSOCIATION_STRENGTH) ⇒ Object
- #neighbors(name) ⇒ Object
- #prime(name, boost: Constants::PRIME_BOOST, source: nil, spread: true) ⇒ Object
- #primed_concepts ⇒ Object
- #primed_in_domain(domain) ⇒ Object
- #strongest_primes(count = 5) ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize ⇒ ActivationNetwork
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
#concepts ⇒ Object (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_count ⇒ Object
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_count ⇒ Object
65 66 67 |
# File 'lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb', line 65 def concept_count @concepts.size end |
#decay_all ⇒ Object
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 |
#link(name_a, name_b, strength: Constants::DEFAULT_ASSOCIATION_STRENGTH) ⇒ Object
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_concepts ⇒ Object
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_h ⇒ Object
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 |