Coverage for src / local_deep_research / advanced_search_system / evidence / base_evidence.py: 81%
30 statements
« prev ^ index » next coverage.py v7.12.0, created at 2026-01-11 00:51 +0000
« prev ^ index » next coverage.py v7.12.0, created at 2026-01-11 00:51 +0000
1"""
2Base evidence classes for the advanced search system.
3"""
5from dataclasses import dataclass, field
6from datetime import datetime, UTC
7from enum import Enum
8from typing import Any, Dict, Optional
11class EvidenceType(Enum):
12 """Types of evidence with inherent reliability scores."""
14 DIRECT_STATEMENT = "direct_statement"
15 OFFICIAL_RECORD = "official_record"
16 RESEARCH_FINDING = "research_finding"
17 NEWS_REPORT = "news_report"
18 STATISTICAL_DATA = "statistical_data"
19 INFERENCE = "inference"
20 CORRELATION = "correlation"
21 SPECULATION = "speculation"
23 @property
24 def base_confidence(self) -> float:
25 """Get base confidence for this evidence type."""
26 confidence_map = {
27 EvidenceType.DIRECT_STATEMENT: 0.95,
28 EvidenceType.OFFICIAL_RECORD: 0.90,
29 EvidenceType.RESEARCH_FINDING: 0.85,
30 EvidenceType.STATISTICAL_DATA: 0.85,
31 EvidenceType.NEWS_REPORT: 0.75,
32 EvidenceType.INFERENCE: 0.50,
33 EvidenceType.CORRELATION: 0.30,
34 EvidenceType.SPECULATION: 0.10,
35 }
36 return confidence_map.get(self, 0.5)
39@dataclass
40class Evidence:
41 """Evidence supporting or refuting a claim."""
43 claim: str
44 type: EvidenceType
45 source: str
46 confidence: float = 0.0
47 reasoning: Optional[str] = None
48 raw_text: Optional[str] = None
49 timestamp: str = field(
50 default_factory=lambda: datetime.now(UTC).isoformat()
51 )
52 metadata: Dict[str, Any] = field(default_factory=dict)
54 def __post_init__(self):
55 """Calculate initial confidence if not provided."""
56 if self.confidence == 0.0:
57 self.confidence = self.type.base_confidence