Class: Legion::Extensions::Agentic::Attention::Subliminal::Helpers::SubliminalEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Attention::Subliminal::Helpers::SubliminalEngine
show all
- Includes:
- Constants
- Defined in:
- lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb
Constant Summary
Constants included
from Constants
Constants::ACCUMULATION_RATE, Constants::ACTIVATION_BOOST, Constants::ACTIVATION_DECAY, Constants::ACTIVATION_LABELS, Constants::CONSCIOUS_THRESHOLD, Constants::DEFAULT_ACTIVATION, Constants::EXTINCTION_THRESHOLD, Constants::INFLUENCE_LABELS, Constants::INFLUENCE_STRENGTH, Constants::INFLUENCE_TARGETS, Constants::MAX_INFLUENCES, Constants::MAX_INFLUENCE_PER_DOMAIN, Constants::MAX_TOTAL_INFLUENCE, Constants::MAX_TRACES, Constants::SATURATION_LABELS, Constants::SUBLIMINAL_CEILING, Constants::SUBLIMINAL_FLOOR, Constants::TRACE_TYPES
Instance Method Summary
collapse
Methods included from Constants
label_for
Constructor Details
Returns a new instance of SubliminalEngine.
12
13
14
15
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 12
def initialize
@traces = {}
@influences = []
end
|
Instance Method Details
#active_traces ⇒ Object
56
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 56
def active_traces = @traces.values.select(&:active?)
|
#boost_trace(trace_id:, amount: ACTIVATION_BOOST) ⇒ Object
26
27
28
29
30
31
32
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 26
def boost_trace(trace_id:, amount: ACTIVATION_BOOST)
trace = @traces[trace_id]
return nil unless trace
trace.boost!(amount: amount)
trace
end
|
#breached_traces ⇒ Object
101
102
103
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 101
def breached_traces
@traces.values.select(&:breached_threshold?)
end
|
#create_trace(content:, trace_type: :associative, domain: :general, activation: DEFAULT_ACTIVATION, influence_target: :attention) ⇒ Object
17
18
19
20
21
22
23
24
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 17
def create_trace(content:, trace_type: :associative, domain: :general, activation: DEFAULT_ACTIVATION,
influence_target: :attention)
prune_extinct
trace = SubliminalTrace.new(content: content, trace_type: trace_type, domain: domain,
activation: activation, influence_target: influence_target)
@traces[trace.id] = trace
trace
end
|
#decay_all! ⇒ Object
50
51
52
53
54
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 50
def decay_all!
@traces.each_value(&:decay!)
prune_extinct
{ traces_remaining: @traces.size }
end
|
#domain_saturation(domain:) ⇒ Object
80
81
82
83
84
85
86
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 80
def domain_saturation(domain:)
domain_traces = traces_by_domain(domain: domain)
return 0.0 if domain_traces.empty?
total_activation = domain_traces.sum(&:activation)
(total_activation / (domain_traces.size * SUBLIMINAL_CEILING)).clamp(0.0, 1.0).round(10)
end
|
#extinct_traces ⇒ Object
59
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 59
def extinct_traces = @traces.values.select(&:extinct?)
|
#influence_on(target:) ⇒ Object
73
74
75
76
77
78
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 73
def influence_on(target:)
recent = @influences.last(100).select { |e| e.target == target.to_sym }
return 0.0 if recent.empty?
recent.sum(&:magnitude).clamp(0.0, MAX_TOTAL_INFLUENCE).round(10)
end
|
#near_threshold_traces ⇒ Object
57
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 57
def near_threshold_traces = @traces.values.select(&:near_threshold?)
|
#overall_subliminal_load ⇒ Object
88
89
90
91
92
93
94
95
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 88
def overall_subliminal_load
return 0.0 if @traces.empty?
active = active_traces
return 0.0 if active.empty?
(active.sum(&:activation) / (active.size * SUBLIMINAL_CEILING)).clamp(0.0, 1.0).round(10)
end
|
#potent_traces ⇒ Object
58
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 58
def potent_traces = @traces.values.select(&:potent?)
|
#process_influences! ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 34
def process_influences!
active = active_traces
events = []
active.each do |trace|
mag = trace.exert_influence!
next if mag <= 0.0
event = InfluenceEvent.new(trace_id: trace.id, target: trace.influence_target,
magnitude: mag, domain: trace.domain)
events << event
@influences << event
end
prune_influences
{ influences_generated: events.size, events: events.map(&:to_h) }
end
|
#saturation_label ⇒ Object
97
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 97
def saturation_label = Constants.label_for(SATURATION_LABELS, overall_subliminal_load)
|
#strongest_traces(limit: 5) ⇒ Object
99
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 99
def strongest_traces(limit: 5) = @traces.values.sort_by { |t| -t.activation }.first(limit)
|
#subliminal_report ⇒ Object
105
106
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 105
def subliminal_report
{
total_traces: @traces.size,
active_count: active_traces.size,
near_threshold: near_threshold_traces.size,
potent_count: potent_traces.size,
total_influences: @influences.size,
subliminal_load: overall_subliminal_load,
saturation_label: saturation_label,
breached_count: breached_traces.size,
strongest: strongest_traces(limit: 3).map(&:to_h)
}
end
|
#to_h ⇒ Object
119
120
121
122
123
124
125
126
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 119
def to_h
{
total_traces: @traces.size,
active: active_traces.size,
subliminal_load: overall_subliminal_load,
total_influences: @influences.size
}
end
|
#traces_by_domain(domain:) ⇒ Object
61
62
63
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 61
def traces_by_domain(domain:)
@traces.values.select { |t| t.domain == domain.to_sym }
end
|
#traces_by_target(target:) ⇒ Object
69
70
71
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 69
def traces_by_target(target:)
@traces.values.select { |t| t.influence_target == target.to_sym }
end
|
#traces_by_type(trace_type:) ⇒ Object
65
66
67
|
# File 'lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb', line 65
def traces_by_type(trace_type:)
@traces.values.select { |t| t.trace_type == trace_type.to_sym }
end
|