From cfc056752cbdec140be03a2d268c0d5801c0e69e Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Mon, 25 Aug 2025 14:57:40 -0500 Subject: [PATCH] Clean up and incorporate feedback --- .../components/assist_pipeline/__init__.py | 35 +++----- .../assist_pipeline/acknowledge.mp3 | Bin 0 -> 50991 bytes .../components/assist_pipeline/const.py | 3 + .../components/assist_pipeline/pipeline.py | 83 +++++++++--------- .../assist_pipeline/sounds/acknowledge.mp3 | Bin 19832 -> 0 bytes .../components/media_player/browse_media.py | 1 + 6 files changed, 55 insertions(+), 67 deletions(-) create mode 100644 homeassistant/components/assist_pipeline/acknowledge.mp3 delete mode 100644 homeassistant/components/assist_pipeline/sounds/acknowledge.mp3 diff --git a/homeassistant/components/assist_pipeline/__init__.py b/homeassistant/components/assist_pipeline/__init__.py index e728d18cdfc..ae3db56f7c8 100644 --- a/homeassistant/components/assist_pipeline/__init__.py +++ b/homeassistant/components/assist_pipeline/__init__.py @@ -3,11 +3,9 @@ from __future__ import annotations from collections.abc import AsyncIterable -from http import HTTPStatus from pathlib import Path from typing import Any -from aiohttp import web import voluptuous as vol from homeassistant.components import http, stt @@ -16,6 +14,8 @@ from homeassistant.helpers import chat_session from homeassistant.helpers.typing import ConfigType from .const import ( + ACKNOWLEDGE_FILENAME, + ACKNOWLEDGE_URL, CONF_DEBUG_RECORDING_DIR, DATA_CONFIG, DATA_LAST_WAKE_UP, @@ -89,7 +89,14 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: await async_setup_pipeline_store(hass) async_register_websocket_api(hass) - hass.http.register_view(DefaultSoundsView(hass)) + await hass.http.async_register_static_paths( + [ + http.StaticPathConfig( + ACKNOWLEDGE_URL, + str(Path(__file__).parent / ACKNOWLEDGE_FILENAME), + ) + ] + ) return True @@ -138,25 +145,3 @@ async def async_pipeline_from_audio_stream( ) await pipeline_input.validate() await pipeline_input.execute() - - -# ----------------------------------------------------------------------------- - - -class DefaultSoundsView(http.HomeAssistantView): - """HTTP view to host default sounds.""" - - url = f"/api/{DOMAIN}/sounds/{{filename}}" - name = f"api:{DOMAIN}:sounds" - requires_auth = False - - def __init__(self, hass: HomeAssistant) -> None: - self.hass = hass - self.base_dir = Path(__file__).parent / "sounds" - - async def get(self, request: web.Request, filename: str) -> web.StreamResponse: - """Get data for sound file.""" - if filename not in ("acknowledge.mp3",): - return web.Response(body="Invalid filename", status=HTTPStatus.BAD_REQUEST) - - return web.FileResponse(self.base_dir / filename) diff --git a/homeassistant/components/assist_pipeline/acknowledge.mp3 b/homeassistant/components/assist_pipeline/acknowledge.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1709ff20bc2b7c49bb8335fbc5a444b7c1f3d67e GIT binary patch literal 50991 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

+PieM{GVOPi#6F0{(cVY%S8oWrxrw@rOl^%%5l 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 literal 0 HcmV?d00001 diff --git a/homeassistant/components/assist_pipeline/const.py b/homeassistant/components/assist_pipeline/const.py index 52583cf21a4..c8fa05a1ea9 100644 --- a/homeassistant/components/assist_pipeline/const.py +++ b/homeassistant/components/assist_pipeline/const.py @@ -23,3 +23,6 @@ SAMPLES_PER_CHUNK = SAMPLE_RATE // (1000 // MS_PER_CHUNK) # 10 ms @ 16Khz BYTES_PER_CHUNK = SAMPLES_PER_CHUNK * SAMPLE_WIDTH * SAMPLE_CHANNELS # 16-bit OPTION_PREFERRED = "preferred" + +ACKNOWLEDGE_FILENAME = "acknowledge.mp3" +ACKNOWLEDGE_URL = f"/api/assist_pipeline/static/{ACKNOWLEDGE_FILENAME}" diff --git a/homeassistant/components/assist_pipeline/pipeline.py b/homeassistant/components/assist_pipeline/pipeline.py index d23f2cc319c..3b676b41599 100644 --- a/homeassistant/components/assist_pipeline/pipeline.py +++ b/homeassistant/components/assist_pipeline/pipeline.py @@ -21,6 +21,7 @@ import voluptuous as vol from homeassistant.components import ( conversation, + media_player, media_source, stt, tts, @@ -35,7 +36,6 @@ from homeassistant.helpers import ( device_registry as dr, entity_registry as er, intent, - network, ) from homeassistant.helpers.collection import ( CHANGE_UPDATED, @@ -58,6 +58,7 @@ from homeassistant.util.limited_size_dict import LimitedSizeDict from .audio_enhancer import AudioEnhancer, EnhancedAudioChunk, MicroVadSpeexEnhancer from .const import ( + ACKNOWLEDGE_URL, BYTES_PER_CHUNK, CONF_DEBUG_RECORDING_DIR, DATA_CONFIG, @@ -104,8 +105,6 @@ KEY_PIPELINE_CONVERSATION_DATA: HassKey[dict[str, PipelineConversationData]] = H # Number of response parts to handle before streaming the response STREAM_RESPONSE_CHARS = 60 -DEFAULT_ACKNOWLEDGE_MEDIA_ID = f"/api/{DOMAIN}/sounds/acknowledge.mp3" - def validate_language(data: dict[str, Any]) -> Any: """Validate language settings.""" @@ -456,9 +455,7 @@ class Pipeline: wake_word_id=data["wake_word_id"], prefer_local_intents=data.get("prefer_local_intents", False), acknowledge_same_area=data.get("acknowledge_same_area", True), - acknowledge_media_id=data.get( - "acknowledge_media_id", DEFAULT_ACKNOWLEDGE_MEDIA_ID - ), + acknowledge_media_id=data.get("acknowledge_media_id", ACKNOWLEDGE_URL), ) def to_json(self) -> dict[str, Any]: @@ -1308,45 +1305,13 @@ class PipelineRun: if tts_input_stream and self._streamed_response_text: tts_input_stream.put_nowait(None) - intent_response = conversation_result.response - device_registry = dr.async_get(self.hass) - # Check if all targeted entities were in the same area as # the satellite device. # If so, the satellite can response with an acknowledge beep # instead of a full response. - if ( - ( - intent_response.response_type - == intent.IntentResponseType.ACTION_DONE - ) - and intent_response.matched_states - and device_id - and (device := device_registry.async_get(device_id)) - and device.area_id - ): - entity_registry = er.async_get(self.hass) - can_acknowledge = True - for state in intent_response.matched_states: - entity = entity_registry.async_get(state.entity_id) - if ( - (not entity) - or ( - entity.area_id - and (entity.area_id != device.area_id) - ) - or ( - entity.device_id - and ( - entity_device := device_registry.async_get( - entity.device_id - ) - ) - and entity_device.area_id != device.area_id - ) - ): - can_acknowledge = False - break + can_acknowledge = self._can_acknowledge_response( + conversation_result.response, device_id + ) except Exception as src_error: _LOGGER.exception("Unexpected error during intent recognition") @@ -1372,6 +1337,40 @@ class PipelineRun: return (speech, can_acknowledge) + def _can_acknowledge_response( + self, intent_response: intent.IntentResponse, device_id: str | None + ) -> bool: + """Return true if all targeted entities were in the same area as the device.""" + if ( + (intent_response.response_type != intent.IntentResponseType.ACTION_DONE) + or (not intent_response.matched_states) + or (not device_id) + ): + return False + + device_registry = dr.async_get(self.hass) + + if (not (device := device_registry.async_get(device_id))) or ( + not device.area_id + ): + return False + + entity_registry = er.async_get(self.hass) + for state in intent_response.matched_states: + entity = entity_registry.async_get(state.entity_id) + if ( + (not entity) + or (entity.area_id and (entity.area_id != device.area_id)) + or ( + entity.device_id + and (entity_device := device_registry.async_get(entity.device_id)) + and entity_device.area_id != device.area_id + ) + ): + return False + + return True + async def prepare_text_to_speech(self) -> None: """Prepare text-to-speech.""" # pipeline.tts_engine can't be None or this function is not called @@ -1455,7 +1454,7 @@ class PipelineRun: media = await media_source.async_resolve_media(self.hass, media_id, None) media_id = media.url else: - media_id = network.get_url(self.hass) + media_id + media_id = media_player.async_process_play_media_url(self.hass, media_id) tts_output = {"url": media_id} diff --git a/homeassistant/components/assist_pipeline/sounds/acknowledge.mp3 b/homeassistant/components/assist_pipeline/sounds/acknowledge.mp3 deleted file mode 100644 index 603e79e4f2a65cc29faf92c985f13603ab93ed1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19832 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 S;tcD$EL~is9K5(2-V6X