1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-21 03:20:01 +00:00
Files
core/homeassistant/components/conversation/util.py

48 lines
1.5 KiB
Python

"""Utility functions for conversation integration."""
from __future__ import annotations
import logging
from homeassistant.core import callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import intent, llm
from .chat_log import AssistantContent, ChatLog, ToolResultContent
from .models import ConversationInput, ConversationResult
_LOGGER = logging.getLogger(__name__)
@callback
def async_get_result_from_chat_log(
user_input: ConversationInput, chat_log: ChatLog
) -> ConversationResult:
"""Get the result from the chat log."""
tool_results = [
content.tool_result
for content in chat_log.content[chat_log.llm_input_provided_index :]
if isinstance(content, ToolResultContent)
and isinstance(content.tool_result, llm.IntentResponseDict)
]
if tool_results:
intent_response = tool_results[-1].original
else:
intent_response = intent.IntentResponse(language=user_input.language)
if not isinstance((last_content := chat_log.content[-1]), AssistantContent):
_LOGGER.error(
"Last content in chat log is not an AssistantContent: %s. This could be due to the model not returning a valid response",
last_content,
)
raise HomeAssistantError("Unable to get response")
intent_response.async_set_speech(last_content.content or "")
return ConversationResult(
response=intent_response,
conversation_id=chat_log.conversation_id,
continue_conversation=chat_log.continue_conversation,
)