Class: Legion::Extensions::Agentic::Self::Anosognosia::Helpers::AnosognosiaEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Self::Anosognosia::Helpers::AnosognosiaEngine
- Defined in:
- lib/legion/extensions/agentic/self/anosognosia/helpers/anosognosia_engine.rb
Instance Attribute Summary collapse
-
#awareness_score ⇒ Object
readonly
Returns the value of attribute awareness_score.
-
#deficits ⇒ Object
readonly
Returns the value of attribute deficits.
Instance Method Summary collapse
- #acknowledge_deficit(deficit_id:) ⇒ Object
- #awareness_gap ⇒ Object
- #blind_spots ⇒ Object
- #calibration_report ⇒ Object
- #decay_awareness(amount: Constants::AWARENESS_DECAY) ⇒ Object
-
#initialize ⇒ AnosognosiaEngine
constructor
A new instance of AnosognosiaEngine.
- #register_deficit(domain:, deficit_type:, severity:, acknowledged: false) ⇒ Object
- #reveal_blind_spot(deficit_id:) ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize ⇒ AnosognosiaEngine
Returns a new instance of AnosognosiaEngine.
12 13 14 15 |
# File 'lib/legion/extensions/agentic/self/anosognosia/helpers/anosognosia_engine.rb', line 12 def initialize @deficits = {} # id => CognitiveDeficit @awareness_score = 1.0 end |
Instance Attribute Details
#awareness_score ⇒ Object (readonly)
Returns the value of attribute awareness_score.
10 11 12 |
# File 'lib/legion/extensions/agentic/self/anosognosia/helpers/anosognosia_engine.rb', line 10 def awareness_score @awareness_score end |
#deficits ⇒ Object (readonly)
Returns the value of attribute deficits.
10 11 12 |
# File 'lib/legion/extensions/agentic/self/anosognosia/helpers/anosognosia_engine.rb', line 10 def deficits @deficits end |
Instance Method Details
#acknowledge_deficit(deficit_id:) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/legion/extensions/agentic/self/anosognosia/helpers/anosognosia_engine.rb', line 34 def acknowledge_deficit(deficit_id:) deficit = @deficits[deficit_id] return { found: false, deficit_id: deficit_id } unless deficit already = deficit.acknowledged changed = deficit.acknowledge! Legion::Logging.debug "[anosognosia] acknowledge_deficit: id=#{deficit_id} " \ "already_acknowledged=#{already} changed=#{changed}" recalculate_awareness { found: true, deficit_id: deficit_id, changed: changed, awareness_score: @awareness_score.round(10) } end |
#awareness_gap ⇒ Object
68 69 70 |
# File 'lib/legion/extensions/agentic/self/anosognosia/helpers/anosognosia_engine.rb', line 68 def awareness_gap (1.0 - @awareness_score).clamp(0.0, 1.0).round(10) end |
#blind_spots ⇒ Object
72 73 74 |
# File 'lib/legion/extensions/agentic/self/anosognosia/helpers/anosognosia_engine.rb', line 72 def blind_spots @deficits.values.reject(&:acknowledged) end |
#calibration_report ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/legion/extensions/agentic/self/anosognosia/helpers/anosognosia_engine.rb', line 76 def calibration_report total = @deficits.size acknowledged = @deficits.values.count(&:acknowledged) unacknowledged = total - acknowledged { total_deficits: total, acknowledged_deficits: acknowledged, unacknowledged_deficits: unacknowledged, awareness_score: @awareness_score.round(10), awareness_gap: awareness_gap, awareness_label: awareness_label, blind_spots: blind_spots.map(&:to_h), deficit_breakdown: deficit_type_breakdown } end |
#decay_awareness(amount: Constants::AWARENESS_DECAY) ⇒ Object
93 94 95 96 97 |
# File 'lib/legion/extensions/agentic/self/anosognosia/helpers/anosognosia_engine.rb', line 93 def decay_awareness(amount: Constants::AWARENESS_DECAY) @awareness_score = (@awareness_score - amount).clamp(0.0, 1.0) Legion::Logging.debug "[anosognosia] decay_awareness: score=#{@awareness_score.round(2)}" @awareness_score end |
#register_deficit(domain:, deficit_type:, severity:, acknowledged: false) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/legion/extensions/agentic/self/anosognosia/helpers/anosognosia_engine.rb', line 17 def register_deficit(domain:, deficit_type:, severity:, acknowledged: false) prune_if_at_capacity deficit = CognitiveDeficit.new( domain: domain, deficit_type: deficit_type, severity: severity, acknowledged: acknowledged ) @deficits[deficit.id] = deficit Legion::Logging.info "[anosognosia] register_deficit: id=#{deficit.id} domain=#{domain} " \ "type=#{deficit_type} severity=#{deficit.severity.round(2)} acknowledged=#{acknowledged}" deficit end |
#reveal_blind_spot(deficit_id:) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/legion/extensions/agentic/self/anosognosia/helpers/anosognosia_engine.rb', line 48 def reveal_blind_spot(deficit_id:) deficit = @deficits[deficit_id] return { found: false, deficit_id: deficit_id } unless deficit return { found: true, deficit_id: deficit_id, already_known: true } if deficit.acknowledged deficit.acknowledge! boost_awareness Legion::Logging.info "[anosognosia] blind_spot_revealed: id=#{deficit_id} domain=#{deficit.domain} " \ "type=#{deficit.deficit_type} awareness_score=#{@awareness_score.round(2)}" { found: true, deficit_id: deficit_id, already_known: false, awareness_score: @awareness_score.round(10), awareness_label: awareness_label } end |
#to_h ⇒ Object
99 100 101 102 103 104 105 106 107 108 |
# File 'lib/legion/extensions/agentic/self/anosognosia/helpers/anosognosia_engine.rb', line 99 def to_h { deficits: @deficits.transform_values(&:to_h), awareness_score: @awareness_score.round(10), awareness_gap: awareness_gap, awareness_label: awareness_label, total_deficits: @deficits.size, blind_spot_count: blind_spots.size } end |