71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
"""Safety Contract DSL (minimal MVP).
|
|
|
|
Defines simple data models to describe safety contracts for onboard AI planning.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from typing import List, Dict, Any, Optional
|
|
|
|
|
|
@dataclass
|
|
class LocalCapabilities:
|
|
name: str
|
|
capabilities: List[str] = field(default_factory=list)
|
|
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class SafetyPreConditions:
|
|
description: str
|
|
conditions: Dict[str, Any] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class SafetyPostConditions:
|
|
description: str
|
|
conditions: Dict[str, Any] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class ResourceBudgets:
|
|
cpu_cores: float = 0.0
|
|
memory_gb: float = 0.0
|
|
energy_wh: float = 0.0
|
|
time_seconds: float = 0.0
|
|
|
|
|
|
@dataclass
|
|
class DataSharingPolicy:
|
|
policy_id: str
|
|
allowed_data: List[str] = field(default_factory=list)
|
|
constraints: Dict[str, Any] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class SafetyContract:
|
|
contract_id: str
|
|
local_capabilities: List[LocalCapabilities] = field(default_factory=list)
|
|
pre_conditions: Optional[SafetyPreConditions] = None
|
|
post_conditions: Optional[SafetyPostConditions] = None
|
|
budgets: Optional[ResourceBudgets] = None
|
|
data_policy: Optional[DataSharingPolicy] = None
|
|
version: str = "1.0"
|
|
# MVP extension: optional, versioned scenarios for deterministic replay and testing
|
|
scenarios: List["Scenario"] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
class Scenario:
|
|
"""Minimal representation of a test/operational scenario for safety contracts.
|
|
|
|
This enables versioned scenarios with sensors, environment disturbances,
|
|
and deterministic replay hooks. The fields are kept intentionally lightweight
|
|
to avoid breaking existing contracts while enabling extensibility.
|
|
"""
|
|
scenario_id: str
|
|
sensors: Dict[str, Any] = field(default_factory=dict)
|
|
environment: Dict[str, Any] = field(default_factory=dict)
|
|
deterministic_replay: bool = False
|
|
description: str = ""
|