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