Vector Store Module

Vector storage adapters for semantic search and document retrieval

Vector Store Module

The Vector Store module provides concrete implementations of vector storage backends for semantic search and document retrieval.

Import

python
from praisonai.adapters import ChromaVectorStore
from praisonai.adapters.vector_stores import PineconeVectorStore

Quick Example

python
from praisonai.adapters import ChromaVectorStore

# Create ChromaDB vector store
store = ChromaVectorStore(
    namespace="my_documents",
    persist_directory=".praison/chroma"
)

# Add documents with embeddings
ids = store.add(
    texts=["Document 1", "Document 2"],
    embeddings=[[0.1, 0.2, ...], [0.3, 0.4, ...]],
    metadatas=[{"source": "file1.txt"}, {"source": "file2.txt"}]
)

# Query by similarity
results = store.query(embedding=[0.1, 0.2, ...], top_k=5)

Features

  • Multiple backend support (ChromaDB, Pinecone)
  • Namespace-based document organization
  • Persistent local storage with ChromaDB
  • Cloud vector database integration with Pinecone
  • Lazy loading of optional dependencies
  • Per-instance telemetry disabled via Settings(anonymized_telemetry=False)

Classes

ChromaVectorStore

ChromaDB vector store adapter with local persistence.

python
from praisonai.adapters import ChromaVectorStore

store = ChromaVectorStore(
    namespace="default",
    persist_directory=".praison/chroma"
)

Parameters:

ParameterTypeDefaultDescription
configdictNoneConfiguration options
namespacestr"default"Collection namespace
persist_directorystr".praison/chroma"Storage directory

PineconeVectorStore

Pinecone cloud vector store adapter.

python
from praisonai.adapters.vector_stores import PineconeVectorStore

store = PineconeVectorStore(
    api_key="your-api-key",
    index_name="praisonai",
    namespace="default"
)

Parameters:

ParameterTypeDefaultDescription
api_keystrPINECONE_API_KEY envPinecone API key
index_namestr"praisonai"Pinecone index name
namespacestr"default"Vector namespace

Methods

add(texts, embeddings, metadatas=None, ids=None, namespace=None)

Add vectors to the store.

Parameters:

  • texts (List[str]): Document texts
  • embeddings (List[List[float]]): Vector embeddings
  • metadatas (List[dict], optional): Metadata for each document
  • ids (List[str], optional): Custom IDs (auto-generated if not provided)
  • namespace (str, optional): Override default namespace

Returns: List[str] – IDs of added documents

query(embedding, top_k=10, namespace=None, filter=None)

Query vectors by similarity.

Parameters:

  • embedding (List[float]): Query vector
  • top_k (int): Number of results to return
  • namespace (str, optional): Override default namespace
  • filter (dict, optional): Metadata filter

Returns: List[VectorRecord] – Matching records with scores. For ChromaVectorStore (v4.6.162+), VectorRecord.embedding holds each record’s stored embedding, not the query vector.

delete(ids=None, namespace=None, filter=None, delete_all=False)

Delete vectors from the store.

Parameters:

  • ids (List[str], optional): Specific IDs to delete
  • namespace (str, optional): Override default namespace
  • filter (dict, optional): Delete by metadata filter
  • delete_all (bool): Delete all vectors in the namespace. For ChromaVectorStore (v4.6.162+) this is scoped to the caller’s namespace — pass an explicit namespace= to avoid touching default.

Returns: int – Number of deleted vectors

count(namespace=None)

Get count of vectors in the store.

Returns: int – Vector count

get(ids, namespace=None)

Get vectors by ID.

Parameters:

  • ids (List[str]): IDs to retrieve

Returns: List[VectorRecord] – Retrieved records

Example: Full Workflow

python
from praisonai.adapters import ChromaVectorStore

# Initialize store
store = ChromaVectorStore(namespace="knowledge_base")

# Add documents
texts = ["Python is a programming language", "Machine learning uses data"]
embeddings = get_embeddings(texts)  # Your embedding function

ids = store.add(
    texts=texts,
    embeddings=embeddings,
    metadatas=[{"topic": "programming"}, {"topic": "ml"}]
)

# Query
query_embedding = get_embeddings(["What is Python?"])[0]
results = store.query(embedding=query_embedding, top_k=3)

for r in results:
    print(f"Score: {r.score:.3f} - {r.text[:50]}...")

# Count
print(f"Total documents: {store.count()}")

# Delete
store.delete(ids=ids[:1])

Environment Variables

bash
# Pinecone
export PINECONE_API_KEY=your-api-key

CLI Usage

bash
# Use ChromaDB (default)
praisonai knowledge query "What is Python?" --vector-store chroma

# Use Pinecone
praisonai knowledge query "What is Python?" --vector-store pinecone

Related