from dataclasses import dataclass, field from typing import List @dataclass class Evidence: claim: str source_url: str excerpt: str supports_claim: bool | None = None @dataclass class ResearchState: question: str claims: List[str] = field(default_factory=list) evidence: List[Evidence] = field(default_factory=list) def add_claim(self, claim: str): if claim not in self.claims: self.claims.append(claim) def add_evidence( self, claim: str, source_url: str, excerpt: str, supports_claim: bool | None = None, ): self.evidence.append( Evidence( claim=claim, source_url=source_url, excerpt=excerpt, supports_claim=supports_claim, ) ) def evidence_for_claim(self, claim: str) -> List[Evidence]: return [ evidence for evidence in self.evidence if evidence.claim == claim ]