A tool for evaluating RAG pipelines
Project description
RAGulate
A tool for evaluating RAG pipelines
The Metrics
The RAGulate currently reports 4 relevancy metrics: Answer Correctness, Answer Relevance, Context Relevance, and Groundedness.
- Answer Correctness
- How well does the generated answer match the ground-truth answer?
- This confirms how well the full system performed.
- Answer Relevance
- Is the generated answer relevant to the query?
- This shows if the LLM is responding in a way that is helpful to answer the query.
- Context Relevance:
- Does the retrieved context contain information to answer the query?
- This shows how well the retrieval part of the process is performing.
- Groundedness:
- Is the generated response supported by the context?
- Low scores here indicate that the LLM is hallucinating.
Example Output
The tool outputs results as images like this:
These images show distribution box plots of the metrics for different test runs.
Installation
pip install ragulate
Initial Setup
-
Set your environment variables or create a
.env
file. You will need to setOPENAI_API_KEY
and any other environment variables needed by your ingest and query pipelines. -
Wrap your ingest pipeline in a single python method. The method should take a
file_path
parameter and any other variables that you will pass during your experimentation. The method should ingest the passed file into your vector store.See the
ingest()
method in open_ai_chunk_size_and_k.py as an example. This method configures an ingest pipeline using the parameterchunk_size
and ingests the file passed. -
Wrap your query pipeline in a single python method, and return it. The method should have parameters for any variables that you will pass during your experimentation. Currently only LangChain LCEL query pipelines are supported.
See the
query()
method in open_ai_chunk_size_and_k.py as an example. This method returns a LangChain LCEL pipeline configured by the parameterschunk_size
andk
.
Note: It is helpful to have a **kwargs
param in your pipeline method definitions, so that if extra params
are passed, they can be safely ignored.
Usage
Summary
usage: ragulate [-h] {download,ingest,query,compare,run,debug} ...
RAGu-late CLI tool.
options:
-h, --help show this help message and exit
commands:
{download,ingest,query,compare,run,debug}
download Download a dataset
ingest Run an ingest pipeline
query Run a query pipeline
compare Compare results from 2 (or more) recipes
debug Show the tru-lens dashboard to debug a recipe.
Query
usage: ragulate query [-h] [-n NAME] -s SCRIPT -m METHOD [--var-name VAR_NAME] [--var-value VAR_VALUE] [--dataset DATASET] [--subset SUBSET]
[--sample SAMPLE] [--seed SEED] [--restart] [--provider {OpenAI,AzureOpenAI,HuggingFace}] [--model MODEL]
options:
-h, --help show this help message and exit
-n NAME, --name NAME A unique name for the query pipeline
-s SCRIPT, --script SCRIPT
The path to the python script that contains the query method
-m METHOD, --method METHOD
The name of the method in the script to run query
--var-name VAR_NAME The name of a variable in the query script. This should be paired with a `--var-value` argument and can be passed
multiple times.
--var-value VAR_VALUE
The value of a variable in the query script. This should be paired with a `--var-name` argument and can be passed
multiple times.
--dataset DATASET The name of a dataset to query. This can be passed multiple times.
--subset SUBSET The subset of the dataset to query. Only valid when a single dataset is passed.
--sample SAMPLE A decimal percentage of the queries to sample for the test. Default is 1.0.
--seed SEED Random seed to use for query sampling. Ensures reproducibility of tests.
--restart Flag to restart the query process instead of resuming. WARNING: this will delete all existing data for this query name,
not just the data for the tagged datasets.
--provider {OpenAI,AzureOpenAI,HuggingFace}
The name of the LLM Provider to use for Evaluation.
--model MODEL The name or id of the LLM model or deployment to use for Evaluation. Generally used in combination with the '--provider'
param.
Example
For the examples below, we will use the example experiment open_ai_chunk_size_and_k.py
and see how the RAG metrics change for changes in chunk_size
and k
(number of documents retrieved).
- Download a dataset. See available datasets here: https://llamahub.ai/?tab=llama_datasets
-
If you are unsure where to start, recommended datasets are:
BraintrustCodaHelpDesk
BlockchainSolana
Examples:
ragulate download -k llama BraintrustCodaHelpDesk
ragulate download -k llama BlockchainSolana
-
Ingest the datasets using different methods:
Examples:
- Ingest with
chunk_size=200
:ragulate ingest -n chunk_size_200 -s open_ai_chunk_size_and_k.py -m ingest \ --var-name chunk_size --var-value 200 --dataset BraintrustCodaHelpDesk --dataset BlockchainSolana
- Ingest with
chunk_size=100
:ragulate ingest -n chunk_size_100 -s open_ai_chunk_size_and_k.py -m ingest \ --var-name chunk_size --var-value 100 --dataset BraintrustCodaHelpDesk --dataset BlockchainSolana
Alternatively, do your ingestion manually without Ragulate.
- Ingest with
-
Run query and evaluations on the datasets using methods:
Examples:
-
Query with
chunk_size=200
andk=2
ragulate query -n chunk_size_200_k_2 -s open_ai_chunk_size_and_k.py -m query_pipeline \ --var-name chunk_size --var-value 200 --var-name k --var-value 2 --dataset BraintrustCodaHelpDesk --dataset BlockchainSolana
-
Query with
chunk_size=100
andk=2
ragulate query -n chunk_size_100_k_2 -s open_ai_chunk_size_and_k.py -m query_pipeline \ --var-name chunk_size --var-value 100 --var-name k --var-value 2 --dataset BraintrustCodaHelpDesk --dataset BlockchainSolana
-
Query with
chunk_size=200
andk=5
ragulate query -n chunk_size_200_k_5 -s open_ai_chunk_size_and_k.py -m query_pipeline \ --var-name chunk_size --var-value 200 --var-name k --var-value 5 --dataset BraintrustCodaHelpDesk --dataset BlockchainSolana
-
Query with
chunk_size=100
andk=5
ragulate query -n chunk_size_100_k_5 -s open_ai_chunk_size_and_k.py -m query_pipeline \ --var-name chunk_size --var-value 100 --var-name k --var-value 5 --dataset BraintrustCodaHelpDesk --dataset BlockchainSolana
-
-
Use the UI to explore your experiments
ragulate-ui
- Select your dataset
- Choose which recipes to compare
- Optionally filter the datasets with 'Filter'
- View charts with 'Chart'
- Compare responses side-by-side with 'Compare'
Current Limitations
- Only LangChain query pipelines are supported
- There is no way to specify which metrics to evaluate.
Development
Note that this project uses uv for package management. Install it with make install-uv
.
Deprecated
Running via Config File
-
Create a yaml config file with a similar format to the example config: example_config.yaml. This defines the same test as shown manually below.
-
Execute it with a single command:
ragulate run example_config.yaml
This will:
- Download the test datasets
- Run the ingest pipelines
- Run the query pipelines
- Output an analysis of the results.
Performing comparisons via the CLI:
Example:
ragulate compare -r chunk_size_100_k_2 -r chunk_size_200_k_2 -r chunk_size_100_k_5 -r chunk_size_200_k_5
This will output 2 png files. one for each dataset.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file ragulate-0.0.14.tar.gz
.
File metadata
- Download URL: ragulate-0.0.14.tar.gz
- Upload date:
- Size: 461.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 21dffff5aa3db7ce44736f722900f59cb92e7c0588fad1a69d62ece42e971aa9 |
|
MD5 | 8749e054812e20bcdfe25c72d67827c8 |
|
BLAKE2b-256 | f6059ffc2894f9eba083ef0733a30f031e90dc7ed0d00c1180876ff9671b9631 |
File details
Details for the file ragulate-0.0.14-py3-none-any.whl
.
File metadata
- Download URL: ragulate-0.0.14-py3-none-any.whl
- Upload date:
- Size: 53.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6f75e32e908cf9de244a2f006a544a689f2c6d91f405473d4d05301e91f1d77e |
|
MD5 | 8301ce83c6caa0ff9f3298de6ae419ba |
|
BLAKE2b-256 | 6b637f1e223055cc591871ff490596abca8f1e252850ebcd8fa4f3cac211bbdc |