Class: Maglev::VectorStores::Memory

Inherits:
Base
  • Object
show all
Defined in:
lib/maglev/vector_stores/memory.rb

Instance Method Summary collapse

Constructor Details

#initializeMemory

Returns a new instance of Memory.



9
10
11
# File 'lib/maglev/vector_stores/memory.rb', line 9

def initialize
  @documents = {}
end

Instance Method Details

#capabilitiesObject



39
40
41
# File 'lib/maglev/vector_stores/memory.rb', line 39

def capabilities
  {metadata_filtering: true, in_memory: true}
end

#delete(ids:) ⇒ Object



25
26
27
# File 'lib/maglev/vector_stores/memory.rb', line 25

def delete(ids:)
  ids.each { |id| @documents.delete(id) }
end

#delete_by_owner(owner_type:, owner_id:) ⇒ Object



29
30
31
32
33
# File 'lib/maglev/vector_stores/memory.rb', line 29

def delete_by_owner(owner_type:, owner_id:)
  @documents.delete_if do |_id, document|
    document.owner_type == owner_type && document.owner_id == owner_id
  end
end

#healthcheckObject



35
36
37
# File 'lib/maglev/vector_stores/memory.rb', line 35

def healthcheck
  :ok
end

#search(vector:, filters:, limit:) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/maglev/vector_stores/memory.rb', line 17

def search(vector:, filters:, limit:)
  @documents.values
    .select { |document| matches_filters?(document, filters) }
    .map { |document| with_distance(document, cosine_distance(vector, document.embedding)) }
    .sort_by(&:distance)
    .first(limit)
end

#upsert(documents:) ⇒ Object



13
14
15
# File 'lib/maglev/vector_stores/memory.rb', line 13

def upsert(documents:)
  documents.each { |document| @documents[document.id] = document }
end