from __future__ import annotations from typing import List, Optional from datetime import datetime from pydantic import BaseModel, Field class LocalProblem(BaseModel): id: str = Field(..., description="Unique problem identifier") asset: str venue: str objective: str = Field("min_spread", description="High-level objective tag") parameters: Optional[dict] = Field(default_factory=dict) price_target: Optional[float] = None tolerance: Optional[float] = None constraints: Optional[dict] = None created_at: datetime = Field(default_factory=datetime.utcnow) class SharedVariables(BaseModel): contract_id: str version: int signals: dict | None = None variables: dict | None = None privacy_budget: Optional[float] = 0.0 class DualVariables(BaseModel): contract_id: str = "" version: int shadow_prices: dict class PlanDelta(BaseModel): contract_id: Optional[str] = None delta: dict timestamp: datetime = Field(default_factory=datetime.utcnow) author_signature: Optional[str] = None author: Optional[str] = None def to_json(self) -> str: import json return json.dumps(self.dict(), default=str) class AuditLog(BaseModel): contract_id: Optional[str] = None entry: dict timestamp: datetime = Field(default_factory=datetime.utcnow) signature: Optional[str] = None