Class: Legion::Extensions::Agentic::Executive::ProspectiveMemory::Helpers::ProspectiveEngine

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeProspectiveEngine

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

#intentionsObject (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_expirationsObject



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_urgencyObject



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_rateObject



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_reportObject



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_intentionsObject



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_intentionsObject



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_hObject



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_intentionsObject



83
84
85
# File 'lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb', line 83

def triggered_intentions
  by_status(:triggered)
end