Class: Legion::Extensions::Agentic::Memory::Episodic::Helpers::EpisodicStore
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Memory::Episodic::Helpers::EpisodicStore
show all
- Includes:
- Constants
- Defined in:
- lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb
Constant Summary
Constants included
from Constants
Constants::ATTENTION_BOOST, Constants::BINDING_DECAY, Constants::BINDING_STRENGTH_FLOOR, Constants::COHERENCE_LABELS, Constants::DEFAULT_BINDING_STRENGTH, Constants::EPISODE_TTL, Constants::INTEGRATION_THRESHOLD, Constants::MAX_BINDINGS_PER_EPISODE, Constants::MAX_EPISODES, Constants::MAX_HISTORY, Constants::MODALITIES, Constants::RECENTLY_ACCESSED_WINDOW, Constants::REHEARSAL_BOOST
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of EpisodicStore.
14
15
16
17
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 14
def initialize
@episodes = {}
@history = []
end
|
Instance Attribute Details
#episodes ⇒ Object
Returns the value of attribute episodes.
12
13
14
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 12
def episodes
@episodes
end
|
#history ⇒ Object
Returns the value of attribute history.
12
13
14
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 12
def history
@history
end
|
Instance Method Details
#add_to_episode(episode_id:, modality:, content:, source:, strength: DEFAULT_BINDING_STRENGTH) ⇒ Object
27
28
29
30
31
32
33
34
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 27
def add_to_episode(episode_id:, modality:, content:, source:, strength: DEFAULT_BINDING_STRENGTH)
episode = @episodes[episode_id]
return { success: false, reason: :episode_not_found } unless episode
result = episode.add_binding(modality: modality, content: content, source: source, strength: strength)
record_history(:add_binding, episode_id) if result[:added]
result
end
|
#attend_episode(episode_id:) ⇒ Object
36
37
38
39
40
41
42
43
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 36
def attend_episode(episode_id:)
episode = @episodes[episode_id]
return { success: false, reason: :episode_not_found } unless episode
episode.attend
record_history(:attend, episode_id)
{ success: true, episode_id: episode_id }
end
|
#count ⇒ Object
97
98
99
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 97
def count
@episodes.size
end
|
#create_episode ⇒ Object
19
20
21
22
23
24
25
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 19
def create_episode
evict_if_full
episode = Episode.new
@episodes[episode.id] = episode
record_history(:create, episode.id)
episode
end
|
#integrate(episode_id:) ⇒ Object
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 54
def integrate(episode_id:)
episode = @episodes[episode_id]
return { integrated: false, reason: :episode_not_found } unless episode
coherence = episode.coherence
integrated = coherence >= INTEGRATION_THRESHOLD
{
integrated: integrated,
episode_id: episode_id,
coherence: coherence,
coherence_label: episode.coherence_label
}
end
|
#most_coherent(limit: 5) ⇒ Object
77
78
79
80
81
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 77
def most_coherent(limit: 5)
@episodes.values
.sort_by { |ep| -ep.coherence }
.first(limit)
end
|
#rehearse_episode(episode_id:) ⇒ Object
45
46
47
48
49
50
51
52
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 45
def rehearse_episode(episode_id:)
episode = @episodes[episode_id]
return { success: false, reason: :episode_not_found } unless episode
episode.rehearse
record_history(:rehearse, episode_id)
{ success: true, episode_id: episode_id }
end
|
#retrieve_by_modality(modality:) ⇒ Object
68
69
70
71
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 68
def retrieve_by_modality(modality:)
mod = modality.to_sym
@episodes.values.select { |ep| ep.modalities_present.include?(mod) }
end
|
#retrieve_multimodal ⇒ Object
73
74
75
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 73
def retrieve_multimodal
@episodes.values.select(&:multimodal?)
end
|
#tick ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 83
def tick
expired_count = 0
@episodes.delete_if do |_, ep|
ep.decay_bindings
if ep.expired?
expired_count += 1
true
else
false
end
end
{ decayed: @episodes.size, expired: expired_count }
end
|
#to_h ⇒ Object
101
102
103
104
105
106
107
108
|
# File 'lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb', line 101
def to_h
{
episode_count: @episodes.size,
history_size: @history.size,
multimodal_count: retrieve_multimodal.size,
avg_coherence: average_coherence
}
end
|