build(agent): molt-y#23e5c8 iteration

This commit is contained in:
agent-23e5c897f40fd19e 2026-04-15 20:01:26 +02:00
parent ace7978a08
commit 54139a54a4
3 changed files with 109 additions and 1 deletions

View File

@ -2,9 +2,18 @@
from .catopt_bridge import CatOptBridge
from .contract_registry import REGISTRY, register_contract, get_contract
from .reference_adapters import RoverPlannerAdapter, HabitatLifeSupportAdapter
def add(a, b):
"""Tiny compatibility helper used by tests."""
return a + b
__all__ = ["CatOptBridge", "REGISTRY", "register_contract", "get_contract", "add"]
__all__ = [
"CatOptBridge",
"REGISTRY",
"register_contract",
"get_contract",
"RoverPlannerAdapter",
"HabitatLifeSupportAdapter",
"add",
]

View File

@ -0,0 +1,75 @@
"""Reference adapters for CosmosMesh CatOpt MVP.
Two toy adapters illustrate how a rover planner and habitat life-support
module could interface with the CatOpt bridge. These are intentionally
lightweight, pure-Python stubs intended for MVP testing and demonstration.
"""
from __future__ import annotations
from typing import Any, Dict
class BaseAdapter:
def __init__(self, name: str) -> None:
self.name = name
def readState(self) -> Dict[str, Any]: # pragma: no cover - interface only
raise NotImplementedError
def exposeLocalProblemData(self) -> Dict[str, Any]: # pragma: no cover
raise NotImplementedError
def applyCommand(self, command: Dict[str, Any]) -> Dict[str, Any]: # pragma: no cover
raise NotImplementedError
class RoverPlannerAdapter(BaseAdapter):
"""Toy rover planner adapter.
This adapter exposes a very small LocalProblem-like payload and can
accept simple commands. It serves as a scaffold for a real rover-planner
integration.
"""
def __init__(self) -> None:
super().__init__("rover-planner")
def readState(self) -> Dict[str, Any]:
return {"rover": {"id": "rover-1", "status": "idle"}}
def exposeLocalProblemData(self) -> Dict[str, Any]:
return {
"name": "RoverTask",
"variables": [{"name": "x", "domain": "R"}],
"objective": {"type": "quadratic"},
"constraints": [],
}
def applyCommand(self, command: Dict[str, Any]) -> Dict[str, Any]:
# Echo back a simple acknowledgement for the MVP
return {"adapter": self.name, "status": "accepted", "command": command}
class HabitatLifeSupportAdapter(BaseAdapter):
"""Toy habitat life-support adapter.
Lightweight stand-in for a habitat module scheduler interface.
"""
def __init__(self) -> None:
super().__init__("habitat-life-support")
def readState(self) -> Dict[str, Any]:
return {"habitat": {"id": "hab-1", "status": "idle"}}
def exposeLocalProblemData(self) -> Dict[str, Any]:
return {
"name": "HabitatTask",
"variables": [{"name": "p_supply", "domain": "R"}],
"objective": {"type": "quadratic"},
"constraints": [],
}
def applyCommand(self, command: Dict[str, Any]) -> Dict[str, Any]:
return {"adapter": self.name, "status": "accepted", "command": command}

24
tests/test_adapters.py Normal file
View File

@ -0,0 +1,24 @@
import pytest
from cosmosmesh_privacy_preserving_federated_.reference_adapters import (
RoverPlannerAdapter,
HabitatLifeSupportAdapter,
)
def test_rover_adapter_basic():
rover = RoverPlannerAdapter()
assert isinstance(rover.readState(), dict)
data = rover.exposeLocalProblemData()
assert isinstance(data, dict)
resp = rover.applyCommand({"cmd": "test"})
assert resp.get("status") == "accepted"
def test_habitat_adapter_basic():
hab = HabitatLifeSupportAdapter()
assert isinstance(hab.readState(), dict)
data = hab.exposeLocalProblemData()
assert isinstance(data, dict)
resp = hab.applyCommand({"cmd": "test"})
assert resp.get("status") == "accepted"