llmemory 0.1.16 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +172 -0
- data/lib/llmemory/actions/reason.rb +49 -0
- data/lib/llmemory/actions.rb +8 -0
- data/lib/llmemory/configuration.rb +2 -0
- data/lib/llmemory/forget_log.rb +50 -0
- data/lib/llmemory/long_term/episodic/episode.rb +94 -0
- data/lib/llmemory/long_term/episodic/memory.rb +120 -0
- data/lib/llmemory/long_term/episodic/storage.rb +31 -0
- data/lib/llmemory/long_term/episodic/storages/base.rb +44 -0
- data/lib/llmemory/long_term/episodic/storages/file_storage.rb +126 -0
- data/lib/llmemory/long_term/episodic/storages/memory_storage.rb +74 -0
- data/lib/llmemory/long_term/episodic.rb +12 -0
- data/lib/llmemory/long_term/file_based/memory.rb +46 -0
- data/lib/llmemory/long_term/graph_based/memory.rb +30 -3
- data/lib/llmemory/long_term/procedural/memory.rb +116 -0
- data/lib/llmemory/long_term/procedural/skill.rb +93 -0
- data/lib/llmemory/long_term/procedural/storage.rb +31 -0
- data/lib/llmemory/long_term/procedural/storages/base.rb +53 -0
- data/lib/llmemory/long_term/procedural/storages/file_storage.rb +136 -0
- data/lib/llmemory/long_term/procedural/storages/memory_storage.rb +80 -0
- data/lib/llmemory/long_term/procedural.rb +12 -0
- data/lib/llmemory/long_term.rb +3 -0
- data/lib/llmemory/memory.rb +9 -1
- data/lib/llmemory/memory_module.rb +55 -0
- data/lib/llmemory/reflection/reflector.rb +116 -0
- data/lib/llmemory/reflection.rb +8 -0
- data/lib/llmemory/retrieval/engine.rb +115 -6
- data/lib/llmemory/retrieval/feedback_store.rb +50 -0
- data/lib/llmemory/short_term/checkpoint.rb +2 -14
- data/lib/llmemory/short_term/session_lifecycle.rb +3 -10
- data/lib/llmemory/short_term/stores.rb +27 -0
- data/lib/llmemory/version.rb +1 -1
- data/lib/llmemory/working_memory.rb +83 -0
- data/lib/llmemory.rb +5 -0
- metadata +24 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative "stores"
|
|
4
|
+
|
|
3
5
|
module Llmemory
|
|
4
6
|
module ShortTerm
|
|
5
7
|
class SessionLifecycle
|
|
@@ -72,16 +74,7 @@ module Llmemory
|
|
|
72
74
|
private
|
|
73
75
|
|
|
74
76
|
def build_store
|
|
75
|
-
|
|
76
|
-
when :memory then Stores::MemoryStore.new
|
|
77
|
-
when :redis then Stores::RedisStore.new
|
|
78
|
-
when :postgres then Stores::PostgresStore.new
|
|
79
|
-
when :active_record, :activerecord
|
|
80
|
-
require_relative "stores/active_record_store"
|
|
81
|
-
Stores::ActiveRecordStore.new
|
|
82
|
-
else
|
|
83
|
-
Stores::MemoryStore.new
|
|
84
|
-
end
|
|
77
|
+
Stores.build
|
|
85
78
|
end
|
|
86
79
|
end
|
|
87
80
|
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "stores/base"
|
|
4
|
+
require_relative "stores/memory_store"
|
|
5
|
+
require_relative "stores/redis_store"
|
|
6
|
+
require_relative "stores/postgres_store"
|
|
7
|
+
|
|
8
|
+
module Llmemory
|
|
9
|
+
module ShortTerm
|
|
10
|
+
module Stores
|
|
11
|
+
# Single source of truth for selecting a short-term store backend.
|
|
12
|
+
# Shared by Checkpoint, SessionLifecycle and WorkingMemory.
|
|
13
|
+
def self.build(store_type = nil)
|
|
14
|
+
case (store_type || Llmemory.configuration.short_term_store).to_sym
|
|
15
|
+
when :memory then MemoryStore.new
|
|
16
|
+
when :redis then RedisStore.new
|
|
17
|
+
when :postgres then PostgresStore.new
|
|
18
|
+
when :active_record, :activerecord
|
|
19
|
+
require_relative "stores/active_record_store"
|
|
20
|
+
ActiveRecordStore.new
|
|
21
|
+
else
|
|
22
|
+
MemoryStore.new
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/lib/llmemory/version.rb
CHANGED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "short_term/stores"
|
|
4
|
+
|
|
5
|
+
module Llmemory
|
|
6
|
+
# CoALA's "working memory": a structured, symbolic scratch space that persists
|
|
7
|
+
# across LLM calls within a session — distinct from the raw message buffer
|
|
8
|
+
# (Checkpoint). It is the central hub an agent reads from and writes to while
|
|
9
|
+
# reasoning (goals, current task, retrieved context, intermediate reasoning,
|
|
10
|
+
# last observation, free-form scratchpad), plus arbitrary custom slots.
|
|
11
|
+
#
|
|
12
|
+
# Backed by the same pluggable short-term stores as Checkpoint, but under a
|
|
13
|
+
# namespaced session key so working-memory slots never collide with messages.
|
|
14
|
+
class WorkingMemory
|
|
15
|
+
DEFAULT_SESSION_ID = "default"
|
|
16
|
+
SESSION_SUFFIX = ":working_memory"
|
|
17
|
+
SLOTS = %i[goals current_task retrieved_context scratchpad last_observation intermediate_reasoning].freeze
|
|
18
|
+
|
|
19
|
+
attr_reader :user_id, :session_id
|
|
20
|
+
|
|
21
|
+
def initialize(user_id:, session_id: DEFAULT_SESSION_ID, store: nil)
|
|
22
|
+
@user_id = user_id
|
|
23
|
+
@session_id = session_id
|
|
24
|
+
@store_key = "#{session_id}#{SESSION_SUFFIX}"
|
|
25
|
+
@store = store || ShortTerm::Stores.build
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
SLOTS.each do |slot|
|
|
29
|
+
define_method(slot) { read[slot] }
|
|
30
|
+
define_method("#{slot}=") { |value| set(slot, value) }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Read/write an arbitrary slot (typed or custom).
|
|
34
|
+
def get(slot)
|
|
35
|
+
read[slot.to_sym]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def set(slot, value)
|
|
39
|
+
state = read
|
|
40
|
+
state[slot.to_sym] = value
|
|
41
|
+
persist(state)
|
|
42
|
+
value
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Bulk update in a single write.
|
|
46
|
+
def update(**slots)
|
|
47
|
+
state = read
|
|
48
|
+
slots.each { |k, v| state[k.to_sym] = v }
|
|
49
|
+
persist(state)
|
|
50
|
+
state
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Slots set by the caller beyond the predefined typed ones.
|
|
54
|
+
def custom_slots
|
|
55
|
+
read.reject { |k, _| SLOTS.include?(k) }
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def to_h
|
|
59
|
+
read
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def clear!
|
|
63
|
+
@store.delete(@user_id, @store_key)
|
|
64
|
+
true
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
private
|
|
68
|
+
|
|
69
|
+
def read
|
|
70
|
+
state = @store.load(@user_id, @store_key)
|
|
71
|
+
return {} unless state.is_a?(Hash)
|
|
72
|
+
symbolize(state)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def persist(state)
|
|
76
|
+
@store.save(@user_id, @store_key, state)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def symbolize(hash)
|
|
80
|
+
hash.each_with_object({}) { |(k, v), acc| acc[k.to_sym] = v }
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
data/lib/llmemory.rb
CHANGED
|
@@ -3,13 +3,18 @@
|
|
|
3
3
|
require_relative "llmemory/version"
|
|
4
4
|
require_relative "llmemory/configuration"
|
|
5
5
|
require_relative "llmemory/provenance"
|
|
6
|
+
require_relative "llmemory/memory_module"
|
|
7
|
+
require_relative "llmemory/forget_log"
|
|
6
8
|
require_relative "llmemory/llm"
|
|
7
9
|
require_relative "llmemory/short_term"
|
|
10
|
+
require_relative "llmemory/working_memory"
|
|
8
11
|
require_relative "llmemory/long_term"
|
|
9
12
|
require_relative "llmemory/retrieval"
|
|
10
13
|
require_relative "llmemory/vector_store"
|
|
11
14
|
require_relative "llmemory/maintenance"
|
|
12
15
|
require_relative "llmemory/extractors"
|
|
16
|
+
require_relative "llmemory/reflection"
|
|
17
|
+
require_relative "llmemory/actions"
|
|
13
18
|
require_relative "llmemory/memory"
|
|
14
19
|
|
|
15
20
|
module Llmemory
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: llmemory
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- llmemory
|
|
@@ -127,6 +127,8 @@ files:
|
|
|
127
127
|
- lib/generators/llmemory/install/install_generator.rb
|
|
128
128
|
- lib/generators/llmemory/install/templates/create_llmemory_tables.rb
|
|
129
129
|
- lib/llmemory.rb
|
|
130
|
+
- lib/llmemory/actions.rb
|
|
131
|
+
- lib/llmemory/actions/reason.rb
|
|
130
132
|
- lib/llmemory/cli.rb
|
|
131
133
|
- lib/llmemory/cli/commands/base.rb
|
|
132
134
|
- lib/llmemory/cli/commands/long_term.rb
|
|
@@ -147,11 +149,19 @@ files:
|
|
|
147
149
|
- lib/llmemory/extractors.rb
|
|
148
150
|
- lib/llmemory/extractors/entity_relation_extractor.rb
|
|
149
151
|
- lib/llmemory/extractors/fact_extractor.rb
|
|
152
|
+
- lib/llmemory/forget_log.rb
|
|
150
153
|
- lib/llmemory/llm.rb
|
|
151
154
|
- lib/llmemory/llm/anthropic.rb
|
|
152
155
|
- lib/llmemory/llm/base.rb
|
|
153
156
|
- lib/llmemory/llm/openai.rb
|
|
154
157
|
- lib/llmemory/long_term.rb
|
|
158
|
+
- lib/llmemory/long_term/episodic.rb
|
|
159
|
+
- lib/llmemory/long_term/episodic/episode.rb
|
|
160
|
+
- lib/llmemory/long_term/episodic/memory.rb
|
|
161
|
+
- lib/llmemory/long_term/episodic/storage.rb
|
|
162
|
+
- lib/llmemory/long_term/episodic/storages/base.rb
|
|
163
|
+
- lib/llmemory/long_term/episodic/storages/file_storage.rb
|
|
164
|
+
- lib/llmemory/long_term/episodic/storages/memory_storage.rb
|
|
155
165
|
- lib/llmemory/long_term/file_based.rb
|
|
156
166
|
- lib/llmemory/long_term/file_based/category.rb
|
|
157
167
|
- lib/llmemory/long_term/file_based/item.rb
|
|
@@ -176,6 +186,13 @@ files:
|
|
|
176
186
|
- lib/llmemory/long_term/graph_based/storages/active_record_storage.rb
|
|
177
187
|
- lib/llmemory/long_term/graph_based/storages/base.rb
|
|
178
188
|
- lib/llmemory/long_term/graph_based/storages/memory_storage.rb
|
|
189
|
+
- lib/llmemory/long_term/procedural.rb
|
|
190
|
+
- lib/llmemory/long_term/procedural/memory.rb
|
|
191
|
+
- lib/llmemory/long_term/procedural/skill.rb
|
|
192
|
+
- lib/llmemory/long_term/procedural/storage.rb
|
|
193
|
+
- lib/llmemory/long_term/procedural/storages/base.rb
|
|
194
|
+
- lib/llmemory/long_term/procedural/storages/file_storage.rb
|
|
195
|
+
- lib/llmemory/long_term/procedural/storages/memory_storage.rb
|
|
179
196
|
- lib/llmemory/maintenance.rb
|
|
180
197
|
- lib/llmemory/maintenance/consolidator.rb
|
|
181
198
|
- lib/llmemory/maintenance/reindexer.rb
|
|
@@ -194,12 +211,16 @@ files:
|
|
|
194
211
|
- lib/llmemory/mcp/tools/memory_timeline.rb
|
|
195
212
|
- lib/llmemory/mcp/tools/memory_timeline_context.rb
|
|
196
213
|
- lib/llmemory/memory.rb
|
|
214
|
+
- lib/llmemory/memory_module.rb
|
|
197
215
|
- lib/llmemory/noise_filter.rb
|
|
198
216
|
- lib/llmemory/provenance.rb
|
|
217
|
+
- lib/llmemory/reflection.rb
|
|
218
|
+
- lib/llmemory/reflection/reflector.rb
|
|
199
219
|
- lib/llmemory/retrieval.rb
|
|
200
220
|
- lib/llmemory/retrieval/bm25_scorer.rb
|
|
201
221
|
- lib/llmemory/retrieval/context_assembler.rb
|
|
202
222
|
- lib/llmemory/retrieval/engine.rb
|
|
223
|
+
- lib/llmemory/retrieval/feedback_store.rb
|
|
203
224
|
- lib/llmemory/retrieval/mmr_reranker.rb
|
|
204
225
|
- lib/llmemory/retrieval/temporal_ranker.rb
|
|
205
226
|
- lib/llmemory/short_term.rb
|
|
@@ -207,6 +228,7 @@ files:
|
|
|
207
228
|
- lib/llmemory/short_term/message_sanitizer.rb
|
|
208
229
|
- lib/llmemory/short_term/pruner.rb
|
|
209
230
|
- lib/llmemory/short_term/session_lifecycle.rb
|
|
231
|
+
- lib/llmemory/short_term/stores.rb
|
|
210
232
|
- lib/llmemory/short_term/stores/active_record_checkpoint.rb
|
|
211
233
|
- lib/llmemory/short_term/stores/active_record_store.rb
|
|
212
234
|
- lib/llmemory/short_term/stores/base.rb
|
|
@@ -220,6 +242,7 @@ files:
|
|
|
220
242
|
- lib/llmemory/vector_store/memory_store.rb
|
|
221
243
|
- lib/llmemory/vector_store/openai_embeddings.rb
|
|
222
244
|
- lib/llmemory/version.rb
|
|
245
|
+
- lib/llmemory/working_memory.rb
|
|
223
246
|
- lib/tasks/release.rake
|
|
224
247
|
homepage: https://github.com/entaina/llmemory
|
|
225
248
|
licenses:
|