spacesafeml-certification-b.../spacesafeml_certification_b.../dsl.py

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 = ""