Skip to main content

Failure-aware RAG repair layer for Python.

Project description

ragbolt

Failure-aware RAG repair layer for Python.

What it does

ragbolt runs a bounded failure-handling loop around retrieval, generation, and grounding checks. It classifies retrieval low-confidence, malformed generation output, and grounding failures. Applies at most one repair per failure class per run (max 2 total). RETRIEVAL_LOW_CONFIDENCE and GROUNDING_FAILED are repaired; GENERATION_MALFORMED fails fast in v0.2.0. Grounding decisions are checked with EGA (Evidence-Gated Generation) using a verifier interface and both stub and production verifier implementations. Each run emits an auditable rag_trace.json event stream with failure classes, attempt counts, and outcome.

What it is not

  • Not a RAG framework
  • Not an eval dashboard
  • Not an agent system
  • Not a grounding verifier

Install

pip install ragbolt              # BM25, stub EGA, CLI
pip install ragbolt[full]        # + FAISS hybrid, NLI verifier

Quickstart

  1. Minimal corpus JSON:
[
  {
    "chunk_id": "c1",
    "text": "The Eiffel Tower is in Paris.",
    "source": "facts.txt"
  },
  {
    "chunk_id": "c2",
    "text": "Paris is the capital of France.",
    "source": "facts.txt"
  },
  {
    "chunk_id": "c3",
    "text": "The Seine runs through Paris.",
    "source": "facts.txt"
  }
]
  1. Run CLI:
ragbolt run corpus.json "your query" --output trace.json

Phase 3 options:

# Use Anthropic provider with production EGA verifier
ragbolt run corpus.json "query" --provider anthropic --verifier production

# Use hybrid retrieval (requires ragbolt[full])
ragbolt run corpus.json "query" --retriever hybrid

Expected output:

Outcome: ACCEPTED  run_id: <uuid>  trace: trace.json

Eval

ragbolt eval report.json

Prints outcome distribution from an existing eval_report.json.

To generate a report from a trace file:

from pathlib import Path
from ragbolt.eval.report import load_and_build_report
load_and_build_report(Path("rag_trace.json"), Path("eval_report.json"))

Configuration

bm25_min_score: 0.30
overlap_min_jaccard: 0.15
unsupported_ratio_threshold: 0.25
top_k: 5
top_k_max: 10
context_reduction_mode: chunk

# Generation providers
anthropic_model: claude-sonnet-4-20250514
openai_model: gpt-4o-mini
max_tokens: 1024

# Hybrid retrieval
embedding_model: sentence-transformers/all-MiniLM-L6-v2
rrf_k: 60

# Production EGA verifier
nli_model: cross-encoder/nli-deberta-v3-small
nli_batch_size: 8

Copy to config.yaml and pass via --config.

Failure classes and outcomes

Class Trigger
RETRIEVAL_LOW_CONFIDENCE BM25 top score < bm25_min_score
GENERATION_MALFORMED Empty or error from provider — fails fast, no repair in v0.2.0
GROUNDING_FAILED EGA unsupported_ratio >= threshold
Outcome Meaning
ACCEPTED No failures detected
REPAIRED_ACCEPTED Repair applied, final EGA passed
ABSTAINED Retrieval could not be repaired
FAILED Generation or grounding could not be repaired

Trace output

[
  {
    "run_id": "8c3fc4b8-0c73-4b6b-8c9f-0b6b2bb6d4b7",
    "corpus_id": "corpus",
    "query": "your query",
    "timestamp_utc": "2026-05-09T18:30:45.123456+00:00",
    "failure_classes": [],
    "repair_attempts": 0,
    "outcome": "ACCEPTED",
    "top_score": 1.2345,
    "chunks_retrieved": 3
  }
]

Project layout

ragbolt/
  __init__.py
  cli/
  core/
    generator.py
    orchestrator.py
  eval/
    report.py
  trace/
  verify/
    stub.py
tests/
  __init__.py
  test_bm25.py
  test_eval.py
  test_orchestrator.py
  test_policy.py
  test_trace.py

License

MIT

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

ragbolt-0.5.0.tar.gz (36.9 kB view details)

Uploaded Source

Built Distribution

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

ragbolt-0.5.0-py3-none-any.whl (35.2 kB view details)

Uploaded Python 3

File details

Details for the file ragbolt-0.5.0.tar.gz.

File metadata

  • Download URL: ragbolt-0.5.0.tar.gz
  • Upload date:
  • Size: 36.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for ragbolt-0.5.0.tar.gz
Algorithm Hash digest
SHA256 802804e082c01d3e1ed500e84cec50397dbaf8c1ddf5b28637585a1f8534335d
MD5 7b2c28aefafe4237816145b84440d940
BLAKE2b-256 c67efde37d57511d36b16a45c01a25dd44a16a596fe20041d85989f38460e9a7

See more details on using hashes here.

File details

Details for the file ragbolt-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: ragbolt-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 35.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for ragbolt-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4d25d132dd14a3a5de146cc46775a01b7382375f646c6bca7972093bf490176e
MD5 a56a959a5efaac95246edaf9339a9032
BLAKE2b-256 0022d1cf30baebcf70949cfb2ae5a5110c2c36ee698300f03891717c4d473099

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