latent.rag.metrics¶
Standalone retrieval evaluation metrics for RAG pipelines.
All functions operate on lists of string IDs and return a float in [0, 1]. Edge cases (empty inputs, no matches) return 0.0.
Classes¶
ContentMRRMetric¶
MRR using text overlap instead of chunk ID matching.
ContentRecallMetric¶
ContentRecallMetric(k: int = 5, relevant_content_key: str = 'relevant_content', overlap_threshold: float = 0.5)
Recall@K using text overlap instead of chunk ID matching.
Use when ground truth chunk IDs don't match retrieved chunk IDs (e.g. different chunking configurations).
ContextPrecisionMetric¶
Wraps :func:context_precision as a :class:RAGMetric.
JudgeMetric¶
Delegates scoring to an LLM judge that implements an evaluate method.
MRRMetric¶
Wraps :func:mrr as a :class:RAGMetric.
NDCGMetric¶
Wraps :func:ndcg as a :class:RAGMetric.
PrecisionAtKMetric¶
Wraps :func:precision_at_k as a :class:RAGMetric.
RAGMetric¶
Protocol for RAG evaluation metrics.
RecallAtKMetric¶
Wraps :func:recall_at_k as a :class:RAGMetric.
Functions¶
context_precision¶
Context Precision — weighted precision by rank, averaged over relevant docs.
For each relevant document at position i, computes precision@(i+1), i.e. the fraction of the top-(i+1) results that are relevant. The score is the mean of these per-hit precision values divided by the number of relevant documents (whether found or not).
Args: retrieved_ids: Ordered list of retrieved document IDs. relevant_ids: Set of ground-truth relevant document IDs.
Returns: Context precision in [0, 1], or 0.0 when relevant_ids is empty or no relevant document appears in retrieved_ids.
mrr¶
Mean Reciprocal Rank — reciprocal of the first relevant result's position.
Args: retrieved_ids: Ordered list of retrieved document IDs. relevant_ids: Set of ground-truth relevant document IDs.
Returns: MRR in [0, 1], or 0.0 when no relevant document is found.
ndcg¶
Normalized Discounted Cumulative Gain.
Uses binary relevance: gain is 1 for a relevant document, 0 otherwise. DCG = sum of 1 / log2(i + 2) for each relevant document at position i. IDCG is the ideal DCG achieved when all relevant documents appear first.
Args: retrieved_ids: Ordered list of retrieved document IDs. relevant_ids: Set of ground-truth relevant document IDs. k: Number of top results to consider.
Returns: NDCG@k in [0, 1], or 0.0 when relevant_ids is empty.
precision_at_k¶
Fraction of top-k retrieved results that are relevant.
Args: retrieved_ids: Ordered list of retrieved document IDs. relevant_ids: Set of ground-truth relevant document IDs. k: Number of top results to consider.
Returns: Precision@k in [0, 1], or 0.0 when the retrieved list is empty.
recall_at_k¶
Fraction of relevant documents found in the top-k retrieved results.
Args: retrieved_ids: Ordered list of retrieved document IDs. relevant_ids: Set of ground-truth relevant document IDs. k: Number of top results to consider.
Returns: Recall@k in [0, 1], or 0.0 when relevant_ids is empty.
Methods¶
ContentMRRMetric.score¶
score(query: str, retrieved: list[RetrievedChunk], reference: str | None = None, eval_row: dict | None = None) -> float
ContentRecallMetric.score¶
score(query: str, retrieved: list[RetrievedChunk], reference: str | None = None, eval_row: dict | None = None) -> float
ContextPrecisionMetric.score¶
score(query: str, retrieved: list[RetrievedChunk], reference: str | None = None, eval_row: dict | None = None) -> float
JudgeMetric.score¶
score(query: str, retrieved: list[RetrievedChunk], reference: str | None = None, eval_row: dict | None = None) -> float
MRRMetric.score¶
score(query: str, retrieved: list[RetrievedChunk], reference: str | None = None, eval_row: dict | None = None) -> float
NDCGMetric.score¶
score(query: str, retrieved: list[RetrievedChunk], reference: str | None = None, eval_row: dict | None = None) -> float
PrecisionAtKMetric.score¶
score(query: str, retrieved: list[RetrievedChunk], reference: str | None = None, eval_row: dict | None = None) -> float
RAGMetric.score¶
score(query: str, retrieved: list[RetrievedChunk], reference: str | None = None, eval_row: dict | None = None) -> float