AI-ResearchPilot / scripts /evaluate.py
Keerthisujana's picture
Initial deploy of AI ResearchPilot
6a5d1ee
Raw
History Blame Contribute Delete
2.73 kB
#!/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()