llmemory 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +193 -0
- data/lib/generators/llmemory/install/install_generator.rb +24 -0
- data/lib/generators/llmemory/install/templates/create_llmemory_tables.rb +73 -0
- data/lib/llmemory/configuration.rb +51 -0
- data/lib/llmemory/extractors/entity_relation_extractor.rb +74 -0
- data/lib/llmemory/extractors/fact_extractor.rb +74 -0
- data/lib/llmemory/extractors.rb +9 -0
- data/lib/llmemory/llm/anthropic.rb +48 -0
- data/lib/llmemory/llm/base.rb +17 -0
- data/lib/llmemory/llm/openai.rb +46 -0
- data/lib/llmemory/llm.rb +18 -0
- data/lib/llmemory/long_term/file_based/category.rb +22 -0
- data/lib/llmemory/long_term/file_based/item.rb +31 -0
- data/lib/llmemory/long_term/file_based/memory.rb +83 -0
- data/lib/llmemory/long_term/file_based/resource.rb +22 -0
- data/lib/llmemory/long_term/file_based/retrieval.rb +90 -0
- data/lib/llmemory/long_term/file_based/storage.rb +35 -0
- data/lib/llmemory/long_term/file_based/storages/active_record_models.rb +26 -0
- data/lib/llmemory/long_term/file_based/storages/active_record_storage.rb +144 -0
- data/lib/llmemory/long_term/file_based/storages/base.rb +71 -0
- data/lib/llmemory/long_term/file_based/storages/database_storage.rb +231 -0
- data/lib/llmemory/long_term/file_based/storages/file_storage.rb +180 -0
- data/lib/llmemory/long_term/file_based/storages/memory_storage.rb +100 -0
- data/lib/llmemory/long_term/file_based.rb +15 -0
- data/lib/llmemory/long_term/graph_based/conflict_resolver.rb +33 -0
- data/lib/llmemory/long_term/graph_based/edge.rb +49 -0
- data/lib/llmemory/long_term/graph_based/knowledge_graph.rb +114 -0
- data/lib/llmemory/long_term/graph_based/memory.rb +143 -0
- data/lib/llmemory/long_term/graph_based/node.rb +42 -0
- data/lib/llmemory/long_term/graph_based/storage.rb +24 -0
- data/lib/llmemory/long_term/graph_based/storages/active_record_models.rb +23 -0
- data/lib/llmemory/long_term/graph_based/storages/active_record_storage.rb +132 -0
- data/lib/llmemory/long_term/graph_based/storages/base.rb +39 -0
- data/lib/llmemory/long_term/graph_based/storages/memory_storage.rb +106 -0
- data/lib/llmemory/long_term/graph_based.rb +15 -0
- data/lib/llmemory/long_term.rb +9 -0
- data/lib/llmemory/maintenance/consolidator.rb +55 -0
- data/lib/llmemory/maintenance/reindexer.rb +27 -0
- data/lib/llmemory/maintenance/runner.rb +34 -0
- data/lib/llmemory/maintenance/summarizer.rb +57 -0
- data/lib/llmemory/maintenance.rb +8 -0
- data/lib/llmemory/memory.rb +96 -0
- data/lib/llmemory/retrieval/context_assembler.rb +53 -0
- data/lib/llmemory/retrieval/engine.rb +74 -0
- data/lib/llmemory/retrieval/temporal_ranker.rb +23 -0
- data/lib/llmemory/retrieval.rb +10 -0
- data/lib/llmemory/short_term/checkpoint.rb +47 -0
- data/lib/llmemory/short_term/stores/active_record_checkpoint.rb +14 -0
- data/lib/llmemory/short_term/stores/active_record_store.rb +58 -0
- data/lib/llmemory/short_term/stores/base.rb +21 -0
- data/lib/llmemory/short_term/stores/memory_store.rb +37 -0
- data/lib/llmemory/short_term/stores/postgres_store.rb +80 -0
- data/lib/llmemory/short_term/stores/redis_store.rb +54 -0
- data/lib/llmemory/short_term.rb +8 -0
- data/lib/llmemory/vector_store/base.rb +19 -0
- data/lib/llmemory/vector_store/memory_store.rb +53 -0
- data/lib/llmemory/vector_store/openai_embeddings.rb +49 -0
- data/lib/llmemory/vector_store.rb +10 -0
- data/lib/llmemory/version.rb +5 -0
- data/lib/llmemory.rb +19 -0
- metadata +163 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module Llmemory
|
|
6
|
+
module ShortTerm
|
|
7
|
+
module Stores
|
|
8
|
+
class PostgresStore < Base
|
|
9
|
+
def initialize(database_url: nil)
|
|
10
|
+
@database_url = database_url || Llmemory.configuration.database_url
|
|
11
|
+
@connection = nil
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def save(user_id, session_id, state)
|
|
15
|
+
ensure_table!
|
|
16
|
+
conn.exec_params(
|
|
17
|
+
<<~SQL,
|
|
18
|
+
INSERT INTO llmemory_checkpoints (user_id, session_id, state, updated_at)
|
|
19
|
+
VALUES ($1, $2, $3, $4)
|
|
20
|
+
ON CONFLICT (user_id, session_id)
|
|
21
|
+
DO UPDATE SET state = $3, updated_at = $4
|
|
22
|
+
SQL
|
|
23
|
+
[user_id, session_id, serialize(state), Time.now.utc.iso8601]
|
|
24
|
+
)
|
|
25
|
+
true
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def load(user_id, session_id)
|
|
29
|
+
ensure_table!
|
|
30
|
+
result = conn.exec_params(
|
|
31
|
+
"SELECT state FROM llmemory_checkpoints WHERE user_id = $1 AND session_id = $2",
|
|
32
|
+
[user_id, session_id]
|
|
33
|
+
)
|
|
34
|
+
row = result.first
|
|
35
|
+
row ? deserialize(row["state"]) : nil
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def delete(user_id, session_id)
|
|
39
|
+
ensure_table!
|
|
40
|
+
conn.exec_params(
|
|
41
|
+
"DELETE FROM llmemory_checkpoints WHERE user_id = $1 AND session_id = $2",
|
|
42
|
+
[user_id, session_id]
|
|
43
|
+
)
|
|
44
|
+
true
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def conn
|
|
50
|
+
@connection ||= begin
|
|
51
|
+
require "pg"
|
|
52
|
+
PG.connect(@database_url)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def ensure_table!
|
|
57
|
+
conn.exec(<<~SQL)
|
|
58
|
+
CREATE TABLE IF NOT EXISTS llmemory_checkpoints (
|
|
59
|
+
user_id TEXT NOT NULL,
|
|
60
|
+
session_id TEXT NOT NULL,
|
|
61
|
+
state JSONB NOT NULL,
|
|
62
|
+
updated_at TIMESTAMPTZ NOT NULL,
|
|
63
|
+
PRIMARY KEY (user_id, session_id)
|
|
64
|
+
)
|
|
65
|
+
SQL
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def serialize(state)
|
|
69
|
+
require "json"
|
|
70
|
+
JSON.generate(state)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def deserialize(data)
|
|
74
|
+
require "json"
|
|
75
|
+
JSON.parse(data, symbolize_names: true)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module Llmemory
|
|
6
|
+
module ShortTerm
|
|
7
|
+
module Stores
|
|
8
|
+
class RedisStore < Base
|
|
9
|
+
def initialize(redis_url: nil)
|
|
10
|
+
@redis_url = redis_url || Llmemory.configuration.redis_url
|
|
11
|
+
@redis = nil
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def save(user_id, session_id, state)
|
|
15
|
+
redis.set(key_for(user_id, session_id), serialize(state), ex: 86400 * 7) # 7 days TTL
|
|
16
|
+
true
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def load(user_id, session_id)
|
|
20
|
+
data = redis.get(key_for(user_id, session_id))
|
|
21
|
+
data ? deserialize(data) : nil
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def delete(user_id, session_id)
|
|
25
|
+
redis.del(key_for(user_id, session_id))
|
|
26
|
+
true
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def redis
|
|
32
|
+
@redis ||= begin
|
|
33
|
+
require "redis"
|
|
34
|
+
Redis.new(url: @redis_url)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def key_for(user_id, session_id)
|
|
39
|
+
"llmemory:checkpoint:#{user_id}:#{session_id}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def serialize(state)
|
|
43
|
+
require "json"
|
|
44
|
+
JSON.generate(state)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def deserialize(data)
|
|
48
|
+
require "json"
|
|
49
|
+
JSON.parse(data, symbolize_names: true)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Llmemory
|
|
4
|
+
module VectorStore
|
|
5
|
+
class Base
|
|
6
|
+
def embed(text)
|
|
7
|
+
raise NotImplementedError, "#{self.class}#embed must be implemented"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def store(id:, embedding:, metadata: {})
|
|
11
|
+
raise NotImplementedError, "#{self.class}#store must be implemented"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def search(query_embedding, top_k: 10)
|
|
15
|
+
raise NotImplementedError, "#{self.class}#search must be implemented"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module Llmemory
|
|
6
|
+
module VectorStore
|
|
7
|
+
class MemoryStore < Base
|
|
8
|
+
def initialize(embedding_provider: nil)
|
|
9
|
+
@entries = {}
|
|
10
|
+
@embedding_provider = embedding_provider
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def embed(text)
|
|
14
|
+
return Array.new(1536, 0.0) unless @embedding_provider&.respond_to?(:embed)
|
|
15
|
+
@embedding_provider.embed(text)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def store(id:, embedding:, metadata: {}, user_id: nil)
|
|
19
|
+
key = user_id ? "#{user_id}:#{id}" : id.to_s
|
|
20
|
+
@entries[key] = { embedding: embedding.to_a.map(&:to_f), metadata: (metadata || {}).merge("user_id" => user_id) }
|
|
21
|
+
id
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def search(query_embedding, top_k: 10, user_id: nil)
|
|
25
|
+
query = query_embedding.to_a.map(&:to_f)
|
|
26
|
+
return [] if query.empty?
|
|
27
|
+
entries = user_id ? @entries.select { |k, _| k.to_s.start_with?("#{user_id}:") } : @entries
|
|
28
|
+
scores = entries.map do |id, data|
|
|
29
|
+
sim = cosine_similarity(query, data[:embedding])
|
|
30
|
+
{ id: id, score: sim, metadata: data[:metadata] }
|
|
31
|
+
end
|
|
32
|
+
scores.sort_by { |s| -s[:score] }.first(top_k)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def search_by_text(query_text, top_k: 10, user_id: nil)
|
|
36
|
+
return [] unless @embedding_provider&.respond_to?(:embed)
|
|
37
|
+
query_embedding = @embedding_provider.embed(query_text)
|
|
38
|
+
search(query_embedding, top_k: top_k, user_id: user_id)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def cosine_similarity(a, b)
|
|
44
|
+
return 0.0 if a.size != b.size || a.empty?
|
|
45
|
+
dot = a.zip(b).sum { |x, y| x * y }
|
|
46
|
+
norm_a = Math.sqrt(a.sum { |x| x * x })
|
|
47
|
+
norm_b = Math.sqrt(b.sum { |x| x * x })
|
|
48
|
+
return 0.0 if norm_a.zero? || norm_b.zero?
|
|
49
|
+
dot / (norm_a * norm_b)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "faraday"
|
|
4
|
+
require "json"
|
|
5
|
+
require_relative "base"
|
|
6
|
+
|
|
7
|
+
module Llmemory
|
|
8
|
+
module VectorStore
|
|
9
|
+
class OpenAIEmbeddings < Base
|
|
10
|
+
DEFAULT_MODEL = "text-embedding-3-small"
|
|
11
|
+
DEFAULT_DIMS = 1536
|
|
12
|
+
|
|
13
|
+
def initialize(api_key: nil, model: nil)
|
|
14
|
+
@api_key = api_key || Llmemory.configuration.llm_api_key
|
|
15
|
+
@model = model || DEFAULT_MODEL
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def embed(text)
|
|
19
|
+
return Array.new(DEFAULT_DIMS, 0.0) if text.to_s.strip.empty?
|
|
20
|
+
response = connection.post("/embeddings") do |req|
|
|
21
|
+
req.headers["Authorization"] = "Bearer #{@api_key}"
|
|
22
|
+
req.headers["Content-Type"] = "application/json"
|
|
23
|
+
req.body = { input: text.to_s.strip, model: @model }.to_json
|
|
24
|
+
end
|
|
25
|
+
raise Llmemory::LLMError, "OpenAI Embeddings API error: #{response.body}" unless response.success?
|
|
26
|
+
body = response.body.is_a?(Hash) ? response.body : JSON.parse(response.body.to_s)
|
|
27
|
+
body.dig("data", 0, "embedding")&.map(&:to_f) || Array.new(DEFAULT_DIMS, 0.0)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def store(id:, embedding:, metadata: {})
|
|
31
|
+
raise NotImplementedError, "OpenAIEmbeddings does not store; use a VectorStore backend (e.g. MemoryStore)"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def search(query_embedding, top_k: 10)
|
|
35
|
+
raise NotImplementedError, "OpenAIEmbeddings does not search; use a VectorStore backend"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def connection
|
|
41
|
+
@connection ||= Faraday.new(url: "https://api.openai.com/v1") do |f|
|
|
42
|
+
f.request :json
|
|
43
|
+
f.response :json
|
|
44
|
+
f.adapter Faraday.default_adapter
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
data/lib/llmemory.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "llmemory/version"
|
|
4
|
+
require_relative "llmemory/configuration"
|
|
5
|
+
require_relative "llmemory/llm"
|
|
6
|
+
require_relative "llmemory/short_term"
|
|
7
|
+
require_relative "llmemory/long_term"
|
|
8
|
+
require_relative "llmemory/retrieval"
|
|
9
|
+
require_relative "llmemory/vector_store"
|
|
10
|
+
require_relative "llmemory/maintenance"
|
|
11
|
+
require_relative "llmemory/extractors"
|
|
12
|
+
require_relative "llmemory/memory"
|
|
13
|
+
|
|
14
|
+
module Llmemory
|
|
15
|
+
class Error < StandardError; end
|
|
16
|
+
class ConfigurationError < Error; end
|
|
17
|
+
class StoreError < Error; end
|
|
18
|
+
class LLMError < Error; end
|
|
19
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: llmemory
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- llmemory
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-02-02 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: faraday
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '2.0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '2.0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rspec
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '3.12'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '3.12'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: vcr
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '6.2'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '6.2'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: webmock
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '3.18'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '3.18'
|
|
69
|
+
description: 'Memory infrastructure for agents: short-term checkpointing, long-term
|
|
70
|
+
file-based and graph-based memory, retrieval with time decay, and maintenance jobs.'
|
|
71
|
+
email:
|
|
72
|
+
- ''
|
|
73
|
+
executables: []
|
|
74
|
+
extensions: []
|
|
75
|
+
extra_rdoc_files: []
|
|
76
|
+
files:
|
|
77
|
+
- LICENSE.txt
|
|
78
|
+
- README.md
|
|
79
|
+
- lib/generators/llmemory/install/install_generator.rb
|
|
80
|
+
- lib/generators/llmemory/install/templates/create_llmemory_tables.rb
|
|
81
|
+
- lib/llmemory.rb
|
|
82
|
+
- lib/llmemory/configuration.rb
|
|
83
|
+
- lib/llmemory/extractors.rb
|
|
84
|
+
- lib/llmemory/extractors/entity_relation_extractor.rb
|
|
85
|
+
- lib/llmemory/extractors/fact_extractor.rb
|
|
86
|
+
- lib/llmemory/llm.rb
|
|
87
|
+
- lib/llmemory/llm/anthropic.rb
|
|
88
|
+
- lib/llmemory/llm/base.rb
|
|
89
|
+
- lib/llmemory/llm/openai.rb
|
|
90
|
+
- lib/llmemory/long_term.rb
|
|
91
|
+
- lib/llmemory/long_term/file_based.rb
|
|
92
|
+
- lib/llmemory/long_term/file_based/category.rb
|
|
93
|
+
- lib/llmemory/long_term/file_based/item.rb
|
|
94
|
+
- lib/llmemory/long_term/file_based/memory.rb
|
|
95
|
+
- lib/llmemory/long_term/file_based/resource.rb
|
|
96
|
+
- lib/llmemory/long_term/file_based/retrieval.rb
|
|
97
|
+
- lib/llmemory/long_term/file_based/storage.rb
|
|
98
|
+
- lib/llmemory/long_term/file_based/storages/active_record_models.rb
|
|
99
|
+
- lib/llmemory/long_term/file_based/storages/active_record_storage.rb
|
|
100
|
+
- lib/llmemory/long_term/file_based/storages/base.rb
|
|
101
|
+
- lib/llmemory/long_term/file_based/storages/database_storage.rb
|
|
102
|
+
- lib/llmemory/long_term/file_based/storages/file_storage.rb
|
|
103
|
+
- lib/llmemory/long_term/file_based/storages/memory_storage.rb
|
|
104
|
+
- lib/llmemory/long_term/graph_based.rb
|
|
105
|
+
- lib/llmemory/long_term/graph_based/conflict_resolver.rb
|
|
106
|
+
- lib/llmemory/long_term/graph_based/edge.rb
|
|
107
|
+
- lib/llmemory/long_term/graph_based/knowledge_graph.rb
|
|
108
|
+
- lib/llmemory/long_term/graph_based/memory.rb
|
|
109
|
+
- lib/llmemory/long_term/graph_based/node.rb
|
|
110
|
+
- lib/llmemory/long_term/graph_based/storage.rb
|
|
111
|
+
- lib/llmemory/long_term/graph_based/storages/active_record_models.rb
|
|
112
|
+
- lib/llmemory/long_term/graph_based/storages/active_record_storage.rb
|
|
113
|
+
- lib/llmemory/long_term/graph_based/storages/base.rb
|
|
114
|
+
- lib/llmemory/long_term/graph_based/storages/memory_storage.rb
|
|
115
|
+
- lib/llmemory/maintenance.rb
|
|
116
|
+
- lib/llmemory/maintenance/consolidator.rb
|
|
117
|
+
- lib/llmemory/maintenance/reindexer.rb
|
|
118
|
+
- lib/llmemory/maintenance/runner.rb
|
|
119
|
+
- lib/llmemory/maintenance/summarizer.rb
|
|
120
|
+
- lib/llmemory/memory.rb
|
|
121
|
+
- lib/llmemory/retrieval.rb
|
|
122
|
+
- lib/llmemory/retrieval/context_assembler.rb
|
|
123
|
+
- lib/llmemory/retrieval/engine.rb
|
|
124
|
+
- lib/llmemory/retrieval/temporal_ranker.rb
|
|
125
|
+
- lib/llmemory/short_term.rb
|
|
126
|
+
- lib/llmemory/short_term/checkpoint.rb
|
|
127
|
+
- lib/llmemory/short_term/stores/active_record_checkpoint.rb
|
|
128
|
+
- lib/llmemory/short_term/stores/active_record_store.rb
|
|
129
|
+
- lib/llmemory/short_term/stores/base.rb
|
|
130
|
+
- lib/llmemory/short_term/stores/memory_store.rb
|
|
131
|
+
- lib/llmemory/short_term/stores/postgres_store.rb
|
|
132
|
+
- lib/llmemory/short_term/stores/redis_store.rb
|
|
133
|
+
- lib/llmemory/vector_store.rb
|
|
134
|
+
- lib/llmemory/vector_store/base.rb
|
|
135
|
+
- lib/llmemory/vector_store/memory_store.rb
|
|
136
|
+
- lib/llmemory/vector_store/openai_embeddings.rb
|
|
137
|
+
- lib/llmemory/version.rb
|
|
138
|
+
homepage: https://github.com/entaina/llmemory
|
|
139
|
+
licenses:
|
|
140
|
+
- MIT
|
|
141
|
+
metadata:
|
|
142
|
+
homepage_uri: https://github.com/entaina/llmemory
|
|
143
|
+
source_code_uri: https://github.com/entaina/llmemory
|
|
144
|
+
post_install_message:
|
|
145
|
+
rdoc_options: []
|
|
146
|
+
require_paths:
|
|
147
|
+
- lib
|
|
148
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - ">="
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: 3.0.0
|
|
153
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
|
+
requirements:
|
|
155
|
+
- - ">="
|
|
156
|
+
- !ruby/object:Gem::Version
|
|
157
|
+
version: '0'
|
|
158
|
+
requirements: []
|
|
159
|
+
rubygems_version: 3.4.10
|
|
160
|
+
signing_key:
|
|
161
|
+
specification_version: 4
|
|
162
|
+
summary: Persistent memory system for LLM agents
|
|
163
|
+
test_files: []
|