Add conversation agent selector, use in conversation.process service (#95462)

This commit is contained in:
Bram Kragten 2023-06-29 03:38:06 +02:00 committed by GitHub
parent 1a6c32f8e9
commit a7dfe46fb1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 1 deletions

View file

@ -20,4 +20,4 @@ process:
description: Assist engine to process your request
example: homeassistant
selector:
text:
conversation_agent:

View file

@ -500,6 +500,34 @@ class ConstantSelector(Selector[ConstantSelectorConfig]):
return self.config["value"]
class ConversationAgentSelectorConfig(TypedDict, total=False):
"""Class to represent a conversation agent selector config."""
language: str
@SELECTORS.register("conversation_agent")
class COnversationAgentSelector(Selector[ConversationAgentSelectorConfig]):
"""Selector for a conversation agent."""
selector_type = "conversation_agent"
CONFIG_SCHEMA = vol.Schema(
{
vol.Optional("language"): str,
}
)
def __init__(self, config: ConversationAgentSelectorConfig) -> None:
"""Instantiate a selector."""
super().__init__(config)
def __call__(self, data: Any) -> str:
"""Validate the passed selection."""
agent: str = vol.Schema(str)(data)
return agent
class DateSelectorConfig(TypedDict):
"""Class to represent a date selector config."""

View file

@ -979,3 +979,25 @@ def test_constant_selector_schema_error(schema) -> None:
"""Test constant selector."""
with pytest.raises(vol.Invalid):
selector.validate_selector({"constant": schema})
@pytest.mark.parametrize(
("schema", "valid_selections", "invalid_selections"),
(
(
{},
("home_assistant", "2j4hp3uy4p87wyrpiuhk34"),
(None, True, 1),
),
(
{"language": "nl"},
("home_assistant", "2j4hp3uy4p87wyrpiuhk34"),
(None, True, 1),
),
),
)
def test_conversation_agent_selector_schema(
schema, valid_selections, invalid_selections
) -> None:
"""Test conversation agent selector."""
_test_selector("conversation_agent", schema, valid_selections, invalid_selections)