Class: Legion::Extensions::Agentic::Executive::Compass::Helpers::CompassEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Executive::Compass::Helpers::CompassEngine
- Defined in:
- lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb
Instance Method Summary collapse
- #accuracy ⇒ Object
- #accuracy_label ⇒ Object
- #all_bearings ⇒ Object
- #all_biases ⇒ Object
- #bearings_by_direction ⇒ Object
- #calibrate(bias_id:, amount: Constants::CALIBRATION_BOOST) ⇒ Object
- #compass_report ⇒ Object
- #decay_biases!(rate: Constants::DECLINATION_DECAY) ⇒ Object
- #dominant_direction ⇒ Object
-
#initialize ⇒ CompassEngine
constructor
A new instance of CompassEngine.
- #register_bias(bias_type:, domain:, declination: nil, strength: nil) ⇒ Object
- #strongest_biases(limit: 5) ⇒ Object
- #take_bearing(direction:, context:, confidence: nil) ⇒ Object
- #true_north_offset ⇒ Object
Constructor Details
#initialize ⇒ CompassEngine
Returns a new instance of CompassEngine.
10 11 12 13 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 10 def initialize @bearings = {} @biases = {} end |
Instance Method Details
#accuracy ⇒ Object
42 43 44 45 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 42 def accuracy offset = true_north_offset (1.0 - offset).clamp(0.0, 1.0).round(10) end |
#accuracy_label ⇒ Object
47 48 49 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 47 def accuracy_label Constants.label_for(Constants::ACCURACY_LABELS, accuracy) end |
#all_bearings ⇒ Object
89 90 91 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 89 def all_bearings @bearings.values end |
#all_biases ⇒ Object
93 94 95 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 93 def all_biases @biases.values end |
#bearings_by_direction ⇒ Object
66 67 68 69 70 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 66 def bearings_by_direction result = Hash.new(0) @bearings.each_value { |b| result[b.direction] += 1 } result end |
#calibrate(bias_id:, amount: Constants::CALIBRATION_BOOST) ⇒ Object
31 32 33 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 31 def calibrate(bias_id:, amount: Constants::CALIBRATION_BOOST) fetch_bias(bias_id).correct!(amount: amount) end |
#compass_report ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 76 def compass_report { total_bearings: @bearings.size, total_biases: @biases.size, accuracy: accuracy, accuracy_label: accuracy_label, true_north_offset: true_north_offset, dominant_direction: dominant_direction, by_direction: bearings_by_direction, severe_biases: @biases.count { |_, b| b.severe? } } end |
#decay_biases!(rate: Constants::DECLINATION_DECAY) ⇒ Object
51 52 53 54 55 56 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 51 def decay_biases!(rate: Constants::DECLINATION_DECAY) @biases.each_value { |b| b.decay!(rate: rate) } pruned = @biases.select { |_, b| b.negligible? && b.strength < 0.1 }.keys pruned.each { |id| @biases.delete(id) } { remaining: @biases.size, pruned: pruned.size } end |
#dominant_direction ⇒ Object
58 59 60 61 62 63 64 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 58 def dominant_direction return nil if @bearings.empty? counts = Hash.new(0) @bearings.each_value { |b| counts[b.direction] += b.confidence } counts.max_by { |_, v| v }&.first end |
#register_bias(bias_type:, domain:, declination: nil, strength: nil) ⇒ Object
22 23 24 25 26 27 28 29 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 22 def register_bias(bias_type:, domain:, declination: nil, strength: nil) raise ArgumentError, 'too many biases' if @biases.size >= Constants::MAX_BIASES bias = MagneticBias.new(bias_type: bias_type, domain: domain, declination: declination, strength: strength) @biases[bias.id] = bias bias end |
#strongest_biases(limit: 5) ⇒ Object
72 73 74 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 72 def strongest_biases(limit: 5) @biases.values.sort_by { |b| -b.strength }.first(limit) end |
#take_bearing(direction:, context:, confidence: nil) ⇒ Object
15 16 17 18 19 20 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 15 def take_bearing(direction:, context:, confidence: nil) bearing = Bearing.new(direction: direction, context: context, confidence: confidence) @bearings[bearing.id] = bearing bearing end |
#true_north_offset ⇒ Object
35 36 37 38 39 40 |
# File 'lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb', line 35 def true_north_offset return 0.0 if @biases.empty? total = @biases.values.sum(&:declination) (total / @biases.size).round(10) end |