Skip to main content

PyTerrier RAG pipelines

Project description

PyTerrier RAG

PyTerrier-RAG is an extension for PyTerrier that makes it easier to produce retrieval augmented generation pipelines. PyTerrier-RAG supports:

  1. Easy access to common QA datasets
  2. Pre-built indices for common corpora
  3. Popular reader models, such as Fusion-in-Decoder, LLama
  4. Evaluation measures

As well as access to all of the retrievers (sparse, learned sparse and dense) and rerankers (from MonoT5 to RankGPT) accessible through the wider PyTerrier ecosystem.

Installation is as easy as pip install pyterrier-rag.

Example Notebooks

Try it out here on Google Colab now by clicking the "Open in Colab" button!

RAG Readers

  • Fusion in Decoder: pyterrier_rag.readers.T5FiD, pyterrier_rag.readers.BARTFiD
  • OpenAI: pyterrier_rag.readers.OpenAIReader
  • VLLM: pyterrier_rag.readers.VLLMReader

RAG pipelines can be formulated as easily as:

bm25 = pt.terrier.Retriever()
fid = pyterrier_rag.readers.T5FiD()
bm25_rag = bm25 % 10 >> fid 
monoT5_rag = bm25 % 10 >> MonoT5() >> fid 
monoT5_rag.search("What are chemical reactions?")

Try it out now with the example notebook: sparse_retrieval_FiD_FlanT5.ipynb Open In Colab.

Agentic RAG

These frameworks use search as a tool - the reasoning model decides when to search, and then integrates the retrieved results into the input for the next invocation of the model:

bm25 = pt.Artifact.from_hf('pyterrier/ragwiki-terrier').bm25(include_fields=['docno', 'text', 'title'])
monoT5 = pyterrier_t5.MonoT5()
r1_monoT5 = pyterrier_rag.SearchR1(bm25 % 20 >> monoT5)
r1_monoT5.search("What are chemical reactions?")

o1_monoT5 = pyterrier_rag.SearchO1(
    pyterrier_rag.readers.CausalLMReader("deepseek-ai/DeepSeek-R1-Distill-Qwen-14B"), 
    bm25 % 20 >> monoT5)
o1_monoT5.search("What are chemical reactions?")

Try these frameworks out now with our example notebooks:

Datasets

Queries and gold answers of common datasets can be accessed through the PyTerrier datasets API: pt.get_dataset("rag:nq").get_topics() and pt.get_dataset("rag:nq").get_answers(). The following QA datasets are available:

  • Natural Questions: "rag:nq"
  • HotpotQA: "rag:hotpotqa"
  • TriviaQA: "rag:triviaqa"
  • Musique: "rag:musique"
  • WebQuestions: "rag:web_questions"
  • WoW: "rag:wow"
  • PopQA: "rag:popqa"

We also provide pre-built indices for standard RAG corpora. For instance, a BM25 retriever for the Wikipedia corpus for NQ can be obtained from an pre-existing index autoamticallty downloaded from HuggingFace:

sparse_index = pt.Artifact.from_hf('pyterrier/ragwiki-terrier')
bm25 = pt.rewrite.tokenise() >> sparse_index.bm25(include_fields=['docno', 'text', 'title']) >> pt.rewrite.reset()

Dense indices are also provided, e.g. E5 on Wikipedia:

import pyterrier_dr
e5 = pyterrier_dr.E5() >> pt.Artifact.from_hf("pyterrier/ragwiki-e5.flex") >> sparse_index.text_loader(['docno', 'title', 'text'])

Evaluation

An experiment comparing multiple RAG pipelines can be expressed using PyTerrier's pt.Experiment() API:

pt.Experiment(
    [pipe1, pipe2],
    dataset.get_topics(),
    dataset.get_answers(),
    [pyterrier_rag.measures.EM, pyterrier_rag.measures.F1]
)

Available measures include:

  • Answer length: pyterrier_rag.measures.AnswerLen
  • Answers of 0 length: pyterrier_rag.measures.AnswerZeroLen
  • Exact match percentage: pyterrier_rag.measures.EM
  • F1: pyterrier_rag.measures.F1
  • BERTScore (measures similarity of answer with relevant documents): pyterrier_rag.measures.BERTScore
  • ROUGE, e.g. pyterrier_rag.measures.ROUGE1F

Use the baseline kwarg to conduct significance testing in your experiment - see the pt.Experiment() documentation for more examples.

Citations

If you use PyTerrier-RAG for you research, please cite our work:

Constructing and Evaluating Declarative RAG Pipelines in PyTerrier. Craig Macdonald, Jinyuan Fang, Andrew Parry and Zaiqiao Meng. In Proceedings of SIGIR 2025. https://arxiv.org/abs/2506.10802

Credits

  • Craig Macdonald, University of Glasgow
  • Jinyuan Fang, University of Glasgow
  • Andrew Parry, University of Glasgow
  • Zaiqiao Meng, University of Glasgow
  • Sean MacAvaney, University of Glasgow

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

pyterrier_rag-0.2.2.tar.gz (59.5 kB view details)

Uploaded Source

Built Distribution

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

pyterrier_rag-0.2.2-py3-none-any.whl (58.0 kB view details)

Uploaded Python 3

File details

Details for the file pyterrier_rag-0.2.2.tar.gz.

File metadata

  • Download URL: pyterrier_rag-0.2.2.tar.gz
  • Upload date:
  • Size: 59.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for pyterrier_rag-0.2.2.tar.gz
Algorithm Hash digest
SHA256 f952235850333fb4e0390cfe3e68408a26e6be87e11b0daf2f7e2ec97cf5494f
MD5 93afd4b58efe5be8d996e54d83e932e1
BLAKE2b-256 14d2bf8e248ecd1732e324edbc1cf9cd82c654e16c58a77e29bfb3d4a1120161

See more details on using hashes here.

File details

Details for the file pyterrier_rag-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: pyterrier_rag-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 58.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for pyterrier_rag-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 712bade92bd7f34571e69e66fdb71f6fd63771776d96cf35a06491f4391eff97
MD5 947c96ad95425ed5b85585d4fde28c11
BLAKE2b-256 ed7442e557004a8d669896a3e83c65676c794dc045775dbbfe6a0b7f0a7b824a

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