"""Runs multiple verifiers and merges results into one VerificationResult.""" from __future__ import annotations from typing import List from ..core.interfaces import Verifier from ..core.types import Query, Retrieved, VerificationAlert, VerificationResult class CompositeVerifier: name = "composite" def __init__(self, verifiers: List[Verifier]) -> None: self.verifiers = list(verifiers) def verify( self, query: Query, answer: str, context: List[Retrieved], ) -> VerificationResult: alerts: List[VerificationAlert] = [] citation = 0.0 faithful = 0.0 struct_ok = True passes: List[bool] = [] for v in self.verifiers: res = v.verify(query, answer, context) alerts.extend(res.alerts) citation = max(citation, res.citation_coverage) faithful = max(faithful, res.faithfulness) struct_ok = struct_ok and res.structure_match passes.append(res.passed) return VerificationResult( passed=all(passes), alerts=alerts, citation_coverage=citation, faithfulness=faithful, structure_match=struct_ok, )