feat(hass): 新增小爱音箱接入 Home Assistant Assist 的完整示例
- 新增完整的 Home Assistant 集成示例,支持文本对话与上下文会话 - 实现小爱音箱事件解析与 TTS 播报,支持实时打断功能 - 添加连续会话管理,支持区域上下文注入和会话超时结束 - 提供完整的配置系统、类型定义和错误处理 - 包含 Rust 扩展模块用于小爱音箱通信,支持音频流处理 - 添加单元测试、集成测试脚本和 Docker 部署支持 - 提供详细的使用文档和配置说明
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import asyncio
|
||||
|
||||
import pytest
|
||||
|
||||
from hass_assistant import ConversationSession
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_session_idle_timeout_triggers_end():
|
||||
session = ConversationSession(
|
||||
enabled=True,
|
||||
idle_timeout_seconds=1,
|
||||
end_keywords=["再见", "拜拜", "滚", "退下"],
|
||||
)
|
||||
|
||||
triggered = {"value": False}
|
||||
|
||||
async def on_timeout():
|
||||
triggered["value"] = True
|
||||
|
||||
session.restart_idle_timer(on_timeout)
|
||||
await asyncio.sleep(1.2)
|
||||
|
||||
assert triggered["value"] is True
|
||||
await session.close()
|
||||
|
||||
|
||||
def test_session_end_keyword_contains_match():
|
||||
session = ConversationSession(
|
||||
enabled=True,
|
||||
idle_timeout_seconds=15,
|
||||
end_keywords=["再见", "拜拜", "滚", "退下"],
|
||||
)
|
||||
|
||||
assert session.match_end_keyword("那就先这样吧,再见哈") == "再见"
|
||||
assert session.match_end_keyword("你先退下吧") == "退下"
|
||||
assert session.match_end_keyword("继续聊聊") is None
|
||||
|
||||
|
||||
def test_session_area_mapping_hit_and_miss():
|
||||
session = ConversationSession(
|
||||
enabled=True,
|
||||
idle_timeout_seconds=15,
|
||||
end_keywords=["再见"],
|
||||
)
|
||||
|
||||
mapping = {"192.168.1.101": "客厅"}
|
||||
assert session.resolve_area("192.168.1.101", mapping) == "客厅"
|
||||
assert session.resolve_area("192.168.1.102", mapping) is None
|
||||
assert session.resolve_area(None, mapping) is None
|
||||
|
||||
prefix = session.build_area_prefix("客厅")
|
||||
assert "当前用户对话所在区域:客厅" in prefix
|
||||
Reference in New Issue
Block a user