idea10-catopt-studio-a/catopt_studio/core.py

82 lines
2.3 KiB
Python

"""Minimal DSL primitives for CatOpt Studio MVP.
This module provides lightweight, serializable primitives that sketch the
Domain-Specific Language (DSL) surface described in the plan. It is not a
full implementation, but serves as a stable foundation for tests and demos.
"""
from __future__ import annotations
from dataclasses import dataclass, field
from datetime import datetime
from typing import Any, Dict, List, Optional
@dataclass
class LocalProblem:
id: str
domain: str
assets: Dict[str, Any] = field(default_factory=dict)
objective: str = ""
constraints: List[str] = field(default_factory=list)
solver_hint: Optional[str] = None
@dataclass
class SharedVariables:
forecasts: Dict[str, Any] = field(default_factory=dict)
priors: Dict[str, Any] = field(default_factory=dict)
version: int = 0
@dataclass
class PlanDelta:
delta: Dict[str, Any] = field(default_factory=dict)
timestamp: datetime = field(default_factory=datetime.utcnow)
author: str = "anonymous"
contract_id: Optional[str] = None
signature: Optional[str] = None
@dataclass
class PrivacyBudget:
signal: str = ""
budget: float = 0.0
expiry: Optional[datetime] = None
@dataclass
class AuditLog:
entry: str = ""
signer: str = "anonymous"
timestamp: datetime = field(default_factory=datetime.utcnow)
contract_id: Optional[str] = None
version: int = 0
@dataclass
class PolicyBlock:
safety: Dict[str, Any] = field(default_factory=dict)
exposure_rules: Dict[str, Any] = field(default_factory=dict)
@dataclass
class GraphOfContractsEntry:
adapter_name: str
canonical_schema: str
@dataclass
class ServiceGenome:
"""Lightweight ServiceGenome manifest for adapters/solvers.
This mirrors the proposal in the community discussion and captures a
minimal set of fields useful for runtime selection, canarying and
admission control in edge environments.
"""
runtime_role: str # e.g., 'adapter' | 'local-solver' | 'aggregator'
capability_vector: Dict[str, Any] = field(default_factory=dict)
resource_envelope: Dict[str, Any] = field(default_factory=dict) # cpu, memory, energy estimates
safety_invariants: Dict[str, Any] = field(default_factory=dict)
compliance_hook: Optional[str] = None # URL for sandbox/compliance checks
version: Optional[str] = None