Class: Engram::Adapters::InMemoryStore
- Inherits:
-
Object
- Object
- Engram::Adapters::InMemoryStore
- Includes:
- Ports::MemoryStore
- Defined in:
- lib/engram/adapters/in_memory_store.rb
Overview
In-process MemoryStore. Used as the zero-config default and in unit tests. Search is exact cosine similarity over the stored vectors.
Instance Method Summary collapse
- #add(record) ⇒ Object
- #all(scope:) ⇒ Object
- #clear ⇒ Object
- #delete(id:) ⇒ Object
-
#initialize ⇒ InMemoryStore
constructor
A new instance of InMemoryStore.
- #search(embedding:, scope:, limit:) ⇒ Object
- #touch(id:, at: Time.now) ⇒ Object
- #update(id:, record:) ⇒ Object
Constructor Details
#initialize ⇒ InMemoryStore
Returns a new instance of InMemoryStore.
10 11 12 13 |
# File 'lib/engram/adapters/in_memory_store.rb', line 10 def initialize @records = {} @sequence = 0 end |
Instance Method Details
#add(record) ⇒ Object
15 16 17 18 19 |
# File 'lib/engram/adapters/in_memory_store.rb', line 15 def add(record) record.id ||= (@sequence += 1) @records[record.id] = record record end |
#all(scope:) ⇒ Object
31 32 33 |
# File 'lib/engram/adapters/in_memory_store.rb', line 31 def all(scope:) @records.values.select { |r| r.scope == scope } end |
#clear ⇒ Object
52 53 54 55 |
# File 'lib/engram/adapters/in_memory_store.rb', line 52 def clear @records.clear @sequence = 0 end |
#delete(id:) ⇒ Object
42 43 44 |
# File 'lib/engram/adapters/in_memory_store.rb', line 42 def delete(id:) @records.delete(id) end |
#search(embedding:, scope:, limit:) ⇒ Object
21 22 23 24 25 26 27 28 29 |
# File 'lib/engram/adapters/in_memory_store.rb', line 21 def search(embedding:, scope:, limit:) @records .values .select { |r| r.scope == scope && r. } .map { |r| [r, Engram::Math.cosine_similarity(, r.)] } .sort_by { |(_, score)| -score } .first(limit) .map { |(record, _)| record } end |
#touch(id:, at: Time.now) ⇒ Object
46 47 48 49 50 |
# File 'lib/engram/adapters/in_memory_store.rb', line 46 def touch(id:, at: Time.now) record = @records[id] record.last_accessed_at = at if record record end |