Class: Ask::RAG::VectorStore

Inherits:
Object
  • Object
show all
Defined in:
lib/ask/rag/vector_store/base.rb,
lib/ask/rag/vector_store/pgvector.rb,
lib/ask/rag/vector_store/in_memory.rb

Overview

Abstract base class for vector stores.

Vector stores store embedded documents and provide similarity search. Subclasses implement the storage and retrieval logic for specific backends (InMemory, PGVector, Chroma, etc.).

Examples:

store = Ask::RAG::VectorStore::InMemory.new
store.add(documents, model: "text-embedding-3-small")
results = store.similarity_search("query text", limit: 5)

Defined Under Namespace

Classes: InMemory, PGVector

Instance Method Summary collapse

Instance Method Details

#add(documents, model:, batch_size: 20) ⇒ Array<String>

Add documents to the store. They are embedded using the given model via ask-llm-providers or a custom embedding function.

Parameters:

  • documents (Array<Ask::Document>)

    documents to add

  • model (String)

    embedding model name (e.g. "text-embedding-3-small")

  • batch_size (Integer) (defaults to: 20)

    number of documents to embed per API call

Returns:

  • (Array<String>)

    IDs of the added documents

Raises:

  • (NotImplementedError)


27
28
29
# File 'lib/ask/rag/vector_store/base.rb', line 27

def add(documents, model:, batch_size: 20)
  raise NotImplementedError
end

#clearObject

Remove all documents from the store.

Raises:

  • (NotImplementedError)


62
63
64
# File 'lib/ask/rag/vector_store/base.rb', line 62

def clear
  raise NotImplementedError
end

#delete(ids) ⇒ Object

Remove documents by ID.

Parameters:

  • ids (Array<String>)

    document IDs to remove

Raises:

  • (NotImplementedError)


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

def delete(ids)
  raise NotImplementedError
end

#similarity_search(query, limit: 10, filter: nil, mmr: false, diversity_bonus: 0.3) ⇒ Array<Ask::Document>

Search for documents similar to the given query text.

Parameters:

  • query (String)

    the query text

  • limit (Integer) (defaults to: 10)

    maximum number of results

  • filter (Hash, nil) (defaults to: nil)

    metadata filter — only entries whose metadata matches all key/value pairs are considered

  • mmr (Boolean) (defaults to: false)

    apply Max Marginal Relevance for diversity

  • diversity_bonus (Float) (defaults to: 0.3)

    MMR diversity factor

Returns:

  • (Array<Ask::Document>)

    documents with :score in metadata

Raises:

  • (NotImplementedError)


40
41
42
# File 'lib/ask/rag/vector_store/base.rb', line 40

def similarity_search(query, limit: 10, filter: nil, mmr: false, diversity_bonus: 0.3)
  raise NotImplementedError
end

#similarity_search_by_vector(vector, limit: 10, filter: nil) ⇒ Array<Ask::Document>

Search by a raw vector instead of a text query. Useful when you've already embedded the query externally.

Parameters:

  • vector (Array<Float>)

    the query vector

  • limit (Integer) (defaults to: 10)

    maximum number of results

  • filter (Hash, nil) (defaults to: nil)

    metadata filter

Returns:

  • (Array<Ask::Document>)

    documents with :score in metadata

Raises:

  • (NotImplementedError)


51
52
53
# File 'lib/ask/rag/vector_store/base.rb', line 51

def similarity_search_by_vector(vector, limit: 10, filter: nil)
  raise NotImplementedError
end

#sizeInteger

Returns number of documents in the store.

Returns:

  • (Integer)

    number of documents in the store

Raises:

  • (NotImplementedError)


67
68
69
# File 'lib/ask/rag/vector_store/base.rb', line 67

def size
  raise NotImplementedError
end