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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +172 -0
  3. data/lib/llmemory/actions/reason.rb +49 -0
  4. data/lib/llmemory/actions.rb +8 -0
  5. data/lib/llmemory/configuration.rb +2 -0
  6. data/lib/llmemory/forget_log.rb +50 -0
  7. data/lib/llmemory/long_term/episodic/episode.rb +94 -0
  8. data/lib/llmemory/long_term/episodic/memory.rb +120 -0
  9. data/lib/llmemory/long_term/episodic/storage.rb +31 -0
  10. data/lib/llmemory/long_term/episodic/storages/base.rb +44 -0
  11. data/lib/llmemory/long_term/episodic/storages/file_storage.rb +126 -0
  12. data/lib/llmemory/long_term/episodic/storages/memory_storage.rb +74 -0
  13. data/lib/llmemory/long_term/episodic.rb +12 -0
  14. data/lib/llmemory/long_term/file_based/memory.rb +46 -0
  15. data/lib/llmemory/long_term/graph_based/memory.rb +30 -3
  16. data/lib/llmemory/long_term/procedural/memory.rb +116 -0
  17. data/lib/llmemory/long_term/procedural/skill.rb +93 -0
  18. data/lib/llmemory/long_term/procedural/storage.rb +31 -0
  19. data/lib/llmemory/long_term/procedural/storages/base.rb +53 -0
  20. data/lib/llmemory/long_term/procedural/storages/file_storage.rb +136 -0
  21. data/lib/llmemory/long_term/procedural/storages/memory_storage.rb +80 -0
  22. data/lib/llmemory/long_term/procedural.rb +12 -0
  23. data/lib/llmemory/long_term.rb +3 -0
  24. data/lib/llmemory/memory.rb +9 -1
  25. data/lib/llmemory/memory_module.rb +55 -0
  26. data/lib/llmemory/reflection/reflector.rb +116 -0
  27. data/lib/llmemory/reflection.rb +8 -0
  28. data/lib/llmemory/retrieval/engine.rb +115 -6
  29. data/lib/llmemory/retrieval/feedback_store.rb +50 -0
  30. data/lib/llmemory/short_term/checkpoint.rb +2 -14
  31. data/lib/llmemory/short_term/session_lifecycle.rb +3 -10
  32. data/lib/llmemory/short_term/stores.rb +27 -0
  33. data/lib/llmemory/version.rb +1 -1
  34. data/lib/llmemory/working_memory.rb +83 -0
  35. data/lib/llmemory.rb +5 -0
  36. 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
- case Llmemory.configuration.short_term_store.to_sym
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Llmemory
4
- VERSION = "0.1.16"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -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.1.16
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: