Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-rag/src/lexigram/ai/rag/evaluation/convenience.py: 100%

22 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-25 07:19 +0800

1"""Convenience function for RAG evaluation.""" 

2 

3from __future__ import annotations 

4 

5from typing import Any 

6 

7from lexigram.ai.rag.evaluation.answer import ( 

8 AnswerFaithfulnessEvaluator, 

9 AnswerRelevanceEvaluator, 

10) 

11from lexigram.ai.rag.evaluation.base import EvaluatorBase 

12from lexigram.ai.rag.evaluation.context import ContextRelevanceEvaluator 

13from lexigram.ai.rag.evaluation.evaluator import RAGEvaluator 

14from lexigram.ai.rag.evaluation.hallucination import HallucinationDetector 

15from lexigram.ai.rag.evaluation.retrieval import ( 

16 RetrievalPrecisionEvaluator, 

17 RetrievalRecallEvaluator, 

18) 

19from lexigram.ai.rag.evaluation.types import RAGEvaluationReport 

20 

21 

22async def evaluate_rag( 

23 query: str, 

24 retrieved_docs: list[Any], 

25 generated_answer: str, 

26 reference_answer: str | None = None, 

27 llm_client: Any = None, 

28 evaluators: list[EvaluatorBase] | None = None, 

29 **kwargs: Any, 

30) -> RAGEvaluationReport: 

31 """Convenience function for RAG evaluation. 

32 

33 Args: 

34 query: The query. 

35 retrieved_docs: Retrieved documents. 

36 generated_answer: Generated answer. 

37 reference_answer: Optional ground truth. 

38 llm_client: Optional LLM client for LLM-based metrics. 

39 evaluators: Optional custom evaluators. 

40 **kwargs: Additional parameters. 

41 

42 Returns: 

43 Evaluation report. 

44 """ 

45 if evaluators is None: 

46 evaluators = [] 

47 

48 # Add basic retrieval metrics if relevant docs provided 

49 if "relevant_doc_ids" in kwargs: 

50 evaluators.append(RetrievalPrecisionEvaluator()) 

51 evaluators.append(RetrievalRecallEvaluator()) 

52 

53 # Add LLM-based metrics if LLM client provided 

54 if llm_client is not None: 

55 evaluators.append(AnswerRelevanceEvaluator(llm_client)) 

56 evaluators.append(AnswerFaithfulnessEvaluator(llm_client)) 

57 evaluators.append(ContextRelevanceEvaluator(llm_client)) 

58 evaluators.append(HallucinationDetector(llm_client)) 

59 

60 evaluator = RAGEvaluator(evaluators=evaluators) 

61 return await evaluator.evaluate( 

62 query=query, 

63 retrieved_docs=retrieved_docs, 

64 generated_answer=generated_answer, 

65 reference_answer=reference_answer, 

66 **kwargs, 

67 )