Class: Legion::Extensions::Agentic::Executive::DissonanceResolution::Helpers::ResolutionEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Executive::DissonanceResolution::Helpers::ResolutionEngine
show all
- Includes:
- Constants
- Defined in:
- lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb
Constant Summary
Constants included
from Constants
Constants::DEFAULT_TENSION, Constants::MAX_CONFLICTS, Constants::MAX_STRATEGIES, Constants::OUTCOME_LABELS, Constants::RESOLUTION_THRESHOLD, Constants::STRATEGIES, Constants::TENSION_DECAY, Constants::TENSION_LABELS
Instance Method Summary
collapse
Constructor Details
Returns a new instance of ResolutionEngine.
12
13
14
15
16
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 12
def initialize
@conflicts = {}
@strategy_history = Hash.new(0)
@strategy_successes = Hash.new(0)
end
|
Instance Method Details
#abandon_conflict(conflict_id:) ⇒ Object
50
51
52
53
54
55
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 50
def abandon_conflict(conflict_id:)
conflict = @conflicts[conflict_id]
return nil unless conflict
conflict.abandon!
end
|
#apply_strategy(conflict_id:, strategy:, effectiveness: 0.3) ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 30
def apply_strategy(conflict_id:, strategy:, effectiveness: 0.3)
conflict = @conflicts[conflict_id]
return nil unless conflict
strat = strategy.to_sym
return nil unless STRATEGIES.include?(strat)
@strategy_history[strat] += 1
conflict.apply_strategy!(strategy: strat, effectiveness: effectiveness)
@strategy_successes[strat] += 1 if conflict.resolved?
conflict
end
|
#average_tension ⇒ Object
109
110
111
112
113
114
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 109
def average_tension
return 0.0 if @conflicts.empty?
tensions = @conflicts.values.map(&:tension)
(tensions.sum / tensions.size).round(10)
end
|
#best_strategy ⇒ Object
62
63
64
65
66
67
68
69
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 62
def best_strategy
return nil if @strategy_history.empty?
@strategy_history.max_by do |strat, uses|
rate = uses.positive? ? @strategy_successes[strat].to_f / uses : 0.0
rate
end&.first
end
|
#conflicts_by_domain(domain:) ⇒ Object
92
93
94
95
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 92
def conflicts_by_domain(domain:)
d = domain.to_sym
@conflicts.values.select { |c| c.domain == d }
end
|
#create_conflict(belief_a:, belief_b:, domain: :general, tension: DEFAULT_TENSION) ⇒ Object
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 18
def create_conflict(belief_a:, belief_b:, domain: :general, tension: DEFAULT_TENSION)
prune_if_needed
conflict = DissonanceConflict.new(
belief_a: belief_a,
belief_b: belief_b,
domain: domain,
tension: tension
)
@conflicts[conflict.id] = conflict
conflict
end
|
#decay_all ⇒ Object
57
58
59
60
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 57
def decay_all
@conflicts.each_value(&:decay!)
@conflicts.size
end
|
#dissonance_report ⇒ Object
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 116
def dissonance_report
{
total_conflicts: @conflicts.size,
ongoing: ongoing_conflicts.size,
resolved: resolved_conflicts.size,
resolution_rate: resolution_rate,
average_tension: average_tension,
best_strategy: best_strategy,
most_tense: most_tense(limit: 3).map(&:to_h)
}
end
|
#escalate_conflict(conflict_id:, amount: 0.15) ⇒ Object
43
44
45
46
47
48
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 43
def escalate_conflict(conflict_id:, amount: 0.15)
conflict = @conflicts[conflict_id]
return nil unless conflict
conflict.escalate!(amount: amount)
end
|
#most_tense(limit: 5) ⇒ Object
97
98
99
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 97
def most_tense(limit: 5)
@conflicts.values.sort_by { |c| -c.tension }.first(limit)
end
|
#ongoing_conflicts ⇒ Object
84
85
86
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 84
def ongoing_conflicts
@conflicts.values.select { |c| c.outcome == :ongoing }
end
|
#resolution_rate ⇒ Object
101
102
103
104
105
106
107
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 101
def resolution_rate
total = @conflicts.size
return 0.0 if total.zero?
resolved = resolved_conflicts.size
(resolved.to_f / total).round(4)
end
|
#resolved_conflicts ⇒ Object
88
89
90
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 88
def resolved_conflicts
@conflicts.values.select { |c| c.outcome == :resolved }
end
|
#strategy_report ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 71
def strategy_report
STRATEGIES.map do |strat|
uses = @strategy_history[strat]
successes = @strategy_successes[strat]
{
strategy: strat,
uses: uses,
successes: successes,
success_rate: uses.positive? ? (successes.to_f / uses).round(4) : 0.0
}
end
end
|
#to_h ⇒ Object
128
129
130
131
132
133
134
135
136
|
# File 'lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb', line 128
def to_h
{
total_conflicts: @conflicts.size,
ongoing: ongoing_conflicts.size,
resolved: resolved_conflicts.size,
resolution_rate: resolution_rate,
average_tension: average_tension
}
end
|