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."
    )