VedantDhavan's picture
Deploy GraphRAG benchmark backend
83aed13
Raw
History Blame Contribute Delete
2.04 kB
from .bertscore_eval import compute_bertscore
from .llm_judge import judge_answer, judge_answers
from .metrics import compute_cost
def evaluate(query, outputs, ground_truth):
results = {}
for name, out in outputs.items():
answer = out.get("answer", "")
tokens = out.get("tokens", 0)
latency = out.get("latency", 0)
results[name] = {
"answer": answer,
"tokens": tokens,
"latency": latency,
"cost": compute_cost(tokens),
"judge": judge_answer(answer, ground_truth, query)
}
return results
def evaluate_single_answer(question, correct_answer, system_answer):
verdict = judge_answer(system_answer, correct_answer, question)
bert = compute_bertscore([system_answer], [correct_answer])
return {
"llm_judge": verdict,
"llm_judge_pass": verdict == "PASS",
"bertscore_f1": bert["mean_f1"],
}
def evaluate_batch(pipeline_answers, ground_truth):
references = [row.get("correct_answer", "") for row in ground_truth]
questions = [row.get("question", row.get("query", "")) for row in ground_truth]
metrics = {}
for pipeline_name, answers in pipeline_answers.items():
rows = [
{
"question": question,
"correct_answer": reference,
"system_answer": answer,
}
for question, reference, answer in zip(questions, references, answers)
]
verdicts = judge_answers(rows)
pass_fail = [verdict == "PASS" for verdict in verdicts if verdict != "SKIP"]
bert = compute_bertscore(answers, references)
metrics[pipeline_name] = {
"llm_judge_pass_rate": (
sum(pass_fail) / len(pass_fail) if pass_fail else None
),
"llm_judge_verdicts": verdicts,
"bertscore_f1": bert["mean_f1"],
"bertscore_status": bert["status"],
"bertscore_error": bert["error"],
}
return metrics