mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 00:37:53 +00:00
Include matching languages in WS stt/engine/list (#91731)
* Include matching languages in WS stt/engine/list * Allow specifying country
This commit is contained in:
parent
79de27a4a9
commit
768c499b6f
@ -413,6 +413,7 @@ def _metadata_from_header(request: web.Request) -> SpeechMetadata:
|
||||
{
|
||||
"type": "stt/engine/list",
|
||||
vol.Optional("language"): str,
|
||||
vol.Optional("country"): str,
|
||||
}
|
||||
)
|
||||
@callback
|
||||
@ -423,23 +424,30 @@ def websocket_list_engines(
|
||||
component: EntityComponent[SpeechToTextEntity] = hass.data[DOMAIN]
|
||||
legacy_providers: dict[str, Provider] = hass.data[DATA_PROVIDERS]
|
||||
|
||||
country = msg.get("country")
|
||||
language = msg.get("language")
|
||||
providers = []
|
||||
provider_info: dict[str, Any]
|
||||
|
||||
for entity in component.entities:
|
||||
provider_info = {"engine_id": entity.entity_id}
|
||||
provider_info = {
|
||||
"engine_id": entity.entity_id,
|
||||
"supported_languages": entity.supported_languages,
|
||||
}
|
||||
if language:
|
||||
provider_info["language_supported"] = bool(
|
||||
language_util.matches(language, entity.supported_languages)
|
||||
provider_info["supported_languages"] = language_util.matches(
|
||||
language, entity.supported_languages, country
|
||||
)
|
||||
providers.append(provider_info)
|
||||
|
||||
for engine_id, provider in legacy_providers.items():
|
||||
provider_info = {"engine_id": engine_id}
|
||||
provider_info = {
|
||||
"engine_id": engine_id,
|
||||
"supported_languages": provider.supported_languages,
|
||||
}
|
||||
if language:
|
||||
provider_info["language_supported"] = bool(
|
||||
language_util.matches(language, provider.supported_languages)
|
||||
provider_info["supported_languages"] = language_util.matches(
|
||||
language, provider.supported_languages, country
|
||||
)
|
||||
providers.append(provider_info)
|
||||
|
||||
|
@ -52,7 +52,7 @@ class BaseProvider:
|
||||
@property
|
||||
def supported_languages(self) -> list[str]:
|
||||
"""Return a list of supported languages."""
|
||||
return ["de-DE", "en-US"]
|
||||
return ["de", "de-CH", "en-US"]
|
||||
|
||||
@property
|
||||
def supported_formats(self) -> list[AudioFormats]:
|
||||
@ -213,7 +213,7 @@ async def test_get_provider_info(
|
||||
response = await client.get(f"/api/stt/{TEST_DOMAIN}")
|
||||
assert response.status == HTTPStatus.OK
|
||||
assert await response.json() == {
|
||||
"languages": ["de-DE", "en-US"],
|
||||
"languages": ["de", "de-CH", "en-US"],
|
||||
"formats": ["wav", "ogg"],
|
||||
"codecs": ["pcm", "opus"],
|
||||
"sample_rates": [16000],
|
||||
@ -398,14 +398,18 @@ async def test_ws_list_engines(
|
||||
|
||||
msg = await client.receive_json()
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {"providers": [{"engine_id": engine_id}]}
|
||||
assert msg["result"] == {
|
||||
"providers": [
|
||||
{"engine_id": engine_id, "supported_languages": ["de", "de-CH", "en-US"]}
|
||||
]
|
||||
}
|
||||
|
||||
await client.send_json_auto_id({"type": "stt/engine/list", "language": "smurfish"})
|
||||
|
||||
msg = await client.receive_json()
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {
|
||||
"providers": [{"engine_id": engine_id, "language_supported": False}]
|
||||
"providers": [{"engine_id": engine_id, "supported_languages": []}]
|
||||
}
|
||||
|
||||
await client.send_json_auto_id({"type": "stt/engine/list", "language": "en"})
|
||||
@ -413,7 +417,7 @@ async def test_ws_list_engines(
|
||||
msg = await client.receive_json()
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {
|
||||
"providers": [{"engine_id": engine_id, "language_supported": True}]
|
||||
"providers": [{"engine_id": engine_id, "supported_languages": ["en-US"]}]
|
||||
}
|
||||
|
||||
await client.send_json_auto_id({"type": "stt/engine/list", "language": "en-UK"})
|
||||
@ -421,5 +425,23 @@ async def test_ws_list_engines(
|
||||
msg = await client.receive_json()
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {
|
||||
"providers": [{"engine_id": engine_id, "language_supported": True}]
|
||||
"providers": [{"engine_id": engine_id, "supported_languages": ["en-US"]}]
|
||||
}
|
||||
|
||||
await client.send_json_auto_id({"type": "stt/engine/list", "language": "de"})
|
||||
msg = await client.receive_json()
|
||||
assert msg["type"] == "result"
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {
|
||||
"providers": [{"engine_id": engine_id, "supported_languages": ["de", "de-CH"]}]
|
||||
}
|
||||
|
||||
await client.send_json_auto_id(
|
||||
{"type": "stt/engine/list", "language": "de", "country": "ch"}
|
||||
)
|
||||
msg = await client.receive_json()
|
||||
assert msg["type"] == "result"
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {
|
||||
"providers": [{"engine_id": engine_id, "supported_languages": ["de", "de-CH"]}]
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user