Class: Legion::Extensions::Agentic::Attention::SensoryGating::Helpers::GatingEngine

Inherits:
Object
  • Object
show all
Includes:
Constants
Defined in:
lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb

Constant Summary

Constants included from Constants

Constants::DEFAULT_GATE_THRESHOLD, Constants::GATE_ADJUSTMENT, Constants::GATE_LABELS, Constants::HABITUATION_RATE, Constants::MAX_FILTERS, Constants::MAX_STIMULI, Constants::MODALITY_TYPES, Constants::SENSITIZATION_RATE, Constants::STIMULUS_LABELS

Instance Method Summary collapse

Constructor Details

#initializeGatingEngine

Returns a new instance of GatingEngine.



12
13
14
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 12

def initialize
  @filters = {}
end

Instance Method Details

#average_pass_rateObject



66
67
68
69
70
71
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 66

def average_pass_rate
  return 0.0 if @filters.empty?

  rates = @filters.values.map(&:pass_rate)
  (rates.sum / rates.size).round(10)
end

#close_gate(filter_id:, amount: GATE_ADJUSTMENT) ⇒ Object



40
41
42
43
44
45
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 40

def close_gate(filter_id:, amount: GATE_ADJUSTMENT)
  filter = @filters[filter_id]
  return nil unless filter

  filter.close_gate!(amount: amount)
end

#create_filter(modality:, gate_threshold: DEFAULT_GATE_THRESHOLD) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 16

def create_filter(modality:, gate_threshold: DEFAULT_GATE_THRESHOLD)
  return nil unless MODALITY_TYPES.include?(modality.to_sym)

  prune_if_needed
  filter = SensoryFilter.new(modality: modality, gate_threshold: gate_threshold)
  @filters[filter.id] = filter
  filter
end

#filters_by_modality(modality:) ⇒ Object



61
62
63
64
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 61

def filters_by_modality(modality:)
  m = modality.to_sym
  @filters.values.select { |f| f.modality == m }
end

#gating_reportObject



81
82
83
84
85
86
87
88
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 81

def gating_report
  {
    total_filters:     @filters.size,
    average_pass_rate: average_pass_rate,
    most_restrictive:  most_restrictive(limit: 3).map(&:to_h),
    most_permissive:   most_permissive(limit: 3).map(&:to_h)
  }
end

#most_permissive(limit: 5) ⇒ Object



77
78
79
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 77

def most_permissive(limit: 5)
  @filters.values.sort_by(&:effective_threshold).first(limit)
end

#most_restrictive(limit: 5) ⇒ Object



73
74
75
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 73

def most_restrictive(limit: 5)
  @filters.values.sort_by(&:effective_threshold).reverse.first(limit)
end

#open_gate(filter_id:, amount: GATE_ADJUSTMENT) ⇒ Object



33
34
35
36
37
38
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 33

def open_gate(filter_id:, amount: GATE_ADJUSTMENT)
  filter = @filters[filter_id]
  return nil unless filter

  filter.open_gate!(amount: amount)
end

#process_stimulus(filter_id:, intensity:) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 25

def process_stimulus(filter_id:, intensity:)
  filter = @filters[filter_id]
  return nil unless filter

  outcome = filter.process(intensity: intensity)
  { outcome: outcome, filter: filter }
end

#reset_habituation(filter_id:) ⇒ Object



54
55
56
57
58
59
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 54

def reset_habituation(filter_id:)
  filter = @filters[filter_id]
  return nil unless filter

  filter.reset_habituation!
end

#sensitize(filter_id:, amount: SENSITIZATION_RATE) ⇒ Object



47
48
49
50
51
52
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 47

def sensitize(filter_id:, amount: SENSITIZATION_RATE)
  filter = @filters[filter_id]
  return nil unless filter

  filter.sensitize!(amount: amount)
end

#to_hObject



90
91
92
93
94
95
# File 'lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb', line 90

def to_h
  {
    total_filters:     @filters.size,
    average_pass_rate: average_pass_rate
  }
end