File size: 1,873 Bytes
389b23b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | 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."
) |