PDF-Assit_RAG / backend /scripts /run_ragas_eval.py
Param20h's picture
deploy: pure backend API with keywords fix
7c46845 unverified
Raw
History Blame Contribute Delete
2.04 kB
"""Run a 50-question RAGAS comparison for vector search and GraphRAG."""
from __future__ import annotations
import argparse
import json
import sys
from datetime import datetime, timezone
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
BACKEND_DIR = ROOT / "backend"
if str(BACKEND_DIR) not in sys.path:
sys.path.insert(0, str(BACKEND_DIR))
DEFAULT_DATASET = BACKEND_DIR / "evaluation" / "ragas_sample_questions.jsonl"
DEFAULT_OUTPUT = BACKEND_DIR / "evaluation" / "ragas_results.json"
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Evaluate vector search versus GraphRAG with RAGAS.",
)
parser.add_argument("--user-id", required=True, help="Owner user id for indexed documents.")
parser.add_argument("--document-id", help="Optional single document id to evaluate.")
parser.add_argument("--dataset", type=Path, default=DEFAULT_DATASET)
parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT)
parser.add_argument("--limit", type=int, default=50)
return parser.parse_args()
def main() -> None:
args = parse_args()
from app.evaluation.ragas_pipeline import collect_records, compare_pipelines, load_questions
questions = load_questions(args.dataset, limit=args.limit)
grouped_records = collect_records(
questions=questions,
user_id=args.user_id,
document_id=args.document_id,
)
scores = compare_pipelines(grouped_records)
payload = {
"generated_at": datetime.now(timezone.utc).isoformat(),
"dataset": str(args.dataset),
"question_count": len(questions),
"user_id": args.user_id,
"document_id": args.document_id,
"scores": scores,
}
args.output.parent.mkdir(parents=True, exist_ok=True)
args.output.write_text(json.dumps(payload, indent=2), encoding="utf-8")
print(json.dumps(payload["scores"], indent=2))
print(f"Wrote RAGAS evaluation results to {args.output}")
if __name__ == "__main__":
main()