76 lines
2.0 KiB
Python
76 lines
2.0 KiB
Python
"""Simple data contracts used by NovaPlan MVP.
|
|
|
|
- PlanDelta: delta between local and global plans.
|
|
- SharedSchedule: aggregated schedule signals from agents.
|
|
- ResourceUsage: energy, time, or other resource consumptions.
|
|
- PrivacyBudget: basic DP-like budget for an agent (simulated).
|
|
- AuditLog: lightweight log entries for governance.
|
|
"""
|
|
from __future__ import annotations
|
|
from dataclasses import dataclass, asdict
|
|
from typing import Dict, Any, List
|
|
import json
|
|
|
|
@dataclass
|
|
class PlanDelta:
|
|
agent_id: str
|
|
delta: Dict[str, float]
|
|
timestamp: float
|
|
|
|
def to_json(self) -> str:
|
|
return json.dumps(asdict(self))
|
|
|
|
@dataclass
|
|
class SharedSchedule:
|
|
schedule: Dict[str, Any]
|
|
timestamp: float
|
|
|
|
@dataclass
|
|
class ResourceUsage:
|
|
agent_id: str
|
|
resources: Dict[str, float]
|
|
timestamp: float
|
|
|
|
@dataclass
|
|
class PrivacyBudget:
|
|
agent_id: str
|
|
budget: float
|
|
timestamp: float
|
|
|
|
@dataclass
|
|
class AuditLog:
|
|
entry_id: str
|
|
message: str
|
|
timestamp: float
|
|
|
|
def serialize(obj: object) -> str:
|
|
if hasattr(obj, "__dict__"):
|
|
return json.dumps(obj.__dict__)
|
|
return json.dumps(obj)
|
|
|
|
# Lightweight contract registry for versioning and interoperability
|
|
class ContractRegistry:
|
|
_registry: Dict[str, int] = {}
|
|
|
|
@classmethod
|
|
def register(cls, name: str, version: int) -> None:
|
|
cls._registry[name] = int(version)
|
|
|
|
@classmethod
|
|
def version_of(cls, name: str, default: int | None = None) -> int | None:
|
|
return cls._registry.get(name, default)
|
|
|
|
# Auto-register core contracts for quick interoperability in MVP workflows.
|
|
# This ensures a minimal, versioned contract surface is available as soon as
|
|
# the module is imported, which benefits tooling and adapters that rely on
|
|
# contract versioning without requiring explicit setup code in downstream
|
|
# components.
|
|
for _name, _ver in [
|
|
("PlanDelta", 1),
|
|
("SharedSchedule", 1),
|
|
("ResourceUsage", 1),
|
|
("PrivacyBudget", 1),
|
|
("AuditLog", 1),
|
|
]:
|
|
ContractRegistry.register(_name, _ver)
|