Class: Legion::Extensions::Agentic::Executive::ProspectiveMemory::Helpers::ProspectiveEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Executive::ProspectiveMemory::Helpers::ProspectiveEngine
- Defined in:
- lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb
Instance Attribute Summary collapse
-
#intentions ⇒ Object
readonly
Returns the value of attribute intentions.
Instance Method Summary collapse
- #by_domain(domain:) ⇒ Object
- #by_urgency(min_urgency: 0.5) ⇒ Object
- #cancel_intention(intention_id:) ⇒ Object
- #check_expirations ⇒ Object
- #create_intention(description:, trigger_type:, trigger_condition:, urgency: Constants::DEFAULT_URGENCY, domain: nil, expires_at: nil) ⇒ Object
- #decay_all_urgency ⇒ Object
- #execute_intention(intention_id:) ⇒ Object
- #execution_rate ⇒ Object
-
#initialize ⇒ ProspectiveEngine
constructor
A new instance of ProspectiveEngine.
- #intention_report ⇒ Object
- #monitor_intention(intention_id:) ⇒ Object
- #monitoring_intentions ⇒ Object
- #most_urgent(limit: 5) ⇒ Object
- #pending_intentions ⇒ Object
- #to_h ⇒ Object
- #trigger_intention(intention_id:) ⇒ Object
- #triggered_intentions ⇒ Object
Constructor Details
#initialize ⇒ ProspectiveEngine
Returns a new instance of ProspectiveEngine.
12 13 14 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 12 def initialize @intentions = {} end |
Instance Attribute Details
#intentions ⇒ Object (readonly)
Returns the value of attribute intentions.
10 11 12 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 10 def intentions @intentions end |
Instance Method Details
#by_domain(domain:) ⇒ Object
87 88 89 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 87 def by_domain(domain:) @intentions.values.select { |i| i.domain == domain } end |
#by_urgency(min_urgency: 0.5) ⇒ Object
91 92 93 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 91 def by_urgency(min_urgency: 0.5) @intentions.values.select { |i| i.urgency >= min_urgency } end |
#cancel_intention(intention_id:) ⇒ Object
56 57 58 59 60 61 62 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 56 def cancel_intention(intention_id:) intention = fetch(intention_id) return nil unless intention intention.cancel! intention end |
#check_expirations ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 64 def check_expirations expired_count = 0 @intentions.each_value do |intention| next unless %i[pending monitoring].include?(intention.status) && intention.expired? intention.expire! expired_count += 1 end expired_count end |
#create_intention(description:, trigger_type:, trigger_condition:, urgency: Constants::DEFAULT_URGENCY, domain: nil, expires_at: nil) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 16 def create_intention(description:, trigger_type:, trigger_condition:, urgency: Constants::DEFAULT_URGENCY, domain: nil, expires_at: nil) evict_oldest! if @intentions.size >= Constants::MAX_INTENTIONS intention = Intention.new( description: description, trigger_type: trigger_type, trigger_condition: trigger_condition, urgency: urgency, domain: domain, expires_at: expires_at ) @intentions[intention.id] = intention intention end |
#decay_all_urgency ⇒ Object
100 101 102 103 104 105 106 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 100 def decay_all_urgency @intentions.each_value do |intention| next unless %i[pending monitoring].include?(intention.status) intention.decay_urgency! end end |
#execute_intention(intention_id:) ⇒ Object
48 49 50 51 52 53 54 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 48 def execute_intention(intention_id:) intention = fetch(intention_id) return nil unless intention intention.execute! intention end |
#execution_rate ⇒ Object
108 109 110 111 112 113 114 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 108 def execution_rate terminal = @intentions.values.select { |i| %i[executed expired cancelled].include?(i.status) } return 0.0 if terminal.empty? executed = terminal.count { |i| i.status == :executed } (executed.to_f / terminal.size).round(10) end |
#intention_report ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 116 def intention_report all = @intentions.values counts = Constants::STATUS_TYPES.to_h do |s| [s, all.count { |i| i.status == s }] end { total: all.size, by_status: counts, execution_rate: execution_rate, most_urgent: most_urgent(limit: 5).map(&:to_h) } end |
#monitor_intention(intention_id:) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 32 def monitor_intention(intention_id:) intention = fetch(intention_id) return nil unless intention intention.monitor! intention end |
#monitoring_intentions ⇒ Object
79 80 81 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 79 def monitoring_intentions by_status(:monitoring) end |
#most_urgent(limit: 5) ⇒ Object
95 96 97 98 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 95 def most_urgent(limit: 5) active = @intentions.values.reject { |i| %i[executed expired cancelled].include?(i.status) } active.sort_by { |i| -i.urgency }.first(limit) end |
#pending_intentions ⇒ Object
75 76 77 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 75 def pending_intentions by_status(:pending) end |
#to_h ⇒ Object
129 130 131 132 133 134 135 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 129 def to_h { intentions: @intentions.transform_values(&:to_h), intention_count: @intentions.size, execution_rate: execution_rate } end |
#trigger_intention(intention_id:) ⇒ Object
40 41 42 43 44 45 46 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 40 def trigger_intention(intention_id:) intention = fetch(intention_id) return nil unless intention intention.trigger! intention end |
#triggered_intentions ⇒ Object
83 84 85 |
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 83 def triggered_intentions by_status(:triggered) end |