Spaces:
Running on Zero
Running on Zero
| #!/usr/bin/env python3 | |
| """ | |
| Run the real evaluation (Basic Vector RAG vs Hybrid RAG vs Agentic RAG) and | |
| the ablation study, print a summary table, and save full results to | |
| data/eval_results.json. Every number is computed live against the corpus in | |
| data/corpus.json using the labeled questions in data/eval_questions.json. | |
| Usage: | |
| python scripts/evaluate.py | |
| """ | |
| import json | |
| import logging | |
| import os | |
| import sys | |
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | |
| logging.basicConfig(level=logging.ERROR) | |
| from src.agents.retrieval import init_rag, rag_status # noqa: E402 | |
| from src.evaluation.benchmark import run_ablation, run_benchmark, summarize # noqa: E402 | |
| CORPUS_PATH = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "data", "corpus.json") | |
| EVAL_PATH = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "data", "eval_questions.json") | |
| OUT_PATH = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "data", "eval_results.json") | |
| def _print_table(title: str, summary: dict) -> None: | |
| print(f"\n=== {title} ===") | |
| metric_names = list(next(iter(summary.values())).keys()) | |
| header = f"{'System':<34}" + "".join(f"{m:>22}" for m in metric_names) | |
| print(header) | |
| print("-" * len(header)) | |
| for system, metrics in summary.items(): | |
| row = f"{system:<34}" + "".join(f"{metrics[m]:>22}" for m in metric_names) | |
| print(row) | |
| def main(): | |
| init_rag(CORPUS_PATH) | |
| status = rag_status() | |
| print(f"RAG backend in use for this evaluation run: {status['embedding_backend']} " | |
| f"(reranker: {status['reranker_backend']})") | |
| print(f"Corpus: {status['num_documents']} documents / {status['num_chunks']} chunks") | |
| print("\nRunning system comparison (Basic Vector RAG vs Hybrid RAG vs Agentic RAG)...") | |
| comparison_results = run_benchmark(CORPUS_PATH, EVAL_PATH) | |
| comparison_summary = summarize(comparison_results) | |
| _print_table("System Comparison (mean over eval set)", comparison_summary) | |
| print("\nRunning ablation study on the Agentic RAG pipeline...") | |
| ablation_results = run_ablation(CORPUS_PATH, EVAL_PATH) | |
| ablation_summary = summarize(ablation_results) | |
| _print_table("Ablation Study (mean over eval set)", ablation_summary) | |
| with open(OUT_PATH, "w", encoding="utf-8") as f: | |
| json.dump({ | |
| "rag_backend": status, | |
| "system_comparison_raw": comparison_results, | |
| "system_comparison_summary": comparison_summary, | |
| "ablation_raw": ablation_results, | |
| "ablation_summary": ablation_summary, | |
| }, f, indent=2) | |
| print(f"\nFull results saved to {OUT_PATH}") | |
| if __name__ == "__main__": | |
| main() | |