Class: Legion::Extensions::Agentic::Affect::Resonance::Helpers::ResonanceEngine

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/agentic/affect/resonance/helpers/resonance_engine.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(vigilance: Constants::DEFAULT_VIGILANCE) ⇒ ResonanceEngine

Returns a new instance of ResonanceEngine.



12
13
14
15
# File 'lib/legion/extensions/agentic/affect/resonance/helpers/resonance_engine.rb', line 12

def initialize(vigilance: Constants::DEFAULT_VIGILANCE)
  @vigilance  = vigilance.clamp(0.0, 1.0)
  @categories = {}
end

Instance Attribute Details

#vigilanceObject (readonly)

Returns the value of attribute vigilance.



10
11
12
# File 'lib/legion/extensions/agentic/affect/resonance/helpers/resonance_engine.rb', line 10

def vigilance
  @vigilance
end

Instance Method Details

#adjust_vigilance(amount:) ⇒ Object



44
45
46
47
48
# File 'lib/legion/extensions/agentic/affect/resonance/helpers/resonance_engine.rb', line 44

def adjust_vigilance(amount:)
  @vigilance = (@vigilance + amount).clamp(0.0, 1.0)
  Legion::Logging.debug("[cognitive_resonance] vigilance adjusted to #{@vigilance.round(3)}") # rubocop:disable Legion/HelperMigration/DirectLogging
  @vigilance
end

#best_match(input) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/legion/extensions/agentic/affect/resonance/helpers/resonance_engine.rb', line 28

def best_match(input)
  return nil if @categories.empty?

  normalized = input.map { |v| v.to_f.clamp(0.0, 1.0) }
  best = nil

  @categories.each_value do |category|
    quality = category.match_quality(input: normalized)
    next unless best.nil? || quality > best[:quality]

    best = { id: category.id, quality: quality }
  end

  best
end

#category_countObject



50
51
52
# File 'lib/legion/extensions/agentic/affect/resonance/helpers/resonance_engine.rb', line 50

def category_count
  @categories.size
end

#present_input(input:) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/legion/extensions/agentic/affect/resonance/helpers/resonance_engine.rb', line 17

def present_input(input:)
  normalized = input.map { |v| v.to_f.clamp(0.0, 1.0) }
  match      = best_match(normalized)

  if match && match[:quality] >= @vigilance
    resonate_with(match, normalized)
  else
    create_category(normalized, prior_match: match)
  end
end

#resonance_reportObject



54
55
56
57
58
59
60
61
62
# File 'lib/legion/extensions/agentic/affect/resonance/helpers/resonance_engine.rb', line 54

def resonance_report
  vigilance_lbl = Constants.vigilance_label(@vigilance)
  {
    category_count:  @categories.size,
    vigilance:       @vigilance,
    vigilance_label: vigilance_lbl,
    categories:      @categories.values.map(&:to_h)
  }
end

#to_hObject



64
65
66
67
68
69
# File 'lib/legion/extensions/agentic/affect/resonance/helpers/resonance_engine.rb', line 64

def to_h
  {
    vigilance:      @vigilance,
    category_count: @categories.size
  }
end