Class: Llmemory::LongTerm::Procedural::Storages::FileStorage
- Includes:
- Crypto::FieldHelpers
- Defined in:
- lib/llmemory/long_term/procedural/storages/file_storage.rb
Instance Method Summary collapse
- #archive_skills(user_id, ids) ⇒ Object
- #count_skills(user_id) ⇒ Object
- #delete_skills(user_id, ids) ⇒ Object
- #expired_skill_ids(user_id, cutoff:) ⇒ Object
- #find_skills_by_name(user_id, name) ⇒ Object
- #get_skill(user_id, id) ⇒ Object
-
#initialize(base_path: nil, cipher: nil) ⇒ FileStorage
constructor
A new instance of FileStorage.
- #list_skills(user_id, limit: nil, offset: nil) ⇒ Object
- #list_users ⇒ Object
- #record_outcome(user_id, skill_id, success:) ⇒ Object
- #save_skill(user_id, skill) ⇒ Object
- #search_skills(user_id, query) ⇒ Object
Constructor Details
#initialize(base_path: nil, cipher: nil) ⇒ FileStorage
Returns a new instance of FileStorage.
16 17 18 19 20 |
# File 'lib/llmemory/long_term/procedural/storages/file_storage.rb', line 16 def initialize(base_path: nil, cipher: nil) @base_path = base_path || Llmemory.configuration.long_term_storage_path || "./llmemory_data" @base_path = File.(@base_path) @cipher = cipher || Llmemory.build_cipher end |
Instance Method Details
#archive_skills(user_id, ids) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/llmemory/long_term/procedural/storages/file_storage.rb', line 74 def archive_skills(user_id, ids) Array(ids).map(&:to_s).count do |id| path = skill_path(user_id, id) next false unless File.file?(path) data = load_skill_raw(path) next false if data["archived_at"] data["archived_at"] = Time.now.iso8601 write_skill_file(path, data) true end end |
#count_skills(user_id) ⇒ Object
61 62 63 |
# File 'lib/llmemory/long_term/procedural/storages/file_storage.rb', line 61 def count_skills(user_id) active_skills(user_id).size end |
#delete_skills(user_id, ids) ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/llmemory/long_term/procedural/storages/file_storage.rb', line 65 def delete_skills(user_id, ids) Array(ids).map(&:to_s).count do |id| path = skill_path(user_id, id) next false unless File.file?(path) File.delete(path) true end end |
#expired_skill_ids(user_id, cutoff:) ⇒ Object
86 87 88 89 90 |
# File 'lib/llmemory/long_term/procedural/storages/file_storage.rb', line 86 def expired_skill_ids(user_id, cutoff:) active_skills(user_id) .select { |s| (s[:created_at] || Time.now) < cutoff } .map { |s| s[:id].to_s } end |
#find_skills_by_name(user_id, name) ⇒ Object
47 48 49 |
# File 'lib/llmemory/long_term/procedural/storages/file_storage.rb', line 47 def find_skills_by_name(user_id, name) active_skills(user_id).select { |s| s[:name].to_s == name.to_s } end |
#get_skill(user_id, id) ⇒ Object
30 31 32 33 34 |
# File 'lib/llmemory/long_term/procedural/storages/file_storage.rb', line 30 def get_skill(user_id, id) path = skill_path(user_id, id) return nil unless File.file?(path) load_skill(path) end |
#list_skills(user_id, limit: nil, offset: nil) ⇒ Object
36 37 38 39 40 |
# File 'lib/llmemory/long_term/procedural/storages/file_storage.rb', line 36 def list_skills(user_id, limit: nil, offset: nil) sorted = active_skills(user_id).sort_by { |s| s[:created_at] }.reverse sorted = sorted.drop(offset.to_i) if offset && offset.to_i.positive? limit && limit.to_i.positive? ? sorted.first(limit.to_i) : sorted end |
#list_users ⇒ Object
92 93 94 95 |
# File 'lib/llmemory/long_term/procedural/storages/file_storage.rb', line 92 def list_users return [] unless Dir.exist?(@base_path) Dir.children(@base_path).select { |d| Dir.exist?(File.join(@base_path, d, "skills")) } end |
#record_outcome(user_id, skill_id, success:) ⇒ Object
51 52 53 54 55 56 57 58 59 |
# File 'lib/llmemory/long_term/procedural/storages/file_storage.rb', line 51 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.iso8601(6) write_skill_file(skill_path(user_id, skill_id), stringify_for_json(skill)) skill end |
#save_skill(user_id, skill) ⇒ Object
22 23 24 25 26 27 28 |
# File 'lib/llmemory/long_term/procedural/storages/file_storage.rb', line 22 def save_skill(user_id, skill) id = skill[:id] || skill["id"] || "skill_#{next_seq(user_id)}" data = stringify_for_json(skill).merge("id" => id, "user_id" => user_id) data["created_at"] ||= Time.now.iso8601(6) write_skill_file(skill_path(user_id, id), data) id end |
#search_skills(user_id, query) ⇒ Object
42 43 44 45 |
# File 'lib/llmemory/long_term/procedural/storages/file_storage.rb', line 42 def search_skills(user_id, query) return list_skills(user_id) if query.to_s.strip.empty? active_skills(user_id).select { |s| Llmemory::Tokenizer.matches?(skill_text(s), query) } end |