- forked from team repo
- time should be combined from CALM-RAG500 & BLUFF-RAG (since name of repo was changed)ged)
Benchmark for Large Language Model Understanding of Factual Fallibility in Retrieval-Augmented Generation
BLUFF-1000 is a comprehensive benchmark and evaluation harness for assessing calibration-aware Retrieval-Augmented Generation (RAG) systems across multiple models (GPT-4o, LLaMA-2/70B, Mistral-7B, Gemini). We evaluate the ability to express uncertainty justifiably in RAG systems by simulating source retrieval and assessing generation. This topic is especially important, since real-world RAG systems often retrieve unreliable or contradictory information from sources.
BLUFF-1000 contains 500 questions spanning 10 domains. Each question contains 2 source sets, amounting to 1000 total evaluation instances.
| ID | Hypothesis | Key Metrics |
|---|---|---|
| H1 | Sparse/contradictory evidence → verbal over-confidence | Retrieval-Recall vs Confidence ρ, Overconfidence Index (OCI) |
| H2 | Adding retrieval ↑ accuracy but ↑ calibration error | ECE (with-/without-RAG), Brier Score |
that current RAG systems fail to appropriately modulate their linguistic certainty when evidence quality degrades..
https://drive.google.com/file/d/1FkTS_F6eDyPmY5sk1G8mXdIsllNf4BK0/view?usp=sharing
git clone https://github.com/your-repo/BLUFF-RAG500.git
cd BLUFF-RAG500
pip install -r requirements.txttfrom runner import RAGEvaluator
# Initialize evaluator
evaluator = RAGEvaluator("example_dataset.json")
# Setup OpenAI (replace with your API key)
evaluator.setup_openai("your-openai-api-key")
# Run evaluation
results = evaluator.run_evaluation("openai", max_items=10)
# Print summary and save results
evaluator.print_summary(results)
evaluator.save_results(results)Each item in the BLUFF-RAG-500 dataset follows this structure:
{
"id": 17,
"domain": "medicine",
"question": "What was the remission rate in the Phase 3 trial of Drug X?",
"source_excerpts": [
{
"title": "Phase 3 Clinical Trial Results...",
"url": "https://pubmed.ncbi.nlm.nih.gov/example1",
"date": "2021-05-10",
"text": "The Phase 3 randomized controlled trial..."
}
],
"gold_answer": "45%",
"human_confidence": 0.6,
"human_hedge_label": "Likely"
}}Implements all calibration and confidence metrics:
- Overconfidence Index (OCI): Fraction of high-confidence wrong answers
- Expected Calibration Error (ECE): Calibration assessment
- Brier Score: Probabilistic accuracy measure
- Hedge Detection: Precision/recall for uncertainty language
- Isotonic Calibration: Post-hoc calibration improvement
Handles prompt formatting for different models and scenarios:
- Standard RAG prompts with confidence elicitation
- Calibration-focused prompts for better uncertainty estimation
- Few-shot examples for improved calibration
- Model-specific prompt adaptations
Main evaluation harness:
- Multi-model support (OpenAI, LLaMA, Mistral, Gemini)
- Batch evaluation with progress tracking
- Automatic metric computation
- Results saving and summary generation
- Expected Calibration Error (ECE): Measures calibration quality
- Brier Score: Combines accuracy and calibration
- Overconfidence Index: High-confidence errors (τ = 0.8)
- Hedge Precision/Recall: Detection of uncertainty language
- Confidence-Accuracy Correlation: Alignment of confidence with correctness
- Lexical Overconfidence: Confident language in wrong answers
- Retrieval-Confidence Correlation: How retrieval quality affects confidence
- Recall vs Confidence: Relationship between evidence quality and certainty
results = evaluator.run_evaluation("openai", prompt_type="standard")results = evaluator.run_evaluation("openai", prompt_type="calibration")results = evaluator.run_evaluation("openai", prompt_type="uncertainty")- GPT-4o
- LLaMA-2/70B
- Mistral-7B
- Gemini
- Climate Science
- Technology
- Current Events
- Astronomy
- Finance
- History
- Law
- Psychology
- Public Health
- Politics
- Sports
Website: HTML/CSS, Javascript Dataset Creation: Python Metric Calculations: Pythonon