mirror of https://github.com/home-assistant/core
91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
"""Test for the conversation traces."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components import conversation
|
|
from homeassistant.components.conversation import trace
|
|
from homeassistant.core import Context, HomeAssistant
|
|
from homeassistant.exceptions import HomeAssistantError
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
|
|
@pytest.fixture
|
|
async def init_components(hass: HomeAssistant):
|
|
"""Initialize relevant components with empty configs."""
|
|
assert await async_setup_component(hass, "homeassistant", {})
|
|
assert await async_setup_component(hass, "conversation", {})
|
|
assert await async_setup_component(hass, "intent", {})
|
|
|
|
|
|
async def test_converation_trace(
|
|
hass: HomeAssistant,
|
|
init_components: None,
|
|
sl_setup: None,
|
|
) -> None:
|
|
"""Test tracing a conversation."""
|
|
await conversation.async_converse(
|
|
hass, "add apples to my shopping list", None, Context()
|
|
)
|
|
|
|
traces = trace.async_get_traces()
|
|
assert traces
|
|
last_trace = traces[-1].as_dict()
|
|
assert last_trace.get("events")
|
|
assert len(last_trace.get("events")) == 2
|
|
trace_event = last_trace["events"][0]
|
|
assert (
|
|
trace_event.get("event_type") == trace.ConversationTraceEventType.ASYNC_PROCESS
|
|
)
|
|
assert trace_event.get("data")
|
|
assert trace_event["data"].get("text") == "add apples to my shopping list"
|
|
assert last_trace.get("result")
|
|
assert (
|
|
last_trace["result"]
|
|
.get("response", {})
|
|
.get("speech", {})
|
|
.get("plain", {})
|
|
.get("speech")
|
|
== "Added apples"
|
|
)
|
|
|
|
trace_event = last_trace["events"][1]
|
|
assert trace_event.get("event_type") == trace.ConversationTraceEventType.TOOL_CALL
|
|
assert trace_event.get("data") == {
|
|
"intent_name": "HassListAddItem",
|
|
"slots": {
|
|
"name": "Shopping List",
|
|
"item": "apples",
|
|
},
|
|
}
|
|
|
|
|
|
async def test_converation_trace_error(
|
|
hass: HomeAssistant,
|
|
init_components: None,
|
|
sl_setup: None,
|
|
) -> None:
|
|
"""Test tracing a conversation."""
|
|
with (
|
|
patch(
|
|
"homeassistant.components.conversation.default_agent.DefaultAgent.async_process",
|
|
side_effect=HomeAssistantError("Failed to talk to agent"),
|
|
),
|
|
pytest.raises(HomeAssistantError),
|
|
):
|
|
await conversation.async_converse(
|
|
hass, "add apples to my shopping list", None, Context()
|
|
)
|
|
|
|
traces = trace.async_get_traces()
|
|
assert traces
|
|
last_trace = traces[-1].as_dict()
|
|
assert last_trace.get("events")
|
|
assert len(last_trace.get("events")) == 1
|
|
trace_event = last_trace["events"][0]
|
|
assert (
|
|
trace_event.get("event_type") == trace.ConversationTraceEventType.ASYNC_PROCESS
|
|
)
|
|
assert last_trace.get("error") == "Failed to talk to agent"
|