45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
"""Handle Cloud assist pipelines."""
|
|
from homeassistant.components.assist_pipeline import (
|
|
async_create_default_pipeline,
|
|
async_get_pipelines,
|
|
async_setup_pipeline_store,
|
|
)
|
|
from homeassistant.components.conversation import HOME_ASSISTANT_AGENT
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from .const import DOMAIN
|
|
|
|
|
|
async def async_create_cloud_pipeline(hass: HomeAssistant) -> str | None:
|
|
"""Create a cloud assist pipeline."""
|
|
# Make sure the pipeline store is loaded, needed because assist_pipeline
|
|
# is an after dependency of cloud
|
|
await async_setup_pipeline_store(hass)
|
|
|
|
def cloud_assist_pipeline(hass: HomeAssistant) -> str | None:
|
|
"""Return the ID of a cloud-enabled assist pipeline or None.
|
|
|
|
Check if a cloud pipeline already exists with
|
|
legacy cloud engine id.
|
|
"""
|
|
for pipeline in async_get_pipelines(hass):
|
|
if (
|
|
pipeline.conversation_engine == HOME_ASSISTANT_AGENT
|
|
and pipeline.stt_engine == DOMAIN
|
|
and pipeline.tts_engine == DOMAIN
|
|
):
|
|
return pipeline.id
|
|
return None
|
|
|
|
if (cloud_assist_pipeline(hass)) is not None or (
|
|
cloud_pipeline := await async_create_default_pipeline(
|
|
hass,
|
|
stt_engine_id=DOMAIN,
|
|
tts_engine_id=DOMAIN,
|
|
pipeline_name="Home Assistant Cloud",
|
|
)
|
|
) is None:
|
|
return None
|
|
|
|
return cloud_pipeline.id
|