llm-eval-ap / src /aggregator.py
sha6th's picture
Fix NLI verdict
4669749
Raw History Blame Contribute Delete
1.21 kB
from src.evaluators.cosine_evaluator import evaluate_cosine
from src.evaluators.fluency_evaluator import evaluate_fluency
from src.evaluators.bert_score_evaluator import evaluate_bert_score
from src.evaluators.nli_evaluator import evaluate_nli
def evaluate_all(context: str, question: str, llm_response: str) -> dict:
# Run all 4 evaluators
cosine_result = evaluate_cosine(question, llm_response)
fluency_result = evaluate_fluency(llm_response)
bert_result = evaluate_bert_score(context, llm_response)
nli_result = evaluate_nli(context, llm_response)
# Final verdict logic
if nli_result["verdict"] == "Hallucinated":
final_verdict = "Hallucinated"
elif nli_result["verdict"] == "Faithful" and bert_result["score"] >= 0.70 and cosine_result["verdict"] == "Relevant":
final_verdict = "Faithful"
elif cosine_result["verdict"] == "Irrelevant" and len(llm_response.split()) > 5:
final_verdict = "Irrelevant"
else:
final_verdict = "Unverifiable"
return {
"final_verdict": final_verdict,
"cosine": cosine_result,
"fluency": fluency_result,
"bert_score": bert_result,
"nli": nli_result
}