Skip to main content

A modular framework for evaluating and optimizing RAG pipelines.

Project description

Ragmint

Python License Tests Optuna Status

Ragmint (Retrieval-Augmented Generation Model Inspection & Tuning) is a modular, developer-friendly Python library for evaluating, optimizing, and tuning RAG (Retrieval-Augmented Generation) pipelines.

It provides a complete toolkit for retriever selection, embedding model tuning, and automated RAG evaluation with support for Optuna-based Bayesian optimization, Auto-RAG tuning, and explainability through Gemini or Claude.


✨ Features

  • Automated hyperparameter optimization (Grid, Random, Bayesian via Optuna)
  • 🤖 Auto-RAG Tuner — dynamically recommends retriever–embedding pairs based on corpus size
  • 🧠 Explainability Layer — interprets RAG performance via Gemini or Claude APIs
  • 🏆 Leaderboard Tracking — stores and ranks experiment runs via JSON or external DB
  • 🔍 Built-in RAG evaluation metrics — faithfulness, recall, BLEU, ROUGE, latency
  • ⚙️ Retrievers — FAISS, Chroma, ElasticSearch
  • 🧩 Embeddings — OpenAI, HuggingFace
  • 💾 Caching, experiment tracking, and reproducibility out of the box
  • 🧰 Clean modular structure for easy integration in research and production setups

🚀 Quick Start

1️⃣ Installation

git clone https://github.com/andyolivers/ragmint.git
cd ragmint
pip install -e .

The -e flag installs Ragmint in editable (development) mode.
Requires Python ≥ 3.9.


2️⃣ Run a RAG Optimization Experiment

python ragmint/main.py --config configs/default.yaml --search bayesian

Example configs/default.yaml:

retriever: faiss
embedding_model: text-embedding-3-small
reranker:
  mode: mmr
  lambda_param: 0.5
optimization:
  search_method: bayesian
  n_trials: 20

3️⃣ Manual Pipeline Usage

from ragmint.core.pipeline import RAGPipeline

pipeline = RAGPipeline({
    "embedding_model": "text-embedding-3-small",
    "retriever": "faiss",
})

result = pipeline.run("What is retrieval-augmented generation?")
print(result)

🧪 Dataset Options

Ragmint can automatically load evaluation datasets for your RAG pipeline:

Mode Example Description
🧱 Default validation_set=None Uses built-in experiments/validation_qa.json
📁 Custom File validation_set="data/my_eval.json" Load your own QA dataset (JSON or CSV)
🌐 Hugging Face Dataset validation_set="squad" Automatically downloads benchmark datasets (requires pip install datasets)

Example

from ragmint.tuner import RAGMint

ragmint = RAGMint(
    docs_path="data/docs/",
    retrievers=["faiss", "chroma"],
    embeddings=["text-embedding-3-small"],
    rerankers=["mmr"],
)

# Use built-in default
ragmint.optimize(validation_set=None)

# Use Hugging Face benchmark
ragmint.optimize(validation_set="squad")

# Use your own dataset
ragmint.optimize(validation_set="data/custom_qa.json")

🧠 Auto-RAG Tuner

The AutoRAGTuner automatically recommends retriever–embedding combinations based on corpus size and average document length.

from ragmint.autotuner import AutoRAGTuner

corpus_stats = {"size": 5000, "avg_len": 250}
tuner = AutoRAGTuner(corpus_stats)
recommendation = tuner.recommend()
print(recommendation)
# Example output: {"retriever": "Chroma", "embedding_model": "SentenceTransformers"}

🏆 Leaderboard Tracking

Track and visualize your best experiments across runs.

from ragmint.leaderboard import Leaderboard

lb = Leaderboard("experiments/leaderboard.json")
lb.add_entry({"trial": 1, "faithfulness": 0.87, "latency": 0.12})
lb.show_top(3)

🧠 Explainability with Gemini / Claude

Compare two RAG configurations and receive natural language insights on why one performs better.

from ragmint.explainer import explain_results

config_a = {"retriever": "FAISS", "embedding_model": "OpenAI"}
config_b = {"retriever": "Chroma", "embedding_model": "SentenceTransformers"}

explanation = explain_results(config_a, config_b, model="gemini")
print(explanation)

Set your API keys in a .env file or via environment variables:

export GOOGLE_API_KEY="your_gemini_key"
export ANTHROPIC_API_KEY="your_claude_key"

🧩 Folder Structure

ragmint/
├── core/
│   ├── pipeline.py
│   ├── retriever.py
│   ├── reranker.py
│   ├── embedding.py
│   └── evaluation.py
├── autotuner.py
├── explainer.py
├── leaderboard.py
├── tuner.py
├── utils/
├── configs/
├── experiments/
├── tests/
└── main.py

🧪 Running Tests

pytest -v

To include integration tests with Gemini or Claude APIs:

pytest -m integration

⚙️ Configuration via pyproject.toml

Your pyproject.toml includes all required dependencies:

[project]
name = "ragmint"
version = "0.1.0"
dependencies = [
    "numpy",
    "optuna",
    "scikit-learn",
    "faiss-cpu",
    "chromadb",
    "pytest",
    "openai",
    "tqdm",
    "google-generativeai",
    "google-genai",
]

📊 Example Experiment Workflow

  1. Define your retriever, embedding, and reranker setup
  2. Launch optimization (Grid, Random, Bayesian) or AutoTune
  3. Compare performance with explainability
  4. Persist results to leaderboard for later inspection

🧬 Architecture Overview

flowchart TD
    A[Query] --> B[Embedder]
    B --> C[Retriever]
    C --> D[Reranker]
    D --> E[Generator]
    E --> F[Evaluation]
    F --> G[Optuna / AutoRAGTuner]
    G -->|Best Params| B

📘 Example Output

[INFO] Starting Bayesian optimization with Optuna
[INFO] Trial 7 finished: faithfulness=0.83, latency=0.42s
[INFO] Best parameters: {'lambda_param': 0.6, 'retriever': 'faiss'}
[INFO] AutoRAGTuner: Suggested retriever=Chroma for medium corpus

🧠 Why Ragmint?

  • Built for RAG researchers, AI engineers, and LLM ops
  • Works with LangChain, LlamaIndex, or standalone setups
  • Designed for extensibility — plug in your own retrievers, models, or metrics
  • Integrated explainability and leaderboard modules for research and production

⚖️ License

Licensed under the Apache License 2.0 — free for personal, research, and commercial use.


👤 Author

André Oliveira
andyolivers.com
Data Scientist | AI Engineer

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ragmint-0.2.3.tar.gz (20.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ragmint-0.2.3-py3-none-any.whl (28.3 kB view details)

Uploaded Python 3

File details

Details for the file ragmint-0.2.3.tar.gz.

File metadata

  • Download URL: ragmint-0.2.3.tar.gz
  • Upload date:
  • Size: 20.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.18

File hashes

Hashes for ragmint-0.2.3.tar.gz
Algorithm Hash digest
SHA256 7c31636551d161c95662d7c9f85be6eb39f5f151877b483a99872ee20fb86f6e
MD5 3c2dde57b7310cbc6f92a2862a99956f
BLAKE2b-256 ef351c3f64ee0eff1b674e791107102457115a6ab38524061aa4bdd59adc8457

See more details on using hashes here.

File details

Details for the file ragmint-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: ragmint-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 28.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.18

File hashes

Hashes for ragmint-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9141028da3ef9d16b83d1b7b5bca836cf8b423ad550ab094147de6fb86cc11d8
MD5 c1f9b1251c98829b1c6347f768954c18
BLAKE2b-256 9b1793f7bfd4c6b77cadb1e5a608b8c7d2da7005334cf1b28d2f26dc0130cf39

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page