Class: Phronomy::VectorStore::InMemory
- Defined in:
- lib/phronomy/vector_store/in_memory.rb
Overview
Pure-Ruby in-memory vector store using cosine similarity.
Intended for tests, short-lived agents, and Retrieval::Semantic scenarios where the message count is small enough that a linear scan is fast enough.
Instance Method Summary collapse
- #add(id:, embedding:, metadata: {}) ⇒ Object
- #clear ⇒ Object
-
#initialize ⇒ InMemory
constructor
A new instance of InMemory.
- #remove(id:) ⇒ Object
-
#search(query_embedding:, k: 5) ⇒ Array<Hash>
Sorted by descending score.
-
#size ⇒ Integer
Number of documents stored.
Constructor Details
#initialize ⇒ InMemory
Returns a new instance of InMemory.
15 16 17 18 |
# File 'lib/phronomy/vector_store/in_memory.rb', line 15 def initialize @documents = {} @mutex = Mutex.new end |
Instance Method Details
#add(id:, embedding:, metadata: {}) ⇒ Object
23 24 25 26 |
# File 'lib/phronomy/vector_store/in_memory.rb', line 23 def add(id:, embedding:, metadata: {}) @mutex.synchronize { @documents[id] = {embedding: , metadata: } } self end |
#clear ⇒ Object
45 46 47 48 |
# File 'lib/phronomy/vector_store/in_memory.rb', line 45 def clear @mutex.synchronize { @documents.clear } self end |
#remove(id:) ⇒ Object
40 41 42 43 |
# File 'lib/phronomy/vector_store/in_memory.rb', line 40 def remove(id:) @mutex.synchronize { @documents.delete(id) } self end |
#search(query_embedding:, k: 5) ⇒ Array<Hash>
Returns sorted by descending score.
31 32 33 34 35 36 37 38 |
# File 'lib/phronomy/vector_store/in_memory.rb', line 31 def search(query_embedding:, k: 5) snapshot = @mutex.synchronize { @documents.dup } results = snapshot.map do |id, doc| score = cosine_similarity(, doc[:embedding]) {id: id, score: score, metadata: doc[:metadata]} end results.sort_by { |r| -r[:score] }.first(k) end |
#size ⇒ Integer
Returns number of documents stored.
51 52 53 |
# File 'lib/phronomy/vector_store/in_memory.rb', line 51 def size @mutex.synchronize { @documents.size } end |