Class: Llmemory::LongTerm::Procedural::Storages::MemoryStorage

Inherits:
Base
  • Object
show all
Defined in:
lib/llmemory/long_term/procedural/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/procedural/storages/memory_storage.rb', line 10

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

Instance Method Details

#count_skills(user_id) ⇒ Object



52
53
54
# File 'lib/llmemory/long_term/procedural/storages/memory_storage.rb', line 52

def count_skills(user_id)
  @skills[user_id].size
end

#delete_skills(user_id, ids) ⇒ Object



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

def delete_skills(user_id, ids)
  ids = Array(ids).map(&:to_s)
  before = @skills[user_id].size
  @skills[user_id].reject! { |s| ids.include?(s[:id].to_s) }
  before - @skills[user_id].size
end

#find_skills_by_name(user_id, name) ⇒ Object



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

def find_skills_by_name(user_id, name)
  @skills[user_id].select { |s| s[:name].to_s == name.to_s }
end

#get_skill(user_id, id) ⇒ Object



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

def get_skill(user_id, id)
  @skills[user_id].find { |s| s[:id] == id }
end

#list_skills(user_id, limit: nil) ⇒ Object



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

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

#list_usersObject



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

def list_users
  @skills.keys
end

#record_outcome(user_id, skill_id, success:) ⇒ Object



43
44
45
46
47
48
49
50
# File 'lib/llmemory/long_term/procedural/storages/memory_storage.rb', line 43

def record_outcome(user_id, skill_id, success:)
  skill = get_skill(user_id, skill_id)
  return nil unless skill
  key = success ? :success_count : :failure_count
  skill[key] = (skill[key] || 0).to_i + 1
  skill[:updated_at] = Time.now
  skill
end

#save_skill(user_id, skill) ⇒ Object



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

def save_skill(user_id, skill)
  @seq += 1
  id = skill[:id] || skill["id"] || "skill_#{@seq}"
  record = symbolize(skill).merge(id: id, user_id: user_id)
  record[:created_at] ||= Time.now
  @skills[user_id] << record
  id
end

#search_skills(user_id, query) ⇒ Object



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

def search_skills(user_id, query)
  q = query.to_s.downcase
  return list_skills(user_id) if q.strip.empty?
  @skills[user_id].select { |s| skill_text(s).downcase.include?(q) }
end