mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Add conversation_id parameter to conversation.process service (#106078)
* Add conversation_id parameter to conversation.process service * fix test * fix tests
This commit is contained in:
parent
34e6fa3328
commit
99bcc38284
@ -42,6 +42,7 @@ _LOGGER = logging.getLogger(__name__)
|
|||||||
ATTR_TEXT = "text"
|
ATTR_TEXT = "text"
|
||||||
ATTR_LANGUAGE = "language"
|
ATTR_LANGUAGE = "language"
|
||||||
ATTR_AGENT_ID = "agent_id"
|
ATTR_AGENT_ID = "agent_id"
|
||||||
|
ATTR_CONVERSATION_ID = "conversation_id"
|
||||||
|
|
||||||
DOMAIN = "conversation"
|
DOMAIN = "conversation"
|
||||||
|
|
||||||
@ -66,6 +67,7 @@ SERVICE_PROCESS_SCHEMA = vol.Schema(
|
|||||||
vol.Required(ATTR_TEXT): cv.string,
|
vol.Required(ATTR_TEXT): cv.string,
|
||||||
vol.Optional(ATTR_LANGUAGE): cv.string,
|
vol.Optional(ATTR_LANGUAGE): cv.string,
|
||||||
vol.Optional(ATTR_AGENT_ID): agent_id_validator,
|
vol.Optional(ATTR_AGENT_ID): agent_id_validator,
|
||||||
|
vol.Optional(ATTR_CONVERSATION_ID): cv.string,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -164,7 +166,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
result = await async_converse(
|
result = await async_converse(
|
||||||
hass=hass,
|
hass=hass,
|
||||||
text=text,
|
text=text,
|
||||||
conversation_id=None,
|
conversation_id=service.data.get(ATTR_CONVERSATION_ID),
|
||||||
context=service.context,
|
context=service.context,
|
||||||
language=service.data.get(ATTR_LANGUAGE),
|
language=service.data.get(ATTR_LANGUAGE),
|
||||||
agent_id=service.data.get(ATTR_AGENT_ID),
|
agent_id=service.data.get(ATTR_AGENT_ID),
|
||||||
|
@ -14,6 +14,10 @@ process:
|
|||||||
example: homeassistant
|
example: homeassistant
|
||||||
selector:
|
selector:
|
||||||
conversation_agent:
|
conversation_agent:
|
||||||
|
conversation_id:
|
||||||
|
example: my_conversation_1
|
||||||
|
selector:
|
||||||
|
text:
|
||||||
|
|
||||||
reload:
|
reload:
|
||||||
fields:
|
fields:
|
||||||
|
@ -16,6 +16,10 @@
|
|||||||
"agent_id": {
|
"agent_id": {
|
||||||
"name": "Agent",
|
"name": "Agent",
|
||||||
"description": "Conversation agent to process your request. The conversation agent is the brains of your assistant. It processes the incoming text commands."
|
"description": "Conversation agent to process your request. The conversation agent is the brains of your assistant. It processes the incoming text commands."
|
||||||
|
},
|
||||||
|
"conversation_id": {
|
||||||
|
"name": "Conversation ID",
|
||||||
|
"description": "ID of the conversation, to be able to continue a previous conversation"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -225,7 +225,7 @@
|
|||||||
]),
|
]),
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_turn_on_intent[turn kitchen on-None]
|
# name: test_turn_on_intent[None-turn kitchen on-None]
|
||||||
dict({
|
dict({
|
||||||
'conversation_id': None,
|
'conversation_id': None,
|
||||||
'response': dict({
|
'response': dict({
|
||||||
@ -255,7 +255,7 @@
|
|||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_turn_on_intent[turn kitchen on-homeassistant]
|
# name: test_turn_on_intent[None-turn kitchen on-homeassistant]
|
||||||
dict({
|
dict({
|
||||||
'conversation_id': None,
|
'conversation_id': None,
|
||||||
'response': dict({
|
'response': dict({
|
||||||
@ -285,7 +285,7 @@
|
|||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_turn_on_intent[turn on kitchen-None]
|
# name: test_turn_on_intent[None-turn on kitchen-None]
|
||||||
dict({
|
dict({
|
||||||
'conversation_id': None,
|
'conversation_id': None,
|
||||||
'response': dict({
|
'response': dict({
|
||||||
@ -315,7 +315,127 @@
|
|||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_turn_on_intent[turn on kitchen-homeassistant]
|
# name: test_turn_on_intent[None-turn on kitchen-homeassistant]
|
||||||
|
dict({
|
||||||
|
'conversation_id': None,
|
||||||
|
'response': dict({
|
||||||
|
'card': dict({
|
||||||
|
}),
|
||||||
|
'data': dict({
|
||||||
|
'failed': list([
|
||||||
|
]),
|
||||||
|
'success': list([
|
||||||
|
dict({
|
||||||
|
'id': 'light.kitchen',
|
||||||
|
'name': 'kitchen',
|
||||||
|
'type': <IntentResponseTargetType.ENTITY: 'entity'>,
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
'targets': list([
|
||||||
|
]),
|
||||||
|
}),
|
||||||
|
'language': 'en',
|
||||||
|
'response_type': 'action_done',
|
||||||
|
'speech': dict({
|
||||||
|
'plain': dict({
|
||||||
|
'extra_data': None,
|
||||||
|
'speech': 'Turned on light',
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
# ---
|
||||||
|
# name: test_turn_on_intent[my_new_conversation-turn kitchen on-None]
|
||||||
|
dict({
|
||||||
|
'conversation_id': None,
|
||||||
|
'response': dict({
|
||||||
|
'card': dict({
|
||||||
|
}),
|
||||||
|
'data': dict({
|
||||||
|
'failed': list([
|
||||||
|
]),
|
||||||
|
'success': list([
|
||||||
|
dict({
|
||||||
|
'id': 'light.kitchen',
|
||||||
|
'name': 'kitchen',
|
||||||
|
'type': <IntentResponseTargetType.ENTITY: 'entity'>,
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
'targets': list([
|
||||||
|
]),
|
||||||
|
}),
|
||||||
|
'language': 'en',
|
||||||
|
'response_type': 'action_done',
|
||||||
|
'speech': dict({
|
||||||
|
'plain': dict({
|
||||||
|
'extra_data': None,
|
||||||
|
'speech': 'Turned on light',
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
# ---
|
||||||
|
# name: test_turn_on_intent[my_new_conversation-turn kitchen on-homeassistant]
|
||||||
|
dict({
|
||||||
|
'conversation_id': None,
|
||||||
|
'response': dict({
|
||||||
|
'card': dict({
|
||||||
|
}),
|
||||||
|
'data': dict({
|
||||||
|
'failed': list([
|
||||||
|
]),
|
||||||
|
'success': list([
|
||||||
|
dict({
|
||||||
|
'id': 'light.kitchen',
|
||||||
|
'name': 'kitchen',
|
||||||
|
'type': <IntentResponseTargetType.ENTITY: 'entity'>,
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
'targets': list([
|
||||||
|
]),
|
||||||
|
}),
|
||||||
|
'language': 'en',
|
||||||
|
'response_type': 'action_done',
|
||||||
|
'speech': dict({
|
||||||
|
'plain': dict({
|
||||||
|
'extra_data': None,
|
||||||
|
'speech': 'Turned on light',
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
# ---
|
||||||
|
# name: test_turn_on_intent[my_new_conversation-turn on kitchen-None]
|
||||||
|
dict({
|
||||||
|
'conversation_id': None,
|
||||||
|
'response': dict({
|
||||||
|
'card': dict({
|
||||||
|
}),
|
||||||
|
'data': dict({
|
||||||
|
'failed': list([
|
||||||
|
]),
|
||||||
|
'success': list([
|
||||||
|
dict({
|
||||||
|
'id': 'light.kitchen',
|
||||||
|
'name': 'kitchen',
|
||||||
|
'type': <IntentResponseTargetType.ENTITY: 'entity'>,
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
'targets': list([
|
||||||
|
]),
|
||||||
|
}),
|
||||||
|
'language': 'en',
|
||||||
|
'response_type': 'action_done',
|
||||||
|
'speech': dict({
|
||||||
|
'plain': dict({
|
||||||
|
'extra_data': None,
|
||||||
|
'speech': 'Turned on light',
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
# ---
|
||||||
|
# name: test_turn_on_intent[my_new_conversation-turn on kitchen-homeassistant]
|
||||||
dict({
|
dict({
|
||||||
'conversation_id': None,
|
'conversation_id': None,
|
||||||
'response': dict({
|
'response': dict({
|
||||||
|
@ -873,8 +873,9 @@ async def test_http_processing_intent_conversion_not_expose_new(
|
|||||||
|
|
||||||
@pytest.mark.parametrize("agent_id", AGENT_ID_OPTIONS)
|
@pytest.mark.parametrize("agent_id", AGENT_ID_OPTIONS)
|
||||||
@pytest.mark.parametrize("sentence", ("turn on kitchen", "turn kitchen on"))
|
@pytest.mark.parametrize("sentence", ("turn on kitchen", "turn kitchen on"))
|
||||||
|
@pytest.mark.parametrize("conversation_id", ("my_new_conversation", None))
|
||||||
async def test_turn_on_intent(
|
async def test_turn_on_intent(
|
||||||
hass: HomeAssistant, init_components, sentence, agent_id, snapshot
|
hass: HomeAssistant, init_components, conversation_id, sentence, agent_id, snapshot
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test calling the turn on intent."""
|
"""Test calling the turn on intent."""
|
||||||
hass.states.async_set("light.kitchen", "off")
|
hass.states.async_set("light.kitchen", "off")
|
||||||
@ -883,6 +884,8 @@ async def test_turn_on_intent(
|
|||||||
data = {conversation.ATTR_TEXT: sentence}
|
data = {conversation.ATTR_TEXT: sentence}
|
||||||
if agent_id is not None:
|
if agent_id is not None:
|
||||||
data[conversation.ATTR_AGENT_ID] = agent_id
|
data[conversation.ATTR_AGENT_ID] = agent_id
|
||||||
|
if conversation_id is not None:
|
||||||
|
data[conversation.ATTR_CONVERSATION_ID] = conversation_id
|
||||||
result = await hass.services.async_call(
|
result = await hass.services.async_call(
|
||||||
"conversation",
|
"conversation",
|
||||||
"process",
|
"process",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user