Skip to main content

🏛️ Quaerium

Python 3.11+ License: MIT Tests Coverage Code style: black Documentation

Advanced RAG framework with multi-store support (vector + graph) and protocol-based architecture

"Quaerere" (Latin): to seek, to search, to inquire - The art of intelligent knowledge retrieval.


Features

Architecture

  • Protocol-based design — zero inheritance required, duck typing with type safety
  • Swap implementations without rewriting pipeline code
  • Clean layered architecture: core (protocols) → infra (implementations) → rag (orchestration)

Vector & Graph Stores

  • LLMs: Ollama, OpenAI
  • Embeddings: Ollama (nomic-embed-text), OpenAI (text-embedding-3-small/large)
  • Vector Stores: Milvus, Qdrant, ChromaDB
  • Graph Stores: Neo4j 5.x (async, APOC support)

Pipeline

  • Hybrid search: vector + keyword with configurable alpha blending
  • Query rewriting, LLM-based reranking, context assembly
  • Document parsers: PDF (PyMuPDF), DOCX, plain text; optional OCR via EasyOCR
  • Dynamic and token-based chunking with metadata preservation

Evaluation

  • Retrieval metrics: Precision@K, Recall@K, MRR, NDCG, Hit Rate
  • Generation metrics: LLM-as-judge for relevance, faithfulness, hallucination detection
  • End-to-end observability: latency, token usage, cost estimation
  • Dataset management: JSONL format

Installation

pip install quaerium
Extra Command
Ollama pip install quaerium[ollama]
OpenAI pip install quaerium[openai]
PDF / DOCX pip install quaerium[pdf,docx]
Milvus / Qdrant / Chroma pip install quaerium[milvus] (or qdrant, chroma)
Neo4j (graph RAG) pip install quaerium[neo4j]
Agents kernel pip install quaerium[agents]
Durable approvals + HTTP layer pip install quaerium[agents-postgres,server]
All pip install quaerium[all]

The core install depends on Pydantic only; every backend is an extra.


Quick Start

from quaerium import RagPipeline, get_ollama_embedding, get_ollama_llm
from quaerium.infra.vectorstore.milvus import MilvusVectorStore

embedding = get_ollama_embedding()(model="nomic-embed-text")
llm = get_ollama_llm()(model="llama3.2")
vectorstore = MilvusVectorStore(host="localhost", port=19530)

vectorstore.create_collection(name="my_docs", dimension=768, metric="IP")

texts = ["Document 1 content...", "Document 2 content..."]
vectors = [embedding.embed(text) for text in texts]
vectorstore.insert(
    collection_name="my_docs",
    vectors=vectors,
    texts=texts,
    metadata=[{"source": "doc1"}, {"source": "doc2"}]
)

pipeline = RagPipeline(
    vectorstore=vectorstore,
    embedding=embedding,
    llm=llm,
    collection_name="my_docs"
)

response = pipeline.run("What is mentioned in the documents?")
print(response.answer)
for citation in response.citations:
    print(f"- {citation.text[:100]}... (score: {citation.score:.2f})")

Advanced Usage

results = vectorstore.hybrid_search(
    collection_name="docs",
    query_vector=embedding.embed("installation guide"),
    query_text="installation guide",
    top_k=10,
    alpha=0.7  # 0=keyword only, 1=vector only
)

Evaluation & Metrics

from quaerium.infra.evaluation.pipeline import MetricsObserver
from quaerium.infra.evaluation.retrieval import StandardRetrievalEvaluator
from quaerium.infra.evaluation.generation import StandardGenerationEvaluator, OpenAIJudge

observer = MetricsObserver()
pipeline = RagPipeline(..., observers=[observer])
response = pipeline.run("What is RAG?")

result = observer.get_results()
print(f"Latency: {result.end_to_end_metrics.total_latency_ms:.0f}ms")
print(f"Cost: ${result.end_to_end_metrics.cost_usd:.4f}")

retrieval_eval = StandardRetrievalEvaluator(k_values=[5, 10])
retrieval_metrics = retrieval_eval.evaluate_retrieval(
    query="What is RAG?",
    retrieved_docs=retrieved_docs,
    relevant_doc_ids=["doc1", "doc3"]
)
print(f"Precision@5: {retrieval_metrics.precision_at_k[5]:.2%}")

judge = OpenAIJudge(llm=llm)
generation_eval = StandardGenerationEvaluator(judge)
generation_metrics = generation_eval.evaluate_answer(
    question="What is RAG?",
    generated_answer=response.answer,
    context=[c.text for c in response.citations]
)
print(f"Relevance: {generation_metrics.relevance_score:.2%}")
print(f"Faithfulness: {generation_metrics.faithfulness_score:.2%}")

Custom Vector Store

from quaerium.core import VectorStoreClient, SearchResult

class PineconeVectorStore:
    def create_collection(self, name: str, dimension: int, **kwargs): ...
    def insert(self, collection_name: str, vectors, texts, metadata, **kwargs): ...
    def search(self, collection_name: str, query_vector, top_k=10, **kwargs): ...

store: VectorStoreClient = PineconeVectorStore()

Documentation

Full documentation: gmottola00.github.io/quaerium


License

MIT License — see LICENSE for details.

Metadata

Release files for quaerium 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for quaerium 0.4.1
File Size Uploaded Provenance Actions
quaerium-0.4.1.tar.gz 136.8 kB Without provenance Details for quaerium-0.4.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for quaerium 0.4.1
File Interpreter ABI Platform Actions
quaerium-0.4.1-py3-none-any.whl Python 3 none any Details for quaerium-0.4.1-py3-none-any.whl

Total release size: 328.2 kB

Release files / quaerium-0.4.1.tar.gz

Download URL quaerium-0.4.1.tar.gz
Size 136.8 kB
Tags Source
SHA-256 checksum
How to use checksums
44f53ec578603ebafc3e0c9b46eaf755134d67447932301ee25617b1f865517f
BLAKE2b-256 checksum
How to use checksums
251122843c277cdb0529ff06bed46ba6090c6405e38492e1b4eeba83bcc321b9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / quaerium-0.4.1-py3-none-any.whl

Download URL quaerium-0.4.1-py3-none-any.whl
Size 191.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1d2919c6aeeeefd554d5f685fb614f438c31888ad3ae9a05e2e6117b27faf765
BLAKE2b-256 checksum
How to use checksums
f5610ed871e3e5286565674809b2686ed50b094d66564e10fcb7b865d997a3c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for quaerium 0.4.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page