Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The Assist pipeline integration."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import AsyncIterable
6 from typing import Any
7 
8 import voluptuous as vol
9 
10 from homeassistant.components import stt
11 from homeassistant.core import Context, HomeAssistant
12 from homeassistant.helpers.typing import ConfigType
13 
14 from .const import (
15  CONF_DEBUG_RECORDING_DIR,
16  DATA_CONFIG,
17  DATA_LAST_WAKE_UP,
18  DOMAIN,
19  EVENT_RECORDING,
20  OPTION_PREFERRED,
21  SAMPLE_CHANNELS,
22  SAMPLE_RATE,
23  SAMPLE_WIDTH,
24  SAMPLES_PER_CHUNK,
25 )
26 from .error import PipelineNotFound
27 from .pipeline import (
28  AudioSettings,
29  Pipeline,
30  PipelineEvent,
31  PipelineEventCallback,
32  PipelineEventType,
33  PipelineInput,
34  PipelineRun,
35  PipelineStage,
36  WakeWordSettings,
37  async_create_default_pipeline,
38  async_get_pipeline,
39  async_get_pipelines,
40  async_migrate_engine,
41  async_run_migrations,
42  async_setup_pipeline_store,
43  async_update_pipeline,
44 )
45 from .websocket_api import async_register_websocket_api
46 
47 __all__ = (
48  "DOMAIN",
49  "async_create_default_pipeline",
50  "async_get_pipelines",
51  "async_migrate_engine",
52  "async_setup",
53  "async_pipeline_from_audio_stream",
54  "async_update_pipeline",
55  "AudioSettings",
56  "Pipeline",
57  "PipelineEvent",
58  "PipelineEventType",
59  "PipelineNotFound",
60  "WakeWordSettings",
61  "EVENT_RECORDING",
62  "OPTION_PREFERRED",
63  "SAMPLES_PER_CHUNK",
64  "SAMPLE_RATE",
65  "SAMPLE_WIDTH",
66  "SAMPLE_CHANNELS",
67 )
68 
69 CONFIG_SCHEMA = vol.Schema(
70  {
71  DOMAIN: vol.Schema(
72  {
73  vol.Optional(CONF_DEBUG_RECORDING_DIR): str,
74  },
75  )
76  },
77  extra=vol.ALLOW_EXTRA,
78 )
79 
80 
81 async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
82  """Set up the Assist pipeline integration."""
83  hass.data[DATA_CONFIG] = config.get(DOMAIN, {})
84 
85  # wake_word_id -> timestamp of last detection (monotonic_ns)
86  hass.data[DATA_LAST_WAKE_UP] = {}
87 
88  await async_setup_pipeline_store(hass)
89  await async_run_migrations(hass)
91 
92  return True
93 
94 
96  hass: HomeAssistant,
97  *,
98  context: Context,
99  event_callback: PipelineEventCallback,
100  stt_metadata: stt.SpeechMetadata,
101  stt_stream: AsyncIterable[bytes],
102  wake_word_phrase: str | None = None,
103  pipeline_id: str | None = None,
104  conversation_id: str | None = None,
105  tts_audio_output: str | dict[str, Any] | None = None,
106  wake_word_settings: WakeWordSettings | None = None,
107  audio_settings: AudioSettings | None = None,
108  device_id: str | None = None,
109  start_stage: PipelineStage = PipelineStage.STT,
110  end_stage: PipelineStage = PipelineStage.TTS,
111 ) -> None:
112  """Create an audio pipeline from an audio stream.
113 
114  Raises PipelineNotFound if no pipeline is found.
115  """
116  pipeline_input = PipelineInput(
117  conversation_id=conversation_id,
118  device_id=device_id,
119  stt_metadata=stt_metadata,
120  stt_stream=stt_stream,
121  wake_word_phrase=wake_word_phrase,
122  run=PipelineRun(
123  hass,
124  context=context,
125  pipeline=async_get_pipeline(hass, pipeline_id=pipeline_id),
126  start_stage=start_stage,
127  end_stage=end_stage,
128  event_callback=event_callback,
129  tts_audio_output=tts_audio_output,
130  wake_word_settings=wake_word_settings,
131  audio_settings=audio_settings or AudioSettings(),
132  ),
133  )
134  await pipeline_input.validate()
135  await pipeline_input.execute()
Pipeline async_get_pipeline(HomeAssistant hass, str|None pipeline_id=None)
Definition: pipeline.py:282
PipelineData async_setup_pipeline_store(HomeAssistant hass)
Definition: pipeline.py:1854
bool async_setup(HomeAssistant hass, ConfigType config)
Definition: __init__.py:81
None async_pipeline_from_audio_stream(HomeAssistant hass, *Context context, PipelineEventCallback event_callback, stt.SpeechMetadata stt_metadata, AsyncIterable[bytes] stt_stream, str|None wake_word_phrase=None, str|None pipeline_id=None, str|None conversation_id=None, str|dict[str, Any]|None tts_audio_output=None, WakeWordSettings|None wake_word_settings=None, AudioSettings|None audio_settings=None, str|None device_id=None, PipelineStage start_stage=PipelineStage.STT, PipelineStage end_stage=PipelineStage.TTS)
Definition: __init__.py:111