Class: Llmemory::LongTerm::Episodic::Storages::MemoryStorage

Inherits:
Base
  • Object
show all
Defined in:
lib/llmemory/long_term/episodic/storages/memory_storage.rb

Instance Method Summary collapse

Constructor Details

#initializeMemoryStorage

Returns a new instance of MemoryStorage.



10
11
12
13
# File 'lib/llmemory/long_term/episodic/storages/memory_storage.rb', line 10

def initialize
  @episodes = Hash.new { |h, k| h[k] = [] }
  @seq = 0
end

Instance Method Details

#count_episodes(user_id) ⇒ Object



39
40
41
# File 'lib/llmemory/long_term/episodic/storages/memory_storage.rb', line 39

def count_episodes(user_id)
  @episodes[user_id].size
end

#get_episode(user_id, id) ⇒ Object



24
25
26
# File 'lib/llmemory/long_term/episodic/storages/memory_storage.rb', line 24

def get_episode(user_id, id)
  @episodes[user_id].find { |e| e[:id] == id }
end

#list_episodes(user_id, limit: nil) ⇒ Object



28
29
30
31
# File 'lib/llmemory/long_term/episodic/storages/memory_storage.rb', line 28

def list_episodes(user_id, limit: nil)
  sorted = @episodes[user_id].sort_by { |e| e[:created_at] }.reverse
  limit && limit.to_i.positive? ? sorted.first(limit.to_i) : sorted
end

#list_usersObject



43
44
45
# File 'lib/llmemory/long_term/episodic/storages/memory_storage.rb', line 43

def list_users
  @episodes.keys
end

#save_episode(user_id, episode) ⇒ Object



15
16
17
18
19
20
21
22
# File 'lib/llmemory/long_term/episodic/storages/memory_storage.rb', line 15

def save_episode(user_id, episode)
  @seq += 1
  id = episode[:id] || episode["id"] || "ep_#{@seq}"
  record = symbolize(episode).merge(id: id, user_id: user_id)
  record[:created_at] ||= Time.now
  @episodes[user_id] << record
  id
end

#search_episodes(user_id, query) ⇒ Object



33
34
35
36
37
# File 'lib/llmemory/long_term/episodic/storages/memory_storage.rb', line 33

def search_episodes(user_id, query)
  q = query.to_s.downcase
  return list_episodes(user_id) if q.strip.empty?
  @episodes[user_id].select { |e| episode_text(e).downcase.include?(q) }
end