Source code for lalandre_rag.retrieval.result

"""
Core retrieval result dataclass.

Extracted from service.py so that sub-modules (semantic_search, bm25_search,
fusion_service, rerank_service) can import it without circular dependencies.
"""

from dataclasses import dataclass
from typing import Any, Dict, Optional


[docs] @dataclass class RetrievalResult: """Single retrieval result with content and metadata""" content: str score: float subdivision_id: int act_id: int celex: Optional[str] subdivision_type: str sequence_order: int metadata: Dict[str, Any] # Additional metadata from Qdrant
[docs] @dataclass class RetrievalStats: """Statistics from the last retrieve() call, for audit/traceability.""" candidates_after_fusion: int = 0 candidates_after_threshold: int = 0 candidates_after_rerank: int = 0 candidates_after_adaptive_cutoff: int = 0 candidates_returned: int = 0 adaptive_cutoff_applied: bool = False effective_score_threshold: Optional[float] = None fusion_lexical_weight: Optional[float] = None fusion_semantic_weight: Optional[float] = None query_variants_count: int = 0 cache_hit: bool = False # Per-step timing (ms) for performance diagnosis embedding_ms: float = 0.0 semantic_search_ms: float = 0.0 lexical_search_ms: float = 0.0 parallel_search_ms: float = 0.0 fusion_ms: float = 0.0 rerank_ms: float = 0.0 total_retrieve_ms: float = 0.0