from __future__ import annotations from typing import Any, Dict, List, Optional from pydantic import BaseModel, Field class LocalProblem(BaseModel): site_id: str objective: str parameters: Dict[str, Any] domain: str = "electricity" contract_id: Optional[str] = None class SharedVariables(BaseModel): name: str value: Any version: int privacy_bound: Optional[float] = None source_contract_id: Optional[str] = None SharedVariable = SharedVariables class DualVariables(BaseModel): primal: float dual: float step: Optional[int] = None class PlanDelta(BaseModel): delta_id: str contract_id: Optional[str] = None changes: Dict[str, Any] timestamp: float author: Optional[str] = None provenance: Dict[str, Any] = Field(default_factory=dict) privacy_budget: Optional[float] = None signature: Optional[str] = None class DeltaEnvelope(BaseModel): replica_id: str sequence: int plan_delta: PlanDelta previous_hash: Optional[str] = None entry_hash: Optional[str] = None class PrivacyBudget(BaseModel): budget: float used: float scope: Optional[str] = None class AuditLog(BaseModel): entry_id: str action: str timestamp: float actor: str result: Optional[str] = None metadata: Dict[str, Any] = Field(default_factory=dict) class ContractTemplate(BaseModel): template_id: str name: str domain: str schema_version: int = 1 description: Optional[str] = None fields: Dict[str, str] = Field(default_factory=dict) class GovernanceEvent(BaseModel): event_id: str event_type: str actor: str timestamp: float payload: Dict[str, Any] = Field(default_factory=dict) previous_hash: Optional[str] = None entry_hash: Optional[str] = None signature: Optional[str] = None class AdapterConformance(BaseModel): adapter_id: str contract_id: str status: str notes: List[str] = Field(default_factory=list)