39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
"""Toy habitat module adapter.
|
|
|
|
The HabitatAdapter provides a simple mapping for habitat-style LocalProblem
|
|
instances and produces small PlanDelta objects. It serves as a complementary
|
|
example adapter to the rover planner.
|
|
"""
|
|
from dataclasses import dataclass
|
|
from typing import Dict, Any
|
|
|
|
from ..core import LocalProblem, PlanDelta
|
|
|
|
|
|
@dataclass
|
|
class HabitatAdapter:
|
|
name: str = "habitat_module"
|
|
|
|
def to_canonical(self, lp: LocalProblem) -> Dict[str, Any]:
|
|
return {
|
|
"adapter": self.name,
|
|
"id": lp.id,
|
|
"domain": lp.domain,
|
|
"assets_count": len(lp.assets or {}),
|
|
"constraints": lp.constraints,
|
|
}
|
|
|
|
def propose_delta(self, lp: LocalProblem, author: str = "habitat") -> PlanDelta:
|
|
# Simple policy: if any safety constraint mentions 'no_move', emit
|
|
# a delta that pauses movement; otherwise, propose a nominal plan.
|
|
delta = {}
|
|
for c in lp.constraints:
|
|
if "no_move" in c:
|
|
delta["action"] = "pause"
|
|
delta["reason"] = "safety_constraint"
|
|
break
|
|
else:
|
|
delta["action"] = "nominal"
|
|
|
|
return PlanDelta(delta=delta, author=author, contract_id=lp.id)
|