Class: Legion::Extensions::Agentic::Executive::Flexibility::Helpers::FlexibilityEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Executive::Flexibility::Helpers::FlexibilityEngine
show all
- Includes:
- Constants
- Defined in:
- lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb
Constant Summary
Constants included
from Constants
Constants::ADAPTATION_ALPHA, Constants::DEFAULT_FLEXIBILITY, Constants::FLEXIBILITY_FLOOR, Constants::FLEXIBILITY_LABELS, Constants::MAX_RULES_PER_SET, Constants::MAX_SWITCH_HISTORY, Constants::MAX_TASK_SETS, Constants::PERSEVERATION_THRESHOLD, Constants::RULE_TYPES, Constants::SWITCH_COST_BASE, Constants::SWITCH_COST_DECAY
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of FlexibilityEngine.
14
15
16
17
18
19
20
21
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 14
def initialize
@task_sets = {}
@current_set_id = nil
@switch_cost = 0.0
@flexibility = DEFAULT_FLEXIBILITY
@switch_history = []
@counter = 0
end
|
Instance Attribute Details
#current_set_id ⇒ Object
Returns the value of attribute current_set_id.
12
13
14
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 12
def current_set_id
@current_set_id
end
|
#flexibility ⇒ Object
Returns the value of attribute flexibility.
12
13
14
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 12
def flexibility
@flexibility
end
|
#switch_cost ⇒ Object
Returns the value of attribute switch_cost.
12
13
14
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 12
def switch_cost
@switch_cost
end
|
#switch_history ⇒ Object
Returns the value of attribute switch_history.
12
13
14
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 12
def switch_history
@switch_history
end
|
#task_sets ⇒ Object
Returns the value of attribute task_sets.
12
13
14
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 12
def task_sets
@task_sets
end
|
Instance Method Details
#add_rule(set_id:, type:, condition:, action:) ⇒ Object
34
35
36
37
38
39
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 34
def add_rule(set_id:, type:, condition:, action:)
ts = @task_sets[set_id]
return nil unless ts
ts.add_rule(type: type, condition: condition, action: action)
end
|
#available_sets ⇒ Object
71
72
73
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 71
def available_sets
@task_sets.values.reject { |ts| ts.id == @current_set_id }.map(&:to_h)
end
|
#create_task_set(name:, domain: :general) ⇒ Object
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 23
def create_task_set(name:, domain: :general)
return nil if @task_sets.size >= MAX_TASK_SETS
@counter += 1
set_id = :"set_#{@counter}"
ts = TaskSet.new(id: set_id, name: name, domain: domain)
@task_sets[set_id] = ts
@current_set_id ||= set_id
ts
end
|
#current_set ⇒ Object
55
56
57
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 55
def current_set
@current_set_id ? @task_sets[@current_set_id] : nil
end
|
#flexibility_label ⇒ Object
59
60
61
62
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 59
def flexibility_label
FLEXIBILITY_LABELS.each { |range, lbl| return lbl if range.cover?(@flexibility) }
:perseverative
end
|
#perseverating? ⇒ Boolean
64
65
66
67
68
69
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 64
def perseverating?
cs = current_set
return false unless cs
cs.dominant? && @flexibility < 0.4
end
|
#switch_to(set_id:) ⇒ Object
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 41
def switch_to(set_id:)
return nil unless @task_sets.key?(set_id)
return @task_sets[set_id] if set_id == @current_set_id
old_id = @current_set_id
@task_sets[old_id]&.deactivate
@task_sets[set_id].activate
@current_set_id = set_id
@switch_cost = SWITCH_COST_BASE
update_flexibility(:success)
record_switch(from: old_id, to: set_id)
@task_sets[set_id]
end
|
#tick ⇒ Object
75
76
77
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 75
def tick
@switch_cost = [@switch_cost - SWITCH_COST_DECAY, 0.0].max
end
|
#to_h ⇒ Object
79
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb', line 79
def to_h
{
current_set: @current_set_id,
set_count: @task_sets.size,
switch_cost: @switch_cost.round(4),
flexibility: @flexibility.round(4),
label: flexibility_label,
perseverating: perseverating?,
switch_count: @switch_history.size
}
end
|