Class: Phronomy::VectorStore::Base

Inherits:
Object
  • Object
show all
Includes:
AsyncBackend
Defined in:
lib/phronomy/vector_store/base.rb

Overview

Public extension SPI for vector stores.

Backends implement the synchronous add/search/remove/clear/size contract. Phronomy supplies async convenience methods through AsyncBackend; blocking backend work is offloaded through the framework-owned bounded OffloadPool.

Direct Known Subclasses

InMemory, Pgvector, RedisSearch

Instance Method Summary collapse

Methods included from AsyncBackend

#add_async, #clear_async, #remove_async, #search_async

Instance Method Details

#add(id:, embedding:, metadata: {}, cancellation_token: nil) ⇒ Object

Add a document with its vector embedding.

Parameters:

  • id (String)

    unique document identifier

  • embedding (Array<Float>)

    vector embedding

  • metadata (Hash) (defaults to: {})

    arbitrary metadata

  • cancellation_token (Phronomy::Concurrency::CancellationToken, nil) (defaults to: nil)

Raises:

  • (NotImplementedError)


22
23
24
25
# File 'lib/phronomy/vector_store/base.rb', line 22

def add(id:, embedding:, metadata: {}, cancellation_token: nil)
  cancellation_token&.raise_if_cancelled!
  raise NotImplementedError, "#{self.class}#add is not implemented"
end

#clearObject

Remove all documents.

Raises:

  • (NotImplementedError)


49
50
51
# File 'lib/phronomy/vector_store/base.rb', line 49

def clear
  raise NotImplementedError, "#{self.class}#clear is not implemented"
end

#remove(id:) ⇒ Object

Remove a single document by id.

Parameters:

  • id (String)

    document identifier

Raises:

  • (NotImplementedError)


43
44
45
# File 'lib/phronomy/vector_store/base.rb', line 43

def remove(id:)
  raise NotImplementedError, "#{self.class}#remove is not implemented"
end

#search(query_embedding:, k: 5, cancellation_token: nil) ⇒ Array<Hash>

Return the k most similar documents to the query embedding.

Parameters:

Returns:

  • (Array<Hash>)

    each element: { id:, score:, metadata: }

Raises:

  • (NotImplementedError)


34
35
36
37
# File 'lib/phronomy/vector_store/base.rb', line 34

def search(query_embedding:, k: 5, cancellation_token: nil)
  cancellation_token&.raise_if_cancelled!
  raise NotImplementedError, "#{self.class}#search is not implemented"
end

#sizeInteger

Return the number of documents stored.

Returns:

  • (Integer)

Raises:

  • (NotImplementedError)


57
58
59
# File 'lib/phronomy/vector_store/base.rb', line 57

def size
  raise NotImplementedError, "#{self.class}#size is not implemented"
end