mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +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",
|
"type": "stt/engine/list",
|
||||||
vol.Optional("language"): str,
|
vol.Optional("language"): str,
|
||||||
|
vol.Optional("country"): str,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@callback
|
@callback
|
||||||
@ -423,23 +424,30 @@ def websocket_list_engines(
|
|||||||
component: EntityComponent[SpeechToTextEntity] = hass.data[DOMAIN]
|
component: EntityComponent[SpeechToTextEntity] = hass.data[DOMAIN]
|
||||||
legacy_providers: dict[str, Provider] = hass.data[DATA_PROVIDERS]
|
legacy_providers: dict[str, Provider] = hass.data[DATA_PROVIDERS]
|
||||||
|
|
||||||
|
country = msg.get("country")
|
||||||
language = msg.get("language")
|
language = msg.get("language")
|
||||||
providers = []
|
providers = []
|
||||||
provider_info: dict[str, Any]
|
provider_info: dict[str, Any]
|
||||||
|
|
||||||
for entity in component.entities:
|
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:
|
if language:
|
||||||
provider_info["language_supported"] = bool(
|
provider_info["supported_languages"] = language_util.matches(
|
||||||
language_util.matches(language, entity.supported_languages)
|
language, entity.supported_languages, country
|
||||||
)
|
)
|
||||||
providers.append(provider_info)
|
providers.append(provider_info)
|
||||||
|
|
||||||
for engine_id, provider in legacy_providers.items():
|
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:
|
if language:
|
||||||
provider_info["language_supported"] = bool(
|
provider_info["supported_languages"] = language_util.matches(
|
||||||
language_util.matches(language, provider.supported_languages)
|
language, provider.supported_languages, country
|
||||||
)
|
)
|
||||||
providers.append(provider_info)
|
providers.append(provider_info)
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ class BaseProvider:
|
|||||||
@property
|
@property
|
||||||
def supported_languages(self) -> list[str]:
|
def supported_languages(self) -> list[str]:
|
||||||
"""Return a list of supported languages."""
|
"""Return a list of supported languages."""
|
||||||
return ["de-DE", "en-US"]
|
return ["de", "de-CH", "en-US"]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def supported_formats(self) -> list[AudioFormats]:
|
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}")
|
response = await client.get(f"/api/stt/{TEST_DOMAIN}")
|
||||||
assert response.status == HTTPStatus.OK
|
assert response.status == HTTPStatus.OK
|
||||||
assert await response.json() == {
|
assert await response.json() == {
|
||||||
"languages": ["de-DE", "en-US"],
|
"languages": ["de", "de-CH", "en-US"],
|
||||||
"formats": ["wav", "ogg"],
|
"formats": ["wav", "ogg"],
|
||||||
"codecs": ["pcm", "opus"],
|
"codecs": ["pcm", "opus"],
|
||||||
"sample_rates": [16000],
|
"sample_rates": [16000],
|
||||||
@ -398,14 +398,18 @@ async def test_ws_list_engines(
|
|||||||
|
|
||||||
msg = await client.receive_json()
|
msg = await client.receive_json()
|
||||||
assert msg["success"]
|
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"})
|
await client.send_json_auto_id({"type": "stt/engine/list", "language": "smurfish"})
|
||||||
|
|
||||||
msg = await client.receive_json()
|
msg = await client.receive_json()
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
assert msg["result"] == {
|
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"})
|
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()
|
msg = await client.receive_json()
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
assert msg["result"] == {
|
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"})
|
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()
|
msg = await client.receive_json()
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
assert msg["result"] == {
|
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