Class: Llmemory::LongTerm::FileBased::Storages::MemoryStorage

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

Instance Method Summary collapse

Constructor Details

#initializeMemoryStorage

Returns a new instance of MemoryStorage.



10
11
12
13
14
15
16
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 10

def initialize
  @resources = Hash.new { |h, k| h[k] = [] }
  @items = Hash.new { |h, k| h[k] = [] }
  @categories = Hash.new { |h, k| h[k] = {} }
  @resource_id_seq = 0
  @item_id_seq = 0
end

Instance Method Details

#archive_items(user_id, item_ids) ⇒ Object



91
92
93
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 91

def archive_items(user_id, item_ids)
  @items[user_id].reject! { |i| item_ids.include?(i[:id]) }
end

#archive_resources(user_id, resource_ids) ⇒ Object



95
96
97
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 95

def archive_resources(user_id, resource_ids)
  @resources[user_id].reject! { |r| resource_ids.include?(r[:id]) }
end

#count_items(user_id:) ⇒ Object



118
119
120
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 118

def count_items(user_id:)
  @items[user_id].size
end

#get_all_items(user_id) ⇒ Object



73
74
75
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 73

def get_all_items(user_id)
  @items[user_id].dup
end

#get_all_resources(user_id) ⇒ Object



77
78
79
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 77

def get_all_resources(user_id)
  @resources[user_id].dup
end

#get_items_around(user_id, reference, before: 5, after: 5) ⇒ Object



122
123
124
125
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 122

def get_items_around(user_id, reference, before: 5, after: 5)
  items = @items[user_id].sort_by { |i| i[:created_at] }
  find_around(items, reference, :id, before, after)
end

#get_items_older_than(user_id, days:) ⇒ Object



68
69
70
71
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 68

def get_items_older_than(user_id, days:)
  cutoff = Time.now - (days * 86400)
  @items[user_id].select { |i| i[:created_at] < cutoff }
end

#get_items_since(user_id, hours:) ⇒ Object



81
82
83
84
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 81

def get_items_since(user_id, hours:)
  cutoff = Time.now - (hours * 3600)
  @items[user_id].select { |i| i[:created_at] >= cutoff }
end

#get_resources_around(user_id, reference, before: 5, after: 5) ⇒ Object



127
128
129
130
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 127

def get_resources_around(user_id, reference, before: 5, after: 5)
  resources = @resources[user_id].sort_by { |r| r[:created_at] }
  find_around(resources, reference, :id, before, after)
end

#get_resources_since(user_id, hours:) ⇒ Object



63
64
65
66
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 63

def get_resources_since(user_id, hours:)
  cutoff = Time.now - (hours * 3600)
  @resources[user_id].select { |r| r[:created_at] >= cutoff }
end

#list_categories(user_id) ⇒ Object



49
50
51
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 49

def list_categories(user_id)
  @categories[user_id].keys
end

#list_items(user_id:, category: nil, limit: nil) ⇒ Object



108
109
110
111
112
113
114
115
116
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 108

def list_items(user_id:, category: nil, limit: nil)
  list = if category
    @items[user_id].select { |i| i[:category].to_s == category.to_s }
  else
    @items[user_id].dup
  end
  list = list.take(limit) if limit
  list
end

#list_resources(user_id:, limit: nil) ⇒ Object



103
104
105
106
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 103

def list_resources(user_id:, limit: nil)
  list = @resources[user_id].dup
  limit ? list.take(limit) : list
end

#list_usersObject



99
100
101
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 99

def list_users
  (@resources.keys + @items.keys + @categories.keys).uniq
end

#load_category(user_id, category_name) ⇒ Object



40
41
42
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 40

def load_category(user_id, category_name)
  @categories[user_id][category_name].to_s
end

#replace_items(user_id, ids_to_remove, merged_item) ⇒ Object



86
87
88
89
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 86

def replace_items(user_id, ids_to_remove, merged_item)
  @items[user_id].reject! { |i| ids_to_remove.include?(i[:id]) }
  @items[user_id] << merged_item.merge(created_at: Time.now)
end

#save_category(user_id, category_name, content) ⇒ Object



44
45
46
47
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 44

def save_category(user_id, category_name, content)
  @categories[user_id][category_name] = content
  true
end

#save_item(user_id, category:, content:, source_resource_id:, importance: 0.7, provenance: nil) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 25

def save_item(user_id, category:, content:, source_resource_id:, importance: 0.7, provenance: nil)
  @item_id_seq += 1
  id = "item_#{@item_id_seq}"
  @items[user_id] << {
    id: id,
    category: category,
    content: content,
    source_resource_id: source_resource_id,
    importance: importance,
    provenance: provenance,
    created_at: Time.now
  }
  id
end

#save_resource(user_id, text) ⇒ Object



18
19
20
21
22
23
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 18

def save_resource(user_id, text)
  @resource_id_seq += 1
  id = "res_#{@resource_id_seq}"
  @resources[user_id] << { id: id, text: text, created_at: Time.now }
  id
end

#search_items(user_id, query) ⇒ Object



53
54
55
56
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 53

def search_items(user_id, query)
  query_lower = query.downcase
  @items[user_id].select { |i| i[:content].to_s.downcase.include?(query_lower) }
end

#search_resources(user_id, query) ⇒ Object



58
59
60
61
# File 'lib/llmemory/long_term/file_based/storages/memory_storage.rb', line 58

def search_resources(user_id, query)
  query_lower = query.downcase
  @resources[user_id].select { |r| r[:text].to_s.downcase.include?(query_lower) }
end