Class: Llmemory::ShortTerm::Stores::MemoryStore
- Defined in:
- lib/llmemory/short_term/stores/memory_store.rb
Instance Method Summary collapse
- #delete(user_id, session_id) ⇒ Object
-
#initialize(cipher: nil) ⇒ MemoryStore
constructor
A new instance of MemoryStore.
- #list_sessions(user_id:) ⇒ Object
- #list_users ⇒ Object
- #load(user_id, session_id) ⇒ Object
- #save(user_id, session_id, state) ⇒ Object
- #update(user_id, session_id, &block) ⇒ Object
Constructor Details
#initialize(cipher: nil) ⇒ MemoryStore
Returns a new instance of MemoryStore.
11 12 13 14 |
# File 'lib/llmemory/short_term/stores/memory_store.rb', line 11 def initialize(cipher: nil) @store = {} @mutexes = Hash.new { |h, k| h[k] = Mutex.new } end |
Instance Method Details
#delete(user_id, session_id) ⇒ Object
31 32 33 34 35 36 37 |
# File 'lib/llmemory/short_term/stores/memory_store.rb', line 31 def delete(user_id, session_id) key = key_for(user_id, session_id) @mutexes[key].synchronize do @store.delete(key) end true end |
#list_sessions(user_id:) ⇒ Object
55 56 57 58 59 60 61 |
# File 'lib/llmemory/short_term/stores/memory_store.rb', line 55 def list_sessions(user_id:) encoded_user = KeyCodec.encode(user_id) prefix = "#{encoded_user}#{KeyCodec::SEPARATOR}" @store.keys .select { |k| k.start_with?(prefix) } .map { |k| KeyCodec.split_composite_key(k, parts: 2).last } end |
#list_users ⇒ Object
51 52 53 |
# File 'lib/llmemory/short_term/stores/memory_store.rb', line 51 def list_users @store.keys.map { |k| KeyCodec.split_composite_key(k, parts: 2).first }.uniq end |
#load(user_id, session_id) ⇒ Object
24 25 26 27 28 29 |
# File 'lib/llmemory/short_term/stores/memory_store.rb', line 24 def load(user_id, session_id) key = key_for(user_id, session_id) @mutexes[key].synchronize do deep_copy(@store.dig(key, :state)) end end |
#save(user_id, session_id, state) ⇒ Object
16 17 18 19 20 21 22 |
# File 'lib/llmemory/short_term/stores/memory_store.rb', line 16 def save(user_id, session_id, state) key = key_for(user_id, session_id) @mutexes[key].synchronize do @store[key] = { state: deep_copy(state), updated_at: Time.now } end true end |
#update(user_id, session_id, &block) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/llmemory/short_term/stores/memory_store.rb', line 39 def update(user_id, session_id, &block) key = key_for(user_id, session_id) @mutexes[key].synchronize do current = deep_copy(@store.dig(key, :state)) new_state = yield(current) unless new_state.nil? @store[key] = { state: deep_copy(new_state), updated_at: Time.now } end deep_copy(new_state) end end |