Update project and configurations
This commit is contained in:
1
intelligent_cabin/app/plugins/__init__.py
Normal file
1
intelligent_cabin/app/plugins/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Plugin adapters for the agent service."""
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
intelligent_cabin/app/plugins/__pycache__/base.cpython-311.pyc
Normal file
BIN
intelligent_cabin/app/plugins/__pycache__/base.cpython-311.pyc
Normal file
Binary file not shown.
BIN
intelligent_cabin/app/plugins/__pycache__/base.cpython-312.pyc
Normal file
BIN
intelligent_cabin/app/plugins/__pycache__/base.cpython-312.pyc
Normal file
Binary file not shown.
BIN
intelligent_cabin/app/plugins/__pycache__/base.cpython-313.pyc
Normal file
BIN
intelligent_cabin/app/plugins/__pycache__/base.cpython-313.pyc
Normal file
Binary file not shown.
BIN
intelligent_cabin/app/plugins/__pycache__/mock.cpython-311.pyc
Normal file
BIN
intelligent_cabin/app/plugins/__pycache__/mock.cpython-311.pyc
Normal file
Binary file not shown.
BIN
intelligent_cabin/app/plugins/__pycache__/mock.cpython-312.pyc
Normal file
BIN
intelligent_cabin/app/plugins/__pycache__/mock.cpython-312.pyc
Normal file
Binary file not shown.
BIN
intelligent_cabin/app/plugins/__pycache__/mock.cpython-313.pyc
Normal file
BIN
intelligent_cabin/app/plugins/__pycache__/mock.cpython-313.pyc
Normal file
Binary file not shown.
27
intelligent_cabin/app/plugins/base.py
Normal file
27
intelligent_cabin/app/plugins/base.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Callable
|
||||
from typing import Any
|
||||
|
||||
PluginHandler = Callable[[dict[str, Any]], dict[str, Any]]
|
||||
|
||||
|
||||
class PluginRegistry:
|
||||
def __init__(self) -> None:
|
||||
self._handlers: dict[str, PluginHandler] = {}
|
||||
|
||||
def register(self, plugin_id: str, handler: PluginHandler) -> None:
|
||||
self._handlers[plugin_id] = handler
|
||||
|
||||
def execute(self, plugin_id: str, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
handler = self._handlers.get(plugin_id)
|
||||
if handler is None:
|
||||
return {
|
||||
"success": False,
|
||||
"message": f"插件 {plugin_id} 未注册。",
|
||||
"data": {"plugin_id": plugin_id, "slots": slots},
|
||||
}
|
||||
return handler(slots)
|
||||
|
||||
def registered_plugins(self) -> list[str]:
|
||||
return sorted(self._handlers.keys())
|
||||
216
intelligent_cabin/app/plugins/mock.py
Normal file
216
intelligent_cabin/app/plugins/mock.py
Normal file
@@ -0,0 +1,216 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from app.plugins.base import PluginRegistry
|
||||
|
||||
|
||||
class MockPluginExecutor:
|
||||
def register(self, registry: PluginRegistry) -> PluginRegistry:
|
||||
registry.register("plugin.order.query", self._query_order)
|
||||
registry.register("plugin.logistics.query", self._query_logistics)
|
||||
registry.register("plugin.order.cancel", self._cancel_order)
|
||||
registry.register("plugin.service.transfer_human", self._transfer_human)
|
||||
registry.register("plugin.cabin.navigation.cancel", self._navigate_cancel)
|
||||
registry.register("plugin.cabin.navigation", self._navigate)
|
||||
registry.register("plugin.cabin.ac.on", self._ac_on)
|
||||
registry.register("plugin.cabin.ac.off", self._ac_off)
|
||||
registry.register("plugin.cabin.ac_control", self._set_ac)
|
||||
registry.register("plugin.cabin.fan.up", self._fan_up)
|
||||
registry.register("plugin.cabin.fan.down", self._fan_down)
|
||||
registry.register("plugin.cabin.defog.front_on", self._defog_front_on)
|
||||
registry.register("plugin.cabin.defog.rear_on", self._defog_rear_on)
|
||||
registry.register("plugin.cabin.window.open", self._window_open)
|
||||
registry.register("plugin.cabin.window.close", self._window_close)
|
||||
registry.register("plugin.cabin.sunroof.open", self._sunroof_open)
|
||||
registry.register("plugin.cabin.sunroof.close", self._sunroof_close)
|
||||
registry.register("plugin.cabin.doors.lock", self._lock_doors)
|
||||
registry.register("plugin.cabin.doors.unlock", self._unlock_doors)
|
||||
registry.register("plugin.cabin.music_play", self._play_music)
|
||||
registry.register("plugin.cabin.music.pause", self._pause_music)
|
||||
registry.register("plugin.cabin.music.next", self._next_track)
|
||||
registry.register("plugin.cabin.music.previous", self._previous_track)
|
||||
registry.register("plugin.cabin.volume.up", self._volume_up)
|
||||
registry.register("plugin.cabin.volume.down", self._volume_down)
|
||||
registry.register("plugin.cabin.volume.mute", self._volume_mute)
|
||||
registry.register("plugin.cabin.lights.on", self._lights_on)
|
||||
registry.register("plugin.cabin.lights.off", self._lights_off)
|
||||
registry.register("plugin.cabin.seat_heat.on", self._seat_heat_on)
|
||||
registry.register("plugin.cabin.seat_heat.off", self._seat_heat_off)
|
||||
registry.register("plugin.cabin.mirror.fold", self._mirror_fold)
|
||||
registry.register("plugin.cabin.mirror.unfold", self._mirror_unfold)
|
||||
registry.register("plugin.cabin.wiper.on", self._wiper_on)
|
||||
registry.register("plugin.cabin.wiper.off", self._wiper_off)
|
||||
return registry
|
||||
|
||||
def _query_order(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"订单 {slots['order_id']} 当前待发货。",
|
||||
"data": {"order_status": "pending_shipment"},
|
||||
}
|
||||
|
||||
def _query_logistics(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"订单 {slots['order_id']} 最新物流状态为运输中。",
|
||||
"data": {"logistics_status": "shipping"},
|
||||
}
|
||||
|
||||
def _cancel_order(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"订单 {slots['order_id']} 已取消。",
|
||||
"data": {"cancel_status": "cancelled"},
|
||||
}
|
||||
|
||||
def _transfer_human(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
return {
|
||||
"success": True,
|
||||
"message": "已为你转接人工客服,请稍候。",
|
||||
"data": {"queue_no": "A12", "reason": slots.get("reason", "用户请求")},
|
||||
}
|
||||
|
||||
def _navigate(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"已开始导航到 {slots['destination']}。",
|
||||
"data": {"route_id": "route_001", "destination": slots["destination"]},
|
||||
}
|
||||
|
||||
def _navigate_cancel(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已结束当前导航。", {"navigation": "stopped"})
|
||||
|
||||
def _ac_on(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已打开空调。", {"power": "on"})
|
||||
|
||||
def _ac_off(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已关闭空调。", {"power": "off"})
|
||||
|
||||
def _set_ac(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"已将空调调到 {slots['temperature']} 度。",
|
||||
"data": {"temperature": slots["temperature"]},
|
||||
}
|
||||
|
||||
def _fan_up(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已调大风量。", {"fan": "up"})
|
||||
|
||||
def _fan_down(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已调小风量。", {"fan": "down"})
|
||||
|
||||
def _defog_front_on(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已打开前挡除雾。", {"defog": "front_on"})
|
||||
|
||||
def _defog_rear_on(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已打开后挡除雾。", {"defog": "rear_on"})
|
||||
|
||||
def _window_open(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已打开车窗。", {"window": "open"})
|
||||
|
||||
def _window_close(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已关闭车窗。", {"window": "close"})
|
||||
|
||||
def _sunroof_open(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已打开天窗。", {"sunroof": "open"})
|
||||
|
||||
def _sunroof_close(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已关闭天窗。", {"sunroof": "close"})
|
||||
|
||||
def _lock_doors(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已锁定车门。", {"doors": "locked"})
|
||||
|
||||
def _unlock_doors(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已解锁车门。", {"doors": "unlocked"})
|
||||
|
||||
def _play_music(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
target = slots.get("song") or slots.get("genre") or "默认歌单"
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"正在播放 {target}。",
|
||||
"data": {"play_target": target},
|
||||
}
|
||||
|
||||
def _pause_music(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已暂停播放。", {"music": "paused"})
|
||||
|
||||
def _next_track(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已切到下一首。", {"music": "next"})
|
||||
|
||||
def _previous_track(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已切到上一首。", {"music": "previous"})
|
||||
|
||||
def _volume_up(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已调大音量。", {"volume": "up"})
|
||||
|
||||
def _volume_down(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已调小音量。", {"volume": "down"})
|
||||
|
||||
def _volume_mute(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已静音。", {"volume": "mute"})
|
||||
|
||||
def _lights_on(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已打开车灯。", {"lights": "on"})
|
||||
|
||||
def _lights_off(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已关闭车灯。", {"lights": "off"})
|
||||
|
||||
def _seat_heat_on(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已打开座椅加热。", {"seat_heat": "on"})
|
||||
|
||||
def _seat_heat_off(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已关闭座椅加热。", {"seat_heat": "off"})
|
||||
|
||||
def _mirror_fold(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已折叠后视镜。", {"mirror": "folded"})
|
||||
|
||||
def _mirror_unfold(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已展开后视镜。", {"mirror": "unfolded"})
|
||||
|
||||
def _wiper_on(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已打开雨刷。", {"wiper": "on"})
|
||||
|
||||
def _wiper_off(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
_ = slots
|
||||
return self._simple_action("好的,已关闭雨刷。", {"wiper": "off"})
|
||||
|
||||
def _fallback(self, slots: dict[str, Any]) -> dict[str, Any]:
|
||||
return {
|
||||
"success": True,
|
||||
"message": "已接收请求,当前使用 mock 插件返回成功结果。",
|
||||
"data": slots,
|
||||
}
|
||||
|
||||
def _simple_action(self, message: str, data: dict[str, Any]) -> dict[str, Any]:
|
||||
return {
|
||||
"success": True,
|
||||
"message": message,
|
||||
"data": data,
|
||||
}
|
||||
Reference in New Issue
Block a user