Class: Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::ChamberEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::ChamberEngine
show all
- Includes:
- Constants
- Defined in:
- lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb
Constant Summary
Constants included
from Constants
Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::AMPLIFICATION_LABELS, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::AMPLIFICATION_RATE, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::BREAKTHROUGH_BONUS, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::CHAMBER_STATES, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::CHAMBER_STATE_LABELS, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::DECAY_RATE, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::DEFAULT_AMPLITUDE, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::DEFAULT_WALL_THICKNESS, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::DISRUPTION_THRESHOLD, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::ECHO_TYPES, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::MAX_CHAMBERS, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::MAX_ECHOES, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::POROUS_THRESHOLD, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::RESONANCE_LABELS, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::SEALED_THRESHOLD, Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::Constants::SILENT_THRESHOLD
Instance Method Summary
collapse
Methods included from Constants
label_for
Constructor Details
Returns a new instance of ChamberEngine.
12
13
14
15
16
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 12
def initialize
@echoes = {}
@chambers = {}
@disruption_history = []
end
|
Instance Method Details
#active_echoes ⇒ Object
102
103
104
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 102
def active_echoes
@echoes.values.reject(&:silent?)
end
|
#add_echo_to_chamber(echo_id:, chamber_id:) ⇒ Object
79
80
81
82
83
84
85
86
87
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 79
def add_echo_to_chamber(echo_id:, chamber_id:)
echo = @echoes[echo_id]
chamber = @chambers[chamber_id]
return { success: false, error: 'echo not found' } unless echo
return { success: false, error: 'chamber not found' } unless chamber
added = chamber.add_echo(echo)
{ success: added, echo_id: echo_id, chamber_id: chamber_id }
end
|
#amplify_echo(echo_id:, rate: AMPLIFICATION_RATE) ⇒ Object
39
40
41
42
43
44
45
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 39
def amplify_echo(echo_id:, rate: AMPLIFICATION_RATE)
echo = @echoes[echo_id]
return nil unless echo
echo.amplify!(rate)
echo
end
|
#chamber_by_id(chamber_id) ⇒ Object
110
111
112
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 110
def chamber_by_id(chamber_id)
@chambers[chamber_id]
end
|
#create_chamber(label:, domain: :general, wall_thickness: DEFAULT_WALL_THICKNESS) ⇒ Object
32
33
34
35
36
37
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 32
def create_chamber(label:, domain: :general, wall_thickness: DEFAULT_WALL_THICKNESS)
prune_chambers
chamber = Chamber.new(label: label, domain: domain, wall_thickness: wall_thickness)
@chambers[chamber.id] = chamber
chamber
end
|
#create_echo(content:, echo_type: :belief, domain: :general, source_agent: nil, amplitude: DEFAULT_AMPLITUDE) ⇒ Object
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 18
def create_echo(content:, echo_type: :belief, domain: :general,
source_agent: nil, amplitude: DEFAULT_AMPLITUDE)
prune_echoes
echo = Echo.new(
content: content,
echo_type: echo_type,
domain: domain,
source_agent: source_agent,
amplitude: amplitude
)
@echoes[echo.id] = echo
echo
end
|
#decay_all! ⇒ Object
56
57
58
59
60
61
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 56
def decay_all!
echo_count = @echoes.size
@echoes.each_value { |e| e.dampen!(DECAY_RATE) }
prune_silent_echoes
{ decayed: echo_count, remaining: @echoes.size, pruned: echo_count - @echoes.size }
end
|
#disrupt_chamber(chamber_id:, force:) ⇒ Object
47
48
49
50
51
52
53
54
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 47
def disrupt_chamber(chamber_id:, force:)
chamber = @chambers[chamber_id]
return { success: false, error: 'chamber not found' } unless chamber
result = chamber.disrupt!(force)
record_disruption(chamber_id: chamber_id, force: force, result: result) if result[:success]
result
end
|
#disruption_history ⇒ Object
75
76
77
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 75
def disruption_history
@disruption_history.dup
end
|
#echo_by_id(echo_id) ⇒ Object
114
115
116
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 114
def echo_by_id(echo_id)
@echoes[echo_id]
end
|
#echo_report ⇒ Object
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 89
def echo_report
{
total_echoes: @echoes.size,
active_echoes: active_echoes.size,
resonating_echoes: resonating_echoes.size,
total_chambers: @chambers.size,
sealed_chambers: @chambers.values.count(&:sealed?),
porous_chambers: @chambers.values.count(&:porous?),
disruption_count: @disruption_history.size,
loudest: loudest_echoes(limit: 3).map(&:to_h)
}
end
|
#echoes_by_type(echo_type:) ⇒ Object
63
64
65
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 63
def echoes_by_type(echo_type:)
@echoes.values.select { |e| e.echo_type == echo_type.to_sym }
end
|
#loudest_echoes(limit: 5) ⇒ Object
67
68
69
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 67
def loudest_echoes(limit: 5)
@echoes.values.sort_by { |e| -e.amplitude }.first(limit)
end
|
#most_sealed_chambers(limit: 5) ⇒ Object
71
72
73
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 71
def most_sealed_chambers(limit: 5)
@chambers.values.sort_by { |c| -c.wall_thickness }.first(limit)
end
|
#resonating_echoes ⇒ Object
106
107
108
|
# File 'lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb', line 106
def resonating_echoes
@echoes.values.select(&:resonate?)
end
|