Add "conversation" key to translations (#114887)

* Use translated trigger response

* Use conversation key instead
This commit is contained in:
Michael Hansen 2024-04-04 14:45:27 -05:00 committed by GitHub
parent cceea6dac2
commit 1c2499b03a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 63 additions and 5 deletions

View File

@ -269,20 +269,38 @@ class DefaultAgent(ConversationEntity):
for trigger_id, trigger_result in result.matched_triggers.items()
]
# Use last non-empty result as response.
# Use first non-empty result as response.
#
# There may be multiple copies of a trigger running when editing in
# the UI, so it's critical that we filter out empty responses here.
response_text: str | None = None
response_set_by_trigger = False
for trigger_future in asyncio.as_completed(trigger_callbacks):
if trigger_response := await trigger_future:
response_text = trigger_response
break
trigger_response = await trigger_future
if trigger_response is None:
continue
response_text = trigger_response
response_set_by_trigger = True
break
# Convert to conversation result
response = intent.IntentResponse(language=language)
response.response_type = intent.IntentResponseType.ACTION_DONE
response.async_set_speech(response_text or "Done")
if response_set_by_trigger:
# Response was explicitly set to empty
response_text = response_text or ""
elif not response_text:
# Use translated acknowledgment for pipeline language
translations = await translation.async_get_translations(
self.hass, language, DOMAIN, [DOMAIN]
)
response_text = translations.get(
f"component.{DOMAIN}.agent.done", "Done"
)
response.async_set_speech(response_text)
return ConversationResult(response=response)

View File

@ -37,5 +37,10 @@
}
}
}
},
"conversation": {
"agent": {
"done": "Done"
}
}
}

View File

@ -360,6 +360,11 @@ def gen_strings_schema(config: Config, integration: Integration) -> vol.Schema:
},
slug_validator=translation_key_validator,
),
vol.Optional("conversation"): {
vol.Required("agent"): {
vol.Required("done"): translation_value_validator,
},
},
}
)

View File

@ -104,6 +104,36 @@ async def test_response(hass: HomeAssistant, setup_comp) -> None:
assert service_response["response"]["speech"]["plain"]["speech"] == response
async def test_empty_response(hass: HomeAssistant, setup_comp) -> None:
"""Test the conversation response action with an empty response."""
assert await async_setup_component(
hass,
"automation",
{
"automation": {
"trigger": {
"platform": "conversation",
"command": ["Open the pod bay door Hal"],
},
"action": {
"set_conversation_response": "",
},
}
},
)
service_response = await hass.services.async_call(
"conversation",
"process",
{
"text": "Open the pod bay door Hal",
},
blocking=True,
return_response=True,
)
assert service_response["response"]["speech"]["plain"]["speech"] == ""
async def test_response_same_sentence(hass: HomeAssistant, calls, setup_comp) -> None:
"""Test the conversation response action with multiple triggers using the same sentence."""
assert await async_setup_component(