1 """Support for the cloud for speech to text service."""
3 from __future__
import annotations
5 from collections.abc
import AsyncIterable
8 from hass_nabucasa
import Cloud
9 from hass_nabucasa.voice
import STT_LANGUAGES, VoiceError
28 from .assist_pipeline
import async_migrate_cloud_pipeline_engine
29 from .client
import CloudClient
30 from .const
import DATA_CLOUD, DATA_PLATFORMS_SETUP, STT_ENTITY_UNIQUE_ID
32 _LOGGER = logging.getLogger(__name__)
37 config_entry: ConfigEntry,
38 async_add_entities: AddEntitiesCallback,
40 """Set up Home Assistant Cloud speech platform via config entry."""
41 stt_platform_loaded = hass.data[DATA_PLATFORMS_SETUP][Platform.STT]
42 stt_platform_loaded.set()
43 cloud = hass.data[DATA_CLOUD]
48 """Home Assistant Cloud speech API provider."""
50 _attr_name =
"Home Assistant Cloud"
51 _attr_unique_id = STT_ENTITY_UNIQUE_ID
53 def __init__(self, cloud: Cloud[CloudClient]) ->
None:
54 """Initialize cloud Speech to text entity."""
59 """Return a list of supported languages."""
64 """Return a list of supported formats."""
65 return [AudioFormats.WAV, AudioFormats.OGG]
69 """Return a list of supported codecs."""
70 return [AudioCodecs.PCM, AudioCodecs.OPUS]
74 """Return a list of supported bitrates."""
75 return [AudioBitRates.BITRATE_16]
79 """Return a list of supported samplerates."""
80 return [AudioSampleRates.SAMPLERATE_16000]
84 """Return a list of supported channels."""
85 return [AudioChannels.CHANNEL_MONO]
88 """Run when entity is about to be added to hass."""
90 async
def pipeline_setup(hass: HomeAssistant, _comp: str) ->
None:
91 """When assist_pipeline is set up."""
92 assert self.
platformplatform.config_entry
93 self.
platformplatform.config_entry.async_create_task(
96 self.
hasshass, platform=Platform.STT, engine_id=self.
entity_identity_id
103 self, metadata: SpeechMetadata, stream: AsyncIterable[bytes]
105 """Process an audio stream to STT service."""
107 f
"audio/{metadata.format!s}; codecs=audio/{metadata.codec!s};"
113 result = await self.
cloudcloud.voice.process_stt(
115 content_type=content_type,
116 language=metadata.language,
118 except VoiceError
as err:
119 _LOGGER.error(
"Voice error: %s", err)
120 return SpeechResult(
None, SpeechResultState.ERROR)
125 SpeechResultState.SUCCESS
if result.success
else SpeechResultState.ERROR,
list[AudioBitRates] supported_bit_rates(self)
list[str] supported_languages(self)
None __init__(self, Cloud[CloudClient] cloud)
SpeechResult async_process_audio_stream(self, SpeechMetadata metadata, AsyncIterable[bytes] stream)
list[AudioSampleRates] supported_sample_rates(self)
list[AudioFormats] supported_formats(self)
list[AudioChannels] supported_channels(self)
list[AudioCodecs] supported_codecs(self)
None async_added_to_hass(self)
None async_migrate_cloud_pipeline_engine(HomeAssistant hass, Platform platform, str engine_id)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
None async_when_setup(core.HomeAssistant hass, str component, Callable[[core.HomeAssistant, str], Awaitable[None]] when_setup_cb)