Skip to content

Commit

Permalink
Add conversation agent selector, use in conversation.process service (
Browse files Browse the repository at this point in the history
  • Loading branch information
bramkragten committed Jun 29, 2023
1 parent 1a6c32f commit a7dfe46
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 1 deletion.
2 changes: 1 addition & 1 deletion homeassistant/components/conversation/services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ process:
description: Assist engine to process your request
example: homeassistant
selector:
text:
conversation_agent:
28 changes: 28 additions & 0 deletions homeassistant/helpers/selector.py
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,34 @@ def __call__(self, data: Any) -> Any:
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."""

Expand Down
22 changes: 22 additions & 0 deletions tests/helpers/test_selector.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

0 comments on commit a7dfe46

Please sign in to comment.