"""Per-session game state.""" from __future__ import annotations from dataclasses import dataclass, field from typing import Literal from .case_loader import CaseData Method = Literal["dempster", "yager", "pcr5", "cautious"] @dataclass class Turn: role: str content: str @dataclass class Deposition: witness_id: str mass: dict[frozenset[str], float] summary: str alpha: float = 0.0 # discount @dataclass class Verdict: suspect: str method: Method suspicion: float threshold: float @dataclass class CaseState: session_id: str case_id: str days_remaining: int transcripts: dict[str, list[Turn]] = field(default_factory=dict) depositions: list[Deposition] = field(default_factory=list) active_method: Method = "dempster" combined_mass: dict[frozenset[str], float] | None = None bel: dict[str, float] | None = None pl: dict[str, float] | None = None conflict_K: float | None = None verdict: Verdict | None = None outcome: Literal["just", "wrongful", "cold", "mistrial"] | None = None @classmethod def start(cls, session_id: str, case: CaseData) -> "CaseState": return cls( session_id=session_id, case_id=case.case_id, days_remaining=case.court_days, transcripts={w.id: [] for w in case.witnesses}, active_method=case.methods_available[0], )