From 4356633ed6a6a8db61ddafc2f7568b498c30069b Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Tue, 26 Aug 2025 09:30:58 -0500 Subject: [PATCH] Rename to Linux Voice Assistant --- README.md | 10 +-- .../__init__.py | 0 .../__main__.py | 81 +++++++++++++++++- .../api_server.py | 0 {hav_sat => linux_voice_assistant}/entity.py | 0 .../microwakeword.py | 0 .../mpv_player.py | 0 {hav_sat => linux_voice_assistant}/util.py | 0 pyproject.toml | 10 +-- script/format | 2 +- script/lint | 2 +- script/run | 2 +- wakewords/hey_peppa_pig.json | 18 ---- wakewords/hey_peppa_pig.tflite | Bin 62112 -> 0 bytes 14 files changed, 92 insertions(+), 33 deletions(-) rename {hav_sat => linux_voice_assistant}/__init__.py (100%) rename {hav_sat => linux_voice_assistant}/__main__.py (82%) rename {hav_sat => linux_voice_assistant}/api_server.py (100%) rename {hav_sat => linux_voice_assistant}/entity.py (100%) rename {hav_sat => linux_voice_assistant}/microwakeword.py (100%) rename {hav_sat => linux_voice_assistant}/mpv_player.py (100%) rename {hav_sat => linux_voice_assistant}/util.py (100%) delete mode 100644 wakewords/hey_peppa_pig.json delete mode 100644 wakewords/hey_peppa_pig.tflite diff --git a/README.md b/README.md index e084dd4..a7e1f33 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Home Assistant Voice Satellite (HAV-SAT) +# Linux Voice Assistant -Experimental voice satellite for [Home Assistant][homeassistant] that uses the [ESPHome][esphome] protocol. +Experimental Linux voice assistant for [Home Assistant][homeassistant] that uses the [ESPHome][esphome] protocol. Runs on Linux `aarch64` and `x86_64` platforms. Tested with Python 3.13 and Python 3.11. Supports announcments, start/continue conversation, and timers. @@ -16,14 +16,14 @@ Install system dependencies (`apt-get`): Clone and install project: ``` sh -git clone https://github.com/OHF-Voice/hav-sat.git -cd hav-sat +git clone https://github.com/OHF-Voice/linux-voice-assistant.git +cd linux-voice-assistant script/setup ``` ## Running -Use `script/run` or `python3 -m hav_sat` +Use `script/run` or `python3 -m linux_voice_assistant` See `--help` for more options. diff --git a/hav_sat/__init__.py b/linux_voice_assistant/__init__.py similarity index 100% rename from hav_sat/__init__.py rename to linux_voice_assistant/__init__.py diff --git a/hav_sat/__main__.py b/linux_voice_assistant/__main__.py similarity index 82% rename from hav_sat/__main__.py rename to linux_voice_assistant/__main__.py index 1104805..094388c 100644 --- a/hav_sat/__main__.py +++ b/linux_voice_assistant/__main__.py @@ -6,11 +6,16 @@ import json import logging import threading import time +import tempfile +import shutil +import posixpath from collections.abc import Iterable -from dataclasses import dataclass +from dataclasses import dataclass, field from pathlib import Path from queue import Queue from typing import Dict, List, Optional +from urllib.request import urlopen +from urllib.parse import urlparse, urlunparse # pylint: disable=no-name-in-module import sounddevice as sd @@ -63,6 +68,7 @@ class AvailableWakeWord: wake_word: str trained_languages: List[str] config_path: Path + url: Optional[str] = None @dataclass @@ -81,6 +87,15 @@ class ServerState: media_player_entity: Optional[MediaPlayerEntity] = None satellite: "Optional[VoiceSatelliteProtocol]" = None + _external_wake_word_dir: Optional[tempfile.TemporaryDirectory] = None + + @property + def external_wake_word_dir(self) -> Path: + if self._external_wake_word_dir is None: + self._external_wake_word_dir = tempfile.TemporaryDirectory() + + return Path(self._external_wake_word_dir.name) + # ----------------------------------------------------------------------------- @@ -98,7 +113,7 @@ class VoiceSatelliteProtocol(APIServer): server=self, key=len(state.entities), name="Media Player", - object_id="hav_sat_media_player", + object_id="linux_voice_assistant_media_player", music_player=state.music_player, announce_player=state.tts_player, ) @@ -211,6 +226,26 @@ class VoiceSatelliteProtocol(APIServer): if isinstance(msg, ListEntitiesRequest): yield ListEntitiesDoneResponse() elif isinstance(msg, VoiceAssistantConfigurationRequest): + external_wake_words = { + external_ww.wake_word.id: external_ww + for external_ww in msg.external_wake_words + if external_ww.model_type == "micro_wake_word" + } + + for wake_word_id, external_ww in external_wake_words.items(): + if wake_word_id in self.state.available_wake_words: + # Skip if already added + continue + + self.state.available_wake_words[wake_word_id] = AvailableWakeWord( + id=external_ww.wake_word.id, + wake_word=external_ww.wake_word.wake_word, + trained_languages=external_ww.wake_word.trained_languages, + config_path=self.state.external_wake_word_dir + / f"{external_ww.wake_word.id}.json", + url=external_ww.url, + ) + yield VoiceAssistantConfigurationResponse( available_wake_words=[ VoiceAssistantWakeWord( @@ -235,6 +270,48 @@ class VoiceSatelliteProtocol(APIServer): if not model_info: continue + if (not model_info.config_path.exists()) and model_info.url: + _LOGGER.debug("Downloading wake word config: %s", model_info.url) + with ( + open(model_info.config_path, "wb") as config_file, + urlopen(model_info.url) as response, + ): + if response.status != 200: + _LOGGER.error( + "Download failed with status: %s", response.status + ) + continue + + shutil.copyfileobj(response, config_file) + + with open( + model_info.config_path, "r", encoding="utf-8" + ) as config_file: + config_dict = json.load(config_file) + parsed_config_url = urlparse(model_info.url) + model_url = urlunparse( + parsed_config_url._replace( + path=posixpath.join( + posixpath.dirname(parsed_config_url.path), + config_dict["model"], + ) + ) + ) + + _LOGGER.debug("Downloading wake word model: %s", model_url) + model_path = model_info.config_path.parent / config_dict["model"] + with ( + open(model_path, "wb") as model_file, + urlopen(model_url) as response, + ): + if response.status != 200: + _LOGGER.error( + "Download failed with status: %s", response.status + ) + continue + + shutil.copyfileobj(response, model_file) + _LOGGER.debug("Loading wake word: %s", model_info.config_path) self.state.wake_word = MicroWakeWord.from_config( model_info.config_path, diff --git a/hav_sat/api_server.py b/linux_voice_assistant/api_server.py similarity index 100% rename from hav_sat/api_server.py rename to linux_voice_assistant/api_server.py diff --git a/hav_sat/entity.py b/linux_voice_assistant/entity.py similarity index 100% rename from hav_sat/entity.py rename to linux_voice_assistant/entity.py diff --git a/hav_sat/microwakeword.py b/linux_voice_assistant/microwakeword.py similarity index 100% rename from hav_sat/microwakeword.py rename to linux_voice_assistant/microwakeword.py diff --git a/hav_sat/mpv_player.py b/linux_voice_assistant/mpv_player.py similarity index 100% rename from hav_sat/mpv_player.py rename to linux_voice_assistant/mpv_player.py diff --git a/hav_sat/util.py b/linux_voice_assistant/util.py similarity index 100% rename from hav_sat/util.py rename to linux_voice_assistant/util.py diff --git a/pyproject.toml b/pyproject.toml index 517afb1..17011ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,15 +3,15 @@ requires = ["setuptools>=62.3"] build-backend = "setuptools.build_meta" [project] -name = "hav-satellite" +name = "linux-voice-assistant" version = "1.0.0" license = {text = "Apache-2.0"} -description = "Voice satellite for Home Assistant using the ESPHome protocol" +description = "Linux voice assistant for Home Assistant using the ESPHome protocol" readme = "README.md" authors = [ {name = "The Home Assistant Authors", email = "hello@home-assistant.io"} ] -keywords = ["home", "assistant", "voice", "esphome"] +keywords = ["home", "assistant", "voice", "esphome", "linux"] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", @@ -41,7 +41,7 @@ dev = [ ] [project.urls] -"Source Code" = "http://github.com/OHF-Voice/hav-sat" +"Source Code" = "http://github.com/OHF-Voice/linux-voice-assistant" [tool.setuptools] platforms = ["any"] @@ -49,5 +49,5 @@ zip-safe = true include-package-data = true [tool.setuptools.packages.find] -include = ["hav_sat"] +include = ["linux_voice_assistant"] exclude = ["tests", "tests.*"] diff --git a/script/format b/script/format index 3c6b5f2..11d9218 100755 --- a/script/format +++ b/script/format @@ -6,7 +6,7 @@ from pathlib import Path _DIR = Path(__file__).parent _PROGRAM_DIR = _DIR.parent _VENV_DIR = _PROGRAM_DIR / ".venv" -_MODULE_DIR = _PROGRAM_DIR / "hav_sat" +_MODULE_DIR = _PROGRAM_DIR / "linux_voice_assistant" _FORMAT_DIRS = [_MODULE_DIR] diff --git a/script/lint b/script/lint index af247c0..3ab1387 100755 --- a/script/lint +++ b/script/lint @@ -6,7 +6,7 @@ from pathlib import Path _DIR = Path(__file__).parent _PROGRAM_DIR = _DIR.parent _VENV_DIR = _PROGRAM_DIR / ".venv" -_MODULE_DIR = _PROGRAM_DIR / "hav_sat" +_MODULE_DIR = _PROGRAM_DIR / "linux_voice_assistant" _LINT_DIRS = [_MODULE_DIR] diff --git a/script/run b/script/run index ce2e06f..88a7170 100755 --- a/script/run +++ b/script/run @@ -14,4 +14,4 @@ if _VENV_DIR.exists(): else: python_exe = "python3" -subprocess.check_call([python_exe, "-m", "hav_sat"] + sys.argv[1:]) +subprocess.check_call([python_exe, "-m", "linux_voice_assistant"] + sys.argv[1:]) diff --git a/wakewords/hey_peppa_pig.json b/wakewords/hey_peppa_pig.json deleted file mode 100644 index 0d3d107..0000000 --- a/wakewords/hey_peppa_pig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "micro", - "wake_word": "Hey Peppa Pig", - "author": "Michael Hansen", - "website": "https://www.home-assistant.io", - "model": "hey_peppa_pig.tflite", - "trained_languages": [ - "en" - ], - "version": 2, - "micro": { - "probability_cutoff": 0.97, - "feature_step_size": 10, - "sliding_window_size": 5, - "tensor_arena_size": 30000, - "minimum_esphome_version": "2024.7.0" - } -} \ No newline at end of file diff --git a/wakewords/hey_peppa_pig.tflite b/wakewords/hey_peppa_pig.tflite deleted file mode 100644 index 45c3dac61318e46101746ae94711f09355057f52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62112 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