from dataclasses import dataclass from datetime import datetime @dataclass class DisambiguationResult: node_id: str display_name: str confidence: float signal_breakdown: dict[str, float] def disambiguate( mention: str, candidates: list[dict], context_terms: list[str], query_time: datetime, ) -> DisambiguationResult: scores = {} for candidate in candidates: freq = frequency_prior_score(mention, candidate) ctx = context_coherence_score(candidate, context_terms) temporal = temporal_activity_score(candidate, query_time) scores[candidate["node_id"]] = { "frequency": freq, "context": ctx, "temporal": temporal, "combined": freq * 0.35 + ctx * 0.45 + temporal * 0.20, } best = max(scores, key=lambda nid: scores[nid]["combined"]) return DisambiguationResult( node_id=best, display_name=next(c["name"] for c in candidates if c["node_id"] == best), confidence=scores[best]["combined"], signal_breakdown=scores[best], )