from research_state import ResearchState def verify_research(state: ResearchState) -> dict: results = [] for claim in state.claims: evidence = state.evidence_for_claim(claim) if not evidence: results.append( { "claim": claim, "status": "UNVERIFIED", "reason": "No evidence was collected.", "sources": [], } ) continue supporting = [ item for item in evidence if item.supports_claim is True ] contradicting = [ item for item in evidence if item.supports_claim is False ] if contradicting: status = "CONFLICTING" elif supporting: status = "SUPPORTED" else: status = "UNCERTAIN" results.append( { "claim": claim, "status": status, "reason": _build_reason( supporting, contradicting, evidence, ), "sources": [ item.source_url for item in evidence ], } ) return { "question": state.question, "claims": results, "verified": all( item["status"] == "SUPPORTED" for item in results ), } def _build_reason(supporting, contradicting, evidence): if contradicting: return "At least one source contradicts the claim." if supporting: return f"{len(supporting)} source(s) support the claim." return ( f"Evidence was found from {len(evidence)} source(s), " "but it has not been explicitly classified as supporting." )