Class: Legion::Extensions::Agentic::Memory::EchoChamber::Helpers::ChamberEngine

Inherits:
Object
  • Object
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

#initializeChamberEngine

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_echoesObject



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_historyObject



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_reportObject



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_echoesObject



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