38 lines
919 B
Python
38 lines
919 B
Python
from typing import List, Optional
|
|
from pydantic import BaseModel, Field
|
|
from datetime import datetime
|
|
|
|
|
|
class Source(BaseModel):
|
|
type: str
|
|
uri: str
|
|
confidence: Optional[float] = None
|
|
|
|
|
|
class Signal(BaseModel):
|
|
name: str
|
|
value: float
|
|
provenance: Optional[dict] = None
|
|
|
|
|
|
class Provenance(BaseModel):
|
|
trace_id: str
|
|
signer: Optional[str] = None
|
|
ledger_anchor: Optional[str] = None
|
|
|
|
|
|
class NarrativeBlock(BaseModel):
|
|
id: str
|
|
topic: str
|
|
timestamp: datetime
|
|
sources: List[Source] = Field(default_factory=list)
|
|
signals: List[Signal] = Field(default_factory=list)
|
|
sentiment: Optional[float] = None
|
|
risk_factors: List[str] = Field(default_factory=list)
|
|
scenario_flags: List[str] = Field(default_factory=list)
|
|
provenance: Optional[Provenance] = None
|
|
|
|
class Config:
|
|
# make JSON serialization deterministic for replay
|
|
json_sort_keys = True
|