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: 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 } if __name__ == "__main__": result = evaluate_all( context="Photosynthesis is the process by which plants convert sunlight into glucose.", question="How do plants make food?", llm_response="Plants use moonlight to produce glucose through photosynthesis." ) import json print(json.dumps(result, indent=2))