Module: Legion::Extensions::Agentic::Attention::Priming::Runners::Priming

Includes:
Helpers::Lex
Included in:
Client
Defined in:
lib/legion/extensions/agentic/attention/priming/runners/priming.rb

Instance Method Summary collapse

Instance Method Details

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



26
27
28
29
# File 'lib/legion/extensions/agentic/attention/priming/runners/priming.rb', line 26

def add_concept(name:, domain: :general, **)
  concept = network.add_concept(name: name, domain: domain)
  { success: true, concept: concept.to_h }
end

#check_primed(name:) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/legion/extensions/agentic/attention/priming/runners/priming.rb', line 45

def check_primed(name:, **)
  activation = network.activation_for(name)
  concept = network.concepts[name]
  {
    success:    true,
    name:       name,
    activation: activation.round(4),
    primed:     activation >= Helpers::Constants::PRIME_THRESHOLD,
    source:     concept&.prime_source
  }
end


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

def link_concepts(name_a:, name_b:, strength: nil, **)
  strength ||= Helpers::Constants::DEFAULT_ASSOCIATION_STRENGTH
  network.link(name_a, name_b, strength: strength)
  log.debug("[priming] linked #{name_a} <-> #{name_b} strength=#{strength}")
  { success: true, name_a: name_a, name_b: name_b, strength: strength }
end

#neighbors_for(name:) ⇒ Object



75
76
77
78
79
80
81
82
83
# File 'lib/legion/extensions/agentic/attention/priming/runners/priming.rb', line 75

def neighbors_for(name:, **)
  nbrs = network.neighbors(name)
  {
    success:   true,
    name:      name,
    neighbors: nbrs.map { |c| { name: c.name, activation: c.activation.round(4), primed: c.primed? } },
    count:     nbrs.size
  }
end

#networkObject



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

def network
  @network ||= Helpers::ActivationNetwork.new
end

#prime_concept(name:, boost: nil, source: nil, spread: true) ⇒ Object



16
17
18
19
20
21
22
23
24
# File 'lib/legion/extensions/agentic/attention/priming/runners/priming.rb', line 16

def prime_concept(name:, boost: nil, source: nil, spread: true, **)
  boost ||= Helpers::Constants::PRIME_BOOST
  network.add_concept(name: name) unless network.concepts.key?(name)
  concept = network.prime(name, boost: boost, source: source, spread: spread)
  return { success: false, reason: :not_found } unless concept

  log.debug("[priming] primed #{name} activation=#{concept.activation.round(4)} spread=#{spread}")
  { success: true, concept: concept.to_h, active_primes: network.active_prime_count }
end

#primed_concepts(domain: nil) ⇒ Object



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

def primed_concepts(domain: nil, **)
  concepts = domain ? network.primed_in_domain(domain) : network.primed_concepts
  {
    success:  true,
    concepts: concepts.map { |c| { name: c.name, activation: c.activation.round(4), domain: c.domain } },
    count:    concepts.size
  }
end

#priming_statsObject



85
86
87
# File 'lib/legion/extensions/agentic/attention/priming/runners/priming.rb', line 85

def priming_stats(**)
  { success: true, stats: network.to_h }
end

#strongest_primes(count: 5) ⇒ Object



66
67
68
69
70
71
72
73
# File 'lib/legion/extensions/agentic/attention/priming/runners/priming.rb', line 66

def strongest_primes(count: 5, **)
  top = network.strongest_primes(count)
  {
    success: true,
    primes:  top.map { |c| { name: c.name, activation: c.activation.round(4), domain: c.domain } },
    count:   top.size
  }
end

#update_primingObject



38
39
40
41
42
43
# File 'lib/legion/extensions/agentic/attention/priming/runners/priming.rb', line 38

def update_priming(**)
  network.decay_all
  primed = network.primed_concepts
  log.debug("[priming] tick: concepts=#{network.concept_count} active=#{primed.size}")
  { success: true, active_primes: primed.size, concept_count: network.concept_count }
end