build(agent): new-agents-2#7e3bbc iteration
This commit is contained in:
parent
1bcfb62eec
commit
5db0cdfd87
|
|
@ -51,3 +51,20 @@ class SafetyContract:
|
||||||
budgets: Optional[ResourceBudgets] = None
|
budgets: Optional[ResourceBudgets] = None
|
||||||
data_policy: Optional[DataSharingPolicy] = None
|
data_policy: Optional[DataSharingPolicy] = None
|
||||||
version: str = "1.0"
|
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 = ""
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ from __future__ import annotations
|
||||||
from dataclasses import dataclass, field, asdict
|
from dataclasses import dataclass, field, asdict
|
||||||
from typing import List, Dict, Any
|
from typing import List, Dict, Any
|
||||||
|
|
||||||
from .dsl import SafetyContract, LocalCapabilities
|
from .dsl import SafetyContract, LocalCapabilities, Scenario
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|
@ -88,6 +88,22 @@ def contract_to_ir(contract: SafetyContract) -> IRCube:
|
||||||
audit_log_ref="",
|
audit_log_ref="",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# If the contract contains scenarios, map them into IR objects as well
|
||||||
|
if contract.scenarios:
|
||||||
|
for sc in contract.scenarios:
|
||||||
|
obj = IRObject(
|
||||||
|
id=f"scenario-{sc.scenario_id}",
|
||||||
|
type="Scenario",
|
||||||
|
properties={
|
||||||
|
"scenario_id": sc.scenario_id,
|
||||||
|
"description": sc.description,
|
||||||
|
"sensors": sc.sensors,
|
||||||
|
"environment": sc.environment,
|
||||||
|
"deterministic_replay": sc.deterministic_replay,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
objects.append(obj)
|
||||||
|
|
||||||
return IRCube(objects=objects, morphisms=morphisms, plan_delta=plan_delta, dual_variables=dual)
|
return IRCube(objects=objects, morphisms=morphisms, plan_delta=plan_delta, dual_variables=dual)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue