openenergysphere-federated-.../src/energysphere/models.py

92 lines
2.0 KiB
Python

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)