2026-09-03 00:10:18 +04:00

47 lines
1.1 KiB
Python

"""Robot adapter registry.
Adding a robot (AgiBot X2, another vendor, a different TTS backend) means writing
one adapter and adding one line here. Nothing above this layer changes.
"""
from __future__ import annotations
from typing import Callable, Dict
from ..config.settings import Settings
from .base import RobotAdapter, RobotError
def _mock(settings: Settings) -> RobotAdapter:
from .mock_robot import MockRobot
return MockRobot(settings)
def _agibot_a3(settings: Settings) -> RobotAdapter:
from .agibot_a3 import AgibotA3
return AgibotA3(settings)
_REGISTRY: Dict[str, Callable[[Settings], RobotAdapter]] = {
"mock": _mock,
"real": _agibot_a3,
}
def available_modes() -> list:
return sorted(_REGISTRY)
def create_robot(settings: Settings) -> RobotAdapter:
builder = _REGISTRY.get(settings.robot.mode)
if builder is None:
raise RobotError(
"unknown ROBOT_MODE '{0}'".format(settings.robot.mode),
user_message="Unknown ROBOT_MODE '{0}'. Valid values: {1}.".format(
settings.robot.mode, ", ".join(available_modes())
),
)
return builder(settings)