50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
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
|