import re from axon.models import SearchResult _CITATION_RE = re.compile(r"\[(\d+)\]") def validate_citations(report: str, sources: list[SearchResult]) -> tuple[int, list[int], bool]: citations = sorted({int(match) for match in _CITATION_RE.findall(report)}) missing = [citation for citation in citations if citation < 1 or citation > len(sources)] return len(citations), missing, not missing and bool(citations)