mirror of
https://github.com/elisspace/core.git
synced 2026-09-28 05:19:54 +00:00
* Add language to conversation and intent response * Move language to intent response instead of speech * Extend intent response for voice MVP * Add tests for error conditions in conversation/process * Move intent response type data into "data" field * Move intent response error message back to speech * Remove "success" from intent response * Add id to target in intent response * target defaults to None * Update homeassistant/helpers/intent.py * Fix test * Return conversation_id and multiple targets * Clean up git mess * Fix linting errors * Fix more async_handle signatures * Separate conversation_id and IntentResponse * Add unknown error code * Add ConversationResult * Don't set domain on single entity * Language is required for intent response * Add partial_action_done * Default language in almond agent Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
52 lines
1.2 KiB
Python
52 lines
1.2 KiB
Python
"""Agent foundation for conversation integration."""
|
|
from __future__ import annotations
|
|
|
|
from abc import ABC, abstractmethod
|
|
from dataclasses import dataclass
|
|
from typing import Any
|
|
|
|
from homeassistant.core import Context
|
|
from homeassistant.helpers import intent
|
|
|
|
|
|
@dataclass
|
|
class ConversationResult:
|
|
"""Result of async_process."""
|
|
|
|
response: intent.IntentResponse
|
|
conversation_id: str | None = None
|
|
|
|
def as_dict(self) -> dict[str, Any]:
|
|
"""Return result as a dict."""
|
|
return {
|
|
"response": self.response.as_dict(),
|
|
"conversation_id": self.conversation_id,
|
|
}
|
|
|
|
|
|
class AbstractConversationAgent(ABC):
|
|
"""Abstract conversation agent."""
|
|
|
|
@property
|
|
def attribution(self):
|
|
"""Return the attribution."""
|
|
return None
|
|
|
|
async def async_get_onboarding(self):
|
|
"""Get onboard data."""
|
|
return None
|
|
|
|
async def async_set_onboarding(self, shown):
|
|
"""Set onboard data."""
|
|
return True
|
|
|
|
@abstractmethod
|
|
async def async_process(
|
|
self,
|
|
text: str,
|
|
context: Context,
|
|
conversation_id: str | None = None,
|
|
language: str | None = None,
|
|
) -> ConversationResult | None:
|
|
"""Process a sentence."""
|