From 174cc246b6904adc276f0148b5e113ede712504a Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Tue, 7 Feb 2023 12:29:41 -0800 Subject: [PATCH 01/37] Remove deprecated modules (#258) * Remove deprecated modules (most are direct imports from ovos-core, neon-utils, or ovos-plugin-manager) * Deprecate `dialog` module Clean up skills module * Add backwards-compat imports * Update language tests --------- Co-authored-by: Daniel McKnight --- neon_core/dialog/__init__.py | 104 ----- neon_core/language/__init__.py | 49 +-- neon_core/messagebus/__init__.py | 32 -- neon_core/skills/__init__.py | 8 +- neon_core/skills/display_service.py | 197 --------- neon_core/skills/fallback_skill.py | 32 -- neon_core/skills/intent_service.py | 10 +- neon_core/skills/neon_skill.py | 598 ---------------------------- neon_core/skills/service.py | 3 +- neon_core/skills/skill_manager.py | 3 - neon_core/stt/__init__.py | 33 -- neon_core/tts/__init__.py | 32 -- test/test_language.py | 33 +- 13 files changed, 34 insertions(+), 1100 deletions(-) delete mode 100644 neon_core/dialog/__init__.py delete mode 100644 neon_core/messagebus/__init__.py delete mode 100644 neon_core/skills/display_service.py delete mode 100644 neon_core/skills/fallback_skill.py delete mode 100644 neon_core/skills/neon_skill.py delete mode 100644 neon_core/stt/__init__.py delete mode 100644 neon_core/tts/__init__.py diff --git a/neon_core/dialog/__init__.py b/neon_core/dialog/__init__.py deleted file mode 100644 index a7c7f21ed..000000000 --- a/neon_core/dialog/__init__.py +++ /dev/null @@ -1,104 +0,0 @@ -# NEON AI (TM) SOFTWARE, Software Development Kit & Application Framework -# All trademark and other rights reserved by their respective owners -# Copyright 2008-2022 Neongecko.com Inc. -# Contributors: Daniel McKnight, Guy Daniels, Elon Gasper, Richard Leeds, -# Regina Bloomstine, Casimiro Ferreira, Andrii Pernatii, Kirill Hrymailo -# BSD-3 License -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -from os.path import join -from neon_utils import LOG - -from mycroft.dialog import MustacheDialogRenderer, load_dialogs -from mycroft.util import resolve_resource_file - - -def get(phrase, lang=None, context=None): - """ - Looks up a resource file for the given phrase. If no file - is found, the requested phrase is returned as the string. - This will use the default language for translations. - - Args: - phrase (str): resource phrase to retrieve/translate - lang (str): the language to use - context (dict): values to be inserted into the string - - Returns: - str: a randomized and/or translated version of the phrase - """ - - if not lang: - from neon_core.configuration import Configuration - conf = Configuration.get() - lang = conf.get("internal_lang") or conf.get("lang") - - filename = join('text', lang.lower(), phrase + '.dialog') - template = resolve_resource_file(filename) - if not template: - LOG.debug("Resource file not found: {}".format(filename)) - return phrase - - stache = MustacheDialogRenderer() - stache.load_template_file("template", template) - if not context: - context = {} - return stache.render("template", context) - - -def get_all(phrase, lang=None, context=None): - """ - Looks up a resource file for the given phrase. If no file - is found, the requested phrase is returned as the string. - This will use the default language for translations. - Args: - phrase (str): resource phrase to retrieve/translate - lang (str): the language to use - context (dict): values to be inserted into the string - Returns: - [str]: Array of all the versions of the phrase - """ - if not lang: - from neon_core.configuration import Configuration - conf = Configuration.get() - lang = conf.get("internal_lang") or conf.get("lang") - - filename = "text/" + lang.lower() + "/" + phrase + ".dialog" - template = resolve_resource_file(filename) - if template: - stache = MustacheDialogRenderer() - stache.load_template_file(phrase, template) - if phrase in stache.templates: - if not context: - context = {} - - # Render all templates... - result = [] - for i in range(0, len(stache.templates[phrase])): - result.append(stache.render("template", context, i)) - return result - - # Use the given phrase as the template content. Useful for - # short phrase or single-words that can be enhanced and - # translated later. No rendering happens, though. - return [phrase.replace('.', ' ')] diff --git a/neon_core/language/__init__.py b/neon_core/language/__init__.py index bab69f101..620a3d327 100644 --- a/neon_core/language/__init__.py +++ b/neon_core/language/__init__.py @@ -28,10 +28,10 @@ import os -from ovos_plugin_manager.language import load_lang_detect_plugin, \ - load_tx_plugin -from ovos_utils.log import LOG -from neon_core.configuration import Configuration, get_private_keys +from ovos_plugin_manager.language import OVOSLangDetectionFactory as DetectorFactory +from ovos_plugin_manager.language import OVOSLangTranslationFactory as TranslatorFactory + +from neon_core.configuration import Configuration def get_lang_config(): @@ -67,44 +67,3 @@ def get_language_dir(base_path, lang="en-us"): if len(paths): return paths[0] return os.path.join(base_path, lang) - - -class TranslatorFactory: - CLASSES = {} - - @staticmethod - def create(module=None): - config = Configuration().get("language", {}) - module = module or config.get("translation_module", - "libretranslate_plug") - if module not in DetectorFactory.CLASSES: - # plugin! - clazz = load_tx_plugin(module) - else: - clazz = TranslatorFactory.CLASSES.get(module) - if not clazz: - LOG.error(f"Configured translation module not found ({module})") - return None - config["keys"] = get_private_keys() - return clazz(config) - - -class DetectorFactory: - CLASSES = {} - - @staticmethod - def create(module=None): - config = Configuration().get("language", {}) - module = module or config.get("detection_module", - "libretranslate_detection_plug") - - if module not in DetectorFactory.CLASSES: - # plugin! - clazz = load_lang_detect_plugin(module) - else: - clazz = DetectorFactory.CLASSES.get(module) - if not clazz: - LOG.error(f"Configured detection module not found ({module})") - return None - config["keys"] = get_private_keys() - return clazz(config) diff --git a/neon_core/messagebus/__init__.py b/neon_core/messagebus/__init__.py deleted file mode 100644 index 7d2c3cd21..000000000 --- a/neon_core/messagebus/__init__.py +++ /dev/null @@ -1,32 +0,0 @@ -# NEON AI (TM) SOFTWARE, Software Development Kit & Application Framework -# All trademark and other rights reserved by their respective owners -# Copyright 2008-2022 Neongecko.com Inc. -# Contributors: Daniel McKnight, Guy Daniels, Elon Gasper, Richard Leeds, -# Regina Bloomstine, Casimiro Ferreira, Andrii Pernatii, Kirill Hrymailo -# BSD-3 License -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -from neon_utils.messagebus_utils import get_messagebus -from neon_utils import LOG -LOG.warning("This reference is deprecated; import from neon_messagebus directly") -# TODO: Deprecate in neon_core 22.04 diff --git a/neon_core/skills/__init__.py b/neon_core/skills/__init__.py index e32ee3211..710ca2339 100644 --- a/neon_core/skills/__init__.py +++ b/neon_core/skills/__init__.py @@ -31,8 +31,6 @@ import mycroft.skills.core from neon_utils.skills.mycroft_skill import PatchedMycroftSkill -from neon_core.skills.neon_skill import NeonSkill -from neon_core.skills.fallback_skill import NeonFallbackSkill from neon_core.skills.decorators import intent_handler, intent_file_handler, \ resting_screen_handler, conversational_intent @@ -63,9 +61,7 @@ mycroft.skills.core.FallbackSkill = mycroft.skills.fallback_skill.FallbackSkill -__all__ = ['NeonSkill', - 'intent_handler', +__all__ = ['intent_handler', 'intent_file_handler', 'resting_screen_handler', - 'conversational_intent', - 'NeonFallbackSkill'] + 'conversational_intent'] diff --git a/neon_core/skills/display_service.py b/neon_core/skills/display_service.py deleted file mode 100644 index 4555d3963..000000000 --- a/neon_core/skills/display_service.py +++ /dev/null @@ -1,197 +0,0 @@ -# NEON AI (TM) SOFTWARE, Software Development Kit & Application Framework -# All trademark and other rights reserved by their respective owners -# Copyright 2008-2022 Neongecko.com Inc. -# Contributors: Daniel McKnight, Guy Daniels, Elon Gasper, Richard Leeds, -# Regina Bloomstine, Casimiro Ferreira, Andrii Pernatii, Kirill Hrymailo -# BSD-3 License -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import time -from mycroft_bus_client import Message -from neon_core.messagebus import get_messagebus -from os.path import abspath - -# TODO: Deprecate this module - - -def ensure_uri(s): - """ - Interprete paths as file:// uri's - - Args: - s: string to be checked - - Returns: - if s is uri, s is returned otherwise file:// is prepended - """ - if isinstance(s, str): - if '://' not in s: - return 'file://' + abspath(s) - else: - return s - elif isinstance(s, (tuple, list)): - if '://' not in s[0]: - return 'file://' + abspath(s[0]), s[1] - else: - return s - else: - raise ValueError('Invalid picture') - - -class DisplayService: - """ - DisplayService object for interacting with the display subsystem - Args: - emitter: eventemitter or websocket object - """ - - def __init__(self, bus, name="skills"): - self.name = name - self.bus = bus - self.bus.on('mycroft.display.service.picture_info_reply', - self._pic_info) - self.info = None - - def _pic_info(self, message=None): - """ - Handler for catching returning pic info - """ - self.info = message.data - - def display(self, pictures=None, utterance=''): - """ Start display. - Args: - pictures: list of paths - utterance: forward utterance for further processing by the - audio service. - """ - if pictures is None: - pictures = [] - if isinstance(pictures, str): - pictures = [pictures] - if not isinstance(pictures, list): - raise ValueError - pictures = [ensure_uri(t) for t in pictures] - self.bus.emit(Message('mycroft.display.service.display', - data={'pictures': pictures, - 'utterance': utterance}, - context={"source": self.name, - "destination": "Display Service"})) - - def add_pictures(self, pictures): - """ Start display. - Args: - file_path: track or list of paths - utterance: forward utterance for further processing by the - audio service. - """ - if isinstance(pictures, str): - pictures = [pictures] - if not isinstance(pictures, list): - raise ValueError - - self.bus.emit(Message('mycroft.display.service.queue', - data={'pictures': pictures})) - - def next_picture(self): - """ Change to next pic. """ - self.bus.emit(Message('mycroft.display.service.next')) - - def close(self): - """ Change to next pic. """ - self.bus.emit(Message('mycroft.display.service.close')) - - def previous_picture(self): - """ Change to previous pic. """ - self.bus.emit(Message('mycroft.display.service.prev')) - - def clear(self): - """ Clear Display """ - self.bus.emit(Message('mycroft.display.service.clear')) - - def set_fullscreen(self, value): - self.bus.emit(Message('mycroft.display.service.fullscreen', - data={"value": value})) - - def set_height(self, height=1600,): - """ Reset Display. """ - self.bus.emit(Message('mycroft.display.service.height', - data={"value": height})) - - def set_width(self, width=900): - """ Reset Display. """ - self.bus.emit(Message('mycroft.display.service.width', - data={"value": width})) - - def reset(self): - """ Reset Display. """ - self.bus.emit(Message('mycroft.display.service.reset')) - - def pic_info(self): - """ Request information of current displaying pic. - Returns: - Dict with pic info. - """ - self.info = None - self.bus.emit(Message('mycroft.display.service.picture_info')) - wait = 5.0 - while self.info is None and wait >= 0: - time.sleep(0.1) - wait -= 0.1 - return self.info or {"is_displaying": False} - - @property - def is_displaying(self): - return self.pic_info()["is_displaying"] - - -if __name__ == "__main__": - from time import sleep - - bus = get_messagebus() - - display = DisplayService(bus) - display.set_fullscreen(False) - print(display.is_displaying) - display.display([ - "/home/user/Pictures/78281963_2870836686294904_3010935635440566272_n.jpg", - "/home/user/Pictures/78261461_2870836602961579_9198065999352430592_n.jpg" - ]) - sleep(1) - display.next_picture() - print(display.pic_info()) - print(display.is_displaying) - sleep(1) - display.clear() - sleep(2) - display.previous_picture() - sleep(1) - display.next_picture() - sleep(1) - display.next_picture() - sleep(5) - display.reset() - display.set_fullscreen(True) - sleep(5) - display.close() - print(display.is_displaying) diff --git a/neon_core/skills/fallback_skill.py b/neon_core/skills/fallback_skill.py deleted file mode 100644 index d2ad65d3a..000000000 --- a/neon_core/skills/fallback_skill.py +++ /dev/null @@ -1,32 +0,0 @@ -# NEON AI (TM) SOFTWARE, Software Development Kit & Application Framework -# All trademark and other rights reserved by their respective owners -# Copyright 2008-2022 Neongecko.com Inc. -# Contributors: Daniel McKnight, Guy Daniels, Elon Gasper, Richard Leeds, -# Regina Bloomstine, Casimiro Ferreira, Andrii Pernatii, Kirill Hrymailo -# BSD-3 License -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -from neon_utils.skills.neon_fallback_skill import NeonFallbackSkill -from ovos_utils.log import LOG -LOG.warning(f"This module is deprecated. " - f"import from `neon_utils.skills.neon_fallback_skill` directly") diff --git a/neon_core/skills/intent_service.py b/neon_core/skills/intent_service.py index 7555c7d99..c227eac02 100644 --- a/neon_core/skills/intent_service.py +++ b/neon_core/skills/intent_service.py @@ -29,12 +29,7 @@ import time import wave -from mycroft.skills.intent_services import ConverseService - -from neon_core.configuration import Configuration -from neon_core.language import get_lang_config from neon_transformers.text_transformers import UtteranceTransformersService - from mycroft_bus_client import Message, MessageBusClient from neon_utils.message_utils import get_message_user from neon_utils.metrics_utils import Stopwatch @@ -43,7 +38,12 @@ from neon_utils.configuration_utils import get_neon_user_config from lingua_franca.parse import get_full_lang_code from ovos_config.locale import set_default_lang + +from neon_core.configuration import Configuration +from neon_core.language import get_lang_config + from mycroft.skills.intent_service import IntentService +from mycroft.skills.intent_services import ConverseService try: from neon_utterance_translator_plugin import UtteranceTranslator diff --git a/neon_core/skills/neon_skill.py b/neon_core/skills/neon_skill.py deleted file mode 100644 index 434deedfa..000000000 --- a/neon_core/skills/neon_skill.py +++ /dev/null @@ -1,598 +0,0 @@ -# NEON AI (TM) SOFTWARE, Software Development Kit & Application Framework -# All trademark and other rights reserved by their respective owners -# Copyright 2008-2022 Neongecko.com Inc. -# Contributors: Daniel McKnight, Guy Daniels, Elon Gasper, Richard Leeds, -# Regina Bloomstine, Casimiro Ferreira, Andrii Pernatii, Kirill Hrymailo -# BSD-3 License -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import re -from os import walk -from os.path import join, exists -from threading import Timer -import time -from enum import Enum - -from mycroft import dialog -from mycroft.audio import wait_while_speaking -from mycroft.messagebus.message import Message, dig_for_message -from mycroft.util import camel_case_split -from mycroft.util.log import LOG -from mycroft.skills.mycroft_skill.event_container import create_wrapper, \ - get_handler_name -from mycroft.skills.settings import save_settings -from mycroft.skills.skill_data import load_vocabulary, load_regex -from padatious import IntentContainer - -from neon_core.language import DetectorFactory, TranslatorFactory, \ - get_lang_config, get_language_dir -from neon_core.configuration import get_private_keys -from neon_core.dialog import load_dialogs -from neon_core.skills.decorators import AbortEvent, \ - AbortQuestion, killable_event -from mycroft.skills import MycroftSkill - -# TODO: Deprecate this module - - -class UserReply(str, Enum): - YES = "yes" - NO = "no" - - -def get_non_properties(obj): - """Get attibutes that are not properties from object. - - Will return members of object class along with bases down to MycroftSkill. - - Arguments: - obj: object to scan - - Returns: - Set of attributes that are not a property. - """ - - def check_class(cls): - """Find all non-properties in a class.""" - # Current class - d = cls.__dict__ - np = [k for k in d if not isinstance(d[k], property)] - # Recurse through base classes excluding MycroftSkill and object - for b in [b for b in cls.__bases__ if b not in (object, NeonSkill)]: - np += check_class(b) - return np - - return set(check_class(obj.__class__)) - - -class NeonSkill(MycroftSkill): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.keys = get_private_keys() - - # Lang support - self.language_config = get_lang_config() - self.lang_detector = DetectorFactory.create() - self.translator = TranslatorFactory.create() - - # conversational intents - intent_cache = join(self.file_system.path, "intent_cache") - self.intent_parser = IntentContainer(intent_cache) - if "min_intent_conf" not in self.settings: - self.settings["min_intent_conf"] = 0.6 - self.converse_intents = {} - - self._threads = [] - self._original_converse = self.converse - - @property - def lang(self): - """Get the configured language.""" - return self.language_config.get("internal") or \ - self.config_core.get('lang') - - def bind(self, bus): - """Register messagebus emitter with skill. - - Arguments: - bus: Mycroft messagebus connection - """ - if bus: - super().bind(bus) - self.train_internal_intents() - - def _register_system_event_handlers(self): - super()._register_system_event_handlers() - self.add_event("converse.deactivated", self._deactivate_skill) - self.add_event("converse.activated", self._activate_skill) - - def register_converse_intent(self, intent_file, handler): - """ converse padatious intents """ - name = '{}.converse:{}'.format(self.skill_id, intent_file) - filename = self.find_resource(intent_file, 'vocab') - if not filename: - raise FileNotFoundError('Unable to find "{}"'.format(intent_file)) - self.intent_parser.load_intent(name, filename) - self.converse_intents[name] = self.create_event_wrapper(handler) - - def train_internal_intents(self): - """ train internal padatious parser """ - self.intent_parser.train(single_thread=True) - - def handle_internal_intents(self, message): - """ called before converse method - this gives active skills a chance to parse their own intents and - consume the utterance, see conversational_intent decorator for usage - """ - best_match = None - best_score = 0 - for utt in message.data['utterances']: - match = self.intent_parser.calc_intent(utt) - if match and match.conf > best_score: - best_match = match - best_score = match.conf - - if best_score < self.settings["min_intent_conf"]: - return False - # call handler for intent - message = message.forward(best_match.name, best_match.matches) - self.converse_intents[best_match.name](message) - return True - - def _deactivate_skill(self, message): - skill_id = message.data.get("skill_id") - if skill_id == self.skill_id: - self.handle_skill_deactivated() - - def _activate_skill(self, message): - skill_id = message.data.get("skill_id") - if skill_id == self.skill_id: - self.handle_skill_activated() - - def handle_skill_deactivated(self): - """ - Invoked when the skill is removed from active skill list - - This means Converse method won't be called anymore - """ - pass - - def handle_skill_activated(self): - """ - Invoked when the skill is added to active skill list - - This means Converse method will be called from now on - """ - pass - - def __get_response(self): - """Helper to get a reponse from the user - - Returns: - str: user's response or None on a timeout - """ - - def converse(message): - utterances = message.data["utterances"] - converse.response = utterances[0] if utterances else None - converse.finished = True - return True - - # install a temporary conversation handler - self.make_active() - converse.finished = False - converse.response = None - self.converse = converse - - # 10 for listener, 5 for SST, then timeout - # NOTE a threading event is not used otherwise we can't raise the - # AbortEvent exception to kill the thread - start = time.time() - while time.time() - start <= 15 and not converse.finished: - time.sleep(0.1) - if self._response is not False: - converse.response = self._response - converse.finished = True # was overrided externally - self.converse = self._original_converse - return converse.response - - def _handle_killed_wait_response(self): - self._response = None - self.converse = self._original_converse - - def _wait_response(self, is_cancel, validator, on_fail, num_retries): - """Loop until a valid response is received from the user or the retry - limit is reached. - - Arguments: - is_cancel (callable): function checking cancel criteria - validator (callbale): function checking for a valid response - on_fail (callable): function handling retries - - """ - self._response = False - self._real_wait_response(is_cancel, validator, on_fail, num_retries) - while self._response is False: - time.sleep(0.1) - return self._response - - @killable_event("mycroft.skills.abort_question", exc=AbortQuestion, - callback=_handle_killed_wait_response) - def _real_wait_response(self, is_cancel, validator, on_fail, num_retries): - """Loop until a valid response is received from the user or the retry - limit is reached. - - Arguments: - is_cancel (callable): function checking cancel criteria - validator (callbale): function checking for a valid response - on_fail (callable): function handling retries - - """ - num_fails = 0 - while True: - if self._response is not False: - # usually None when aborted externally (is None) - # also allows overriding returned result from other events - return self._response - response = self.__get_response() - - if response is None: - # if nothing said, prompt one more time - num_none_fails = 1 if num_retries < 0 else num_retries - if num_fails >= num_none_fails: - self._response = None - return - else: - if validator(response): - self._response = response - return - - # catch user saying 'cancel' - if is_cancel(response): - self._response = None - return - - num_fails += 1 - if 0 < num_retries < num_fails or self._response is not False: - self._response = None - return - - line = on_fail(response) - if line: - self.speak(line, expect_response=True) - else: - self.bus.emit(Message('mycroft.mic.listen')) - - def ask_yesno(self, prompt, data=None): - """Read prompt and wait for a yes/no answer - - This automatically deals with translation and common variants, - such as 'yeah', 'sure', etc. - - Args: - prompt (str): a dialog id or string to read - data (dict): response data - Returns: - string: 'yes', 'no' or whatever the user response if not - one of those, including None - """ - resp = self.get_response(dialog=prompt, data=data) - - if self.voc_match(resp, 'yes'): - return UserReply.YES - elif self.voc_match(resp, 'no'): - return UserReply.NO - else: - return resp - - def ask_confirm(self, dialog, data=None): - """Read prompt and wait for a yes/no answer - This automatically deals with translation and common variants, - such as 'yeah', 'sure', etc. - Args: - dialog (str): a dialog id or string to read - data (dict): response data - Returns: - bool: True if 'yes', False if 'no', None for all other - responses or no response - """ - resp = self.ask_yesno(dialog, data=data) - if resp == UserReply.YES: - return True - elif resp == UserReply.NO: - return False - return None - - def remove_voc(self, utt, voc_filename, lang=None): - """ removes any entry in .voc file from the utterance """ - lang = lang or self.lang - cache_key = lang + voc_filename - - if cache_key not in self.voc_match_cache: - # this will load .voc file to cache - self.voc_match(utt, voc_filename, lang) - - if utt: - # Check for matches against complete words - for i in self.voc_match_cache[cache_key]: - # Substitute only whole words matching the token - utt = re.sub(r'\b' + i + r"\b", "", utt) - - return utt - - def activate_skill(self): - """Bump skill to active_skill list in intent_service. - - This enables converse method to be called even without skill being - used in last 5 minutes. - """ - self.bus.emit(Message('skill.converse.activate_skill', - {'skill_id': self.skill_id})) - - def deactivate_skill(self): - """Remove skill from active_skill list in intent_service. - - This disables converse method from being called - """ - self.bus.emit(Message('skill.converse.deactivate_skill', - {'skill_id': self.skill_id})) - - def make_active(self): - # backwards compat - self.log.warning("make_active() has been deprecated, please use " - "activate_skill()") - self.activate_skill() - - def _register_decorated(self): - """Register all intent handlers that are decorated with an intent. - - Looks for all functions that have been marked by a decorator - and read the intent data from them. The intent handlers aren't the - only decorators used. Skip properties as calling getattr on them - executes the code which may have unintended side-effects - """ - super()._register_decorated() - for attr_name in get_non_properties(self): - method = getattr(self, attr_name) - if hasattr(method, 'converse_intents'): - for intent_file in getattr(method, 'converse_intents'): - self.register_converse_intent(intent_file, method) - - def _find_resource(self, res_name, lang, res_dirname=None): - """Finds a resource by name, lang and dir - """ - if res_dirname: - # Try the old translated directory (dialog/vocab/regex) - root_path = get_language_dir(join(self.root_dir, res_dirname), - self.lang) - path = join(root_path, res_name) - if exists(path): - return path - - # Try old-style non-translated resource - path = join(self.root_dir, res_dirname, res_name) - if exists(path): - return path - - # New scheme: search for res_name under the 'locale' folder - root_path = get_language_dir(join(self.root_dir, 'locale'), self.lang) - for path, _, files in walk(root_path): - if res_name in files: - return join(path, res_name) - - # Not found - return None - - def create_event_wrapper(self, handler, handler_info=None): - skill_data = {'name': get_handler_name(handler)} - - def on_error(e): - """Speak and log the error.""" - if not isinstance(e, AbortEvent): - # Convert "MyFancySkill" to "My Fancy Skill" for speaking - handler_name = camel_case_split(self.name) - msg_data = {'skill': handler_name} - msg = dialog.get('skill.error', self.lang, msg_data) - self.speak(msg) - LOG.exception(msg) - else: - LOG.info("Skill execution aborted") - # append exception information in message - skill_data['exception'] = repr(e) - - def on_start(message): - """Indicate that the skill handler is starting.""" - if handler_info: - # Indicate that the skill handler is starting if requested - msg_type = handler_info + '.start' - self.bus.emit(message.forward(msg_type, skill_data)) - - def on_end(message): - """Store settings and indicate that the skill handler has completed - """ - if self.settings != self._initial_settings: - save_settings(self.root_dir, self.settings) - self._initial_settings = self.settings - if handler_info: - msg_type = handler_info + '.complete' - self.bus.emit(message.forward(msg_type, skill_data)) - - return create_wrapper(handler, self.skill_id, on_start, on_end, - on_error) - - def add_event(self, name, handler, handler_info=None, once=False): - """Create event handler for executing intent or other event. - - Arguments: - name (string): IntentParser name - handler (func): Method to call - handler_info (string): Base message when reporting skill event - handler status on messagebus. - once (bool, optional): Event handler will be removed after it has - been run once. - """ - wrapper = self.create_event_wrapper(handler, handler_info) - return self.events.add(name, wrapper, once) - - def speak(self, utterance, expect_response=False, wait=False, meta=None): - """Speak a sentence. - - Arguments: - utterance (str): sentence mycroft should speak - expect_response (bool): set to True if Mycroft should listen - for a response immediately after - speaking the utterance. - wait (bool): set to True to block while the text - is being spoken. - meta: Information of what built the sentence. - """ - # registers the skill as being active - meta = meta or {} - meta['skill'] = self.name - self.enclosure.register(self.name) - - message = dig_for_message() - - # check for user specified language - # NOTE this will likely change in future - user_lang = message.user_data.get("lang") or self.language_config[ - "user"] - - original = utterance - detected_lang = self.lang_detector.detect(utterance) - LOG.debug("Detected language: {lang}".format(lang=detected_lang)) - if detected_lang != user_lang.split("-")[0]: - utterance = self.translator.translate(utterance, user_lang) - - data = {'utterance': utterance, - 'expect_response': expect_response, - 'meta': meta} - - # add language metadata to context - message.context["utterance_data"] = { - "detected_lang": detected_lang, - "user_lang": self.language_config["user"], - "was_translated": detected_lang == - self.language_config["user"].split("-")[0], - "raw_utterance": original - } - - m = message.forward("speak", data) if message \ - else Message("speak", data) - self.bus.emit(m) - - if wait: - wait_while_speaking() - - def init_dialog(self, root_directory): - # If "/dialog/" exists, load from there. Otherwise - # load dialog from "/locale/" - dialog_dir = get_language_dir(join(root_directory, 'dialog'), - self.lang) - locale_dir = get_language_dir(join(root_directory, 'locale'), - self.lang) - # TODO support both? currently assumes only one of the schemes is used - if exists(dialog_dir): - self.dialog_renderer = load_dialogs(dialog_dir) - elif exists(locale_dir): - self.dialog_renderer = load_dialogs(locale_dir) - else: - LOG.debug('No dialog loaded') - - def load_vocab_files(self, root_directory): - """ Load vocab files found under root_directory. - - Arguments: - root_directory (str): root folder to use when loading files - """ - keywords = [] - vocab_dir = get_language_dir(join(root_directory, 'vocab'), - self.lang) - locale_dir = get_language_dir(join(root_directory, 'locale'), - self.lang) - if exists(vocab_dir): - keywords = load_vocabulary(vocab_dir, self.skill_id) - elif exists(locale_dir): - keywords = load_vocabulary(locale_dir, self.skill_id) - else: - LOG.debug('No vocab loaded') - - # For each found intent register the default along with any aliases - for vocab_type in keywords: - for line in keywords[vocab_type]: - entity = line[0] - aliases = line[1:] - self.intent_service.register_adapt_keyword(vocab_type, - entity, - aliases) - - def load_regex_files(self, root_directory): - """ Load regex files found under the skill directory. - - Arguments: - root_directory (str): root folder to use when loading files - """ - regexes = [] - regex_dir = get_language_dir(join(root_directory, 'regex'), - self.lang) - locale_dir = get_language_dir(join(root_directory, 'locale'), - self.lang) - if exists(regex_dir): - regexes = load_regex(regex_dir, self.skill_id) - elif exists(locale_dir): - regexes = load_regex(locale_dir, self.skill_id) - - for regex in regexes: - self.intent_service.register_adapt_regex(regex) - - def __handle_stop(self, _): - """Handler for the "mycroft.stop" signal. Runs the user defined - `stop()` method. - """ - # abort any running killable intent - self.bus.emit(Message(self.skill_id + ".stop")) - - def __stop_timeout(): - # The self.stop() call took more than 100ms, assume it handled Stop - self.bus.emit(Message('mycroft.stop.handled', - {'skill_id': str(self.skill_id) + ':'})) - - timer = Timer(0.1, __stop_timeout) # set timer for 100ms - try: - if self.stop(): - self.bus.emit(Message("mycroft.stop.handled", - {"by": "skill:" + self.skill_id})) - timer.cancel() - except Exception: - timer.cancel() - LOG.error('Failed to stop skill: {}'.format(self.name), - exc_info=True) - - def default_shutdown(self): - super().default_shutdown() - # kill any running kthreads from decorators - for t in self._threads: - try: - t.kill() - except: - pass diff --git a/neon_core/skills/service.py b/neon_core/skills/service.py index 5a1a575e2..794b0257c 100644 --- a/neon_core/skills/service.py +++ b/neon_core/skills/service.py @@ -48,8 +48,7 @@ from neon_core.util.diagnostic_utils import report_metric from neon_core.util.qml_file_server import start_qml_http_server -from mycroft.skills.fallback_skill import FallbackSkill -# TODO: Update to import from ovos-workshop +from ovos_workshop.skills.fallback import FallbackSkill from mycroft.skills.api import SkillApi from mycroft.skills.event_scheduler import EventScheduler diff --git a/neon_core/skills/skill_manager.py b/neon_core/skills/skill_manager.py index af972c52b..62bde837d 100644 --- a/neon_core/skills/skill_manager.py +++ b/neon_core/skills/skill_manager.py @@ -39,9 +39,6 @@ from mycroft.skills.skill_manager import SkillManager -SKILL_MAIN_MODULE = '__init__.py' -# TODO: deprecate `SKILL_MAIN_MODULE`? - class NeonSkillManager(SkillManager): diff --git a/neon_core/stt/__init__.py b/neon_core/stt/__init__.py deleted file mode 100644 index 004ff5045..000000000 --- a/neon_core/stt/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -# NEON AI (TM) SOFTWARE, Software Development Kit & Application Framework -# All trademark and other rights reserved by their respective owners -# Copyright 2008-2022 Neongecko.com Inc. -# Contributors: Daniel McKnight, Guy Daniels, Elon Gasper, Richard Leeds, -# Regina Bloomstine, Casimiro Ferreira, Andrii Pernatii, Kirill Hrymailo -# BSD-3 License -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# backwards compatibility - -from neon_speech.stt import * -from neon_utils import LOG -LOG.warning(f"This reference is deprecated. Import from neon_speech.stt directly!") -# TODO: Deprecate in neon_core 22.04 diff --git a/neon_core/tts/__init__.py b/neon_core/tts/__init__.py deleted file mode 100644 index 9e888067d..000000000 --- a/neon_core/tts/__init__.py +++ /dev/null @@ -1,32 +0,0 @@ -# NEON AI (TM) SOFTWARE, Software Development Kit & Application Framework -# All trademark and other rights reserved by their respective owners -# Copyright 2008-2022 Neongecko.com Inc. -# Contributors: Daniel McKnight, Guy Daniels, Elon Gasper, Richard Leeds, -# Regina Bloomstine, Casimiro Ferreira, Andrii Pernatii, Kirill Hrymailo -# BSD-3 License -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -from neon_audio.tts import TTS, PlaybackThread, TTSValidator, TTSFactory, load_tts_plugin -from neon_utils import LOG -LOG.warning(f"This reference is deprecated. Import from neon_audio.tts directly!") -# TODO: Deprecate in neon_core 22.04 diff --git a/test/test_language.py b/test/test_language.py index 4e0ee9c99..07e9975ff 100644 --- a/test/test_language.py +++ b/test/test_language.py @@ -68,31 +68,42 @@ def test_get_lang_config(self): def test_get_language_dir_valid(self): from neon_core.language import get_language_dir base_dir = os.path.join(os.path.dirname(__file__), "lang_res") - self.assertEqual(get_language_dir(base_dir), os.path.join(base_dir, "en-us")) + self.assertEqual(get_language_dir(base_dir), + os.path.join(base_dir, "en-us")) for search, result in resolved_languages.items(): - self.assertEqual(get_language_dir(base_dir, search), os.path.join(base_dir, result)) - # self.assertEqual(get_language_dir(base_dir, "en-uk"), os.path.join(base_dir, "en-uk")) - # self.assertEqual(get_language_dir(base_dir, "en-au"), os.path.join(base_dir, "en")) - # self.assertEqual(get_language_dir(base_dir, "es-mx"), os.path.join(base_dir, "es-es")) - # self.assertEqual(get_language_dir(base_dir, "es-es"), os.path.join(base_dir, "es-es")) - # self.assertEqual(get_language_dir(base_dir, "es"), os.path.join(base_dir, "es-es")) + self.assertEqual(get_language_dir(base_dir, search), + os.path.join(base_dir, result)) + self.assertEqual(get_language_dir(base_dir, "en-uk"), + os.path.join(base_dir, "en-uk")) + self.assertEqual(get_language_dir(base_dir, "en-au"), + os.path.join(base_dir, "en")) + self.assertEqual(get_language_dir(base_dir, "es-mx"), + os.path.join(base_dir, "es-es")) + self.assertEqual(get_language_dir(base_dir, "es-es"), + os.path.join(base_dir, "es-es")) + self.assertEqual(get_language_dir(base_dir, "es"), + os.path.join(base_dir, "es-es")) def test_get_language_dir_invalid(self): from neon_core.language import get_language_dir base_dir = os.path.join(os.path.dirname(__file__), "lang_res") - self.assertEqual(get_language_dir(base_dir, "ru"), os.path.join(base_dir, "ru")) - self.assertEqual(get_language_dir(base_dir, "ru-ru"), os.path.join(base_dir, "ru-ru")) + self.assertEqual(get_language_dir(base_dir, "ru"), + os.path.join(base_dir, "ru")) + self.assertEqual(get_language_dir(base_dir, "ru-ru"), + os.path.join(base_dir, "ru-ru")) def test_translator(self): from neon_core.language import TranslatorFactory - translator = TranslatorFactory.create("libretranslate_plug") + translator = TranslatorFactory.create( + {"module": "libretranslate_plug"}) self.assertIsInstance(translator, LanguageTranslator) output = translator.translate("hello", "es-es", "en-us") self.assertEqual(output.lower(), "hola") def test_detector(self): from neon_core.language import DetectorFactory - detector = DetectorFactory.create("libretranslate_detection_plug") + detector = DetectorFactory.create( + {"module": "libretranslate_detection_plug"}) self.assertIsInstance(detector, LanguageDetector) lang = detector.detect("hello") self.assertEqual(lang, "en") From 814a268d3c63f7c8dab1f03988b92eebf1e21e83 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Tue, 7 Feb 2023 20:30:06 +0000 Subject: [PATCH 02/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index b6d85926f..2a404bfe7 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.3" +__version__ = "22.10.4a0" From 9edb4066dc009ff85538ad0cc1dad2d0c9c7186d Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Thu, 9 Feb 2023 14:54:50 -0800 Subject: [PATCH 03/37] Add homeassistant plugin to pi requirements (#363) * Add homeassistant plugin and skill to pi requirements * Remove WIP HomeAssistant skill --- requirements/pi.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/pi.txt b/requirements/pi.txt index d0009be9c..6dd23fef8 100644 --- a/requirements/pi.txt +++ b/requirements/pi.txt @@ -36,9 +36,9 @@ ovos-phal-plugin-dashboard>=0.0.2a3 ovos-phal-plugin-alsa~=0.0.2 ovos-phal-plugin-system~=0.0.3 ovos-phal-plugin-connectivity-events~=0.0.1 +ovos-phal-plugin-homeassistant>=0.0.0a3 ovos-phal-plugin-ipgeo @ git+https://github.com/OpenVoiceOS/ovos-PHAL-plugin-ipgeo # ovos-phal-plugin-gpsd @ git+https://github.com/OpenVoiceOS/ovos-PHAL-plugin-gpsd -# ovos-phal-plugin-homeassistant @ git+https://github.com/OpenVoiceOS/ovos-PHAL-plugin-homeassistant@feat/groups_fixes_new_entities # Pi-specific skills neon-skill-update~=0.1,>=0.1.1 From 0e3cac88ffd434d0b62812900efc5611c8b4b57c Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Thu, 9 Feb 2023 22:55:17 +0000 Subject: [PATCH 04/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 2a404bfe7..395700d9a 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a0" +__version__ = "22.10.4a1" From 5ec9a6da923735f38fc8ef24485b58018cec91f7 Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Thu, 16 Feb 2023 17:33:23 -0800 Subject: [PATCH 05/37] Update automation to shared repository (#367) --- .github/workflows/license_tests.yml | 34 +------ .github/workflows/publish_release.yml | 81 ++-------------- .github/workflows/publish_test_build.yml | 111 ++-------------------- .github/workflows/pull_master.yml | 15 +-- .github/workflows/unit_tests.yml | 21 ++-- .github/workflows/update_skills_image.yml | 44 ++------- 6 files changed, 38 insertions(+), 268 deletions(-) diff --git a/.github/workflows/license_tests.yml b/.github/workflows/license_tests.yml index acaf981c4..a284db6bc 100644 --- a/.github/workflows/license_tests.yml +++ b/.github/workflows/license_tests.yml @@ -5,36 +5,4 @@ on: jobs: license_tests: - timeout-minutes: 15 - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Setup Python - uses: actions/setup-python@v1 - with: - python-version: 3.8 - - name: Install Build Tools - run: | - python -m pip install build wheel - - name: Install System Dependencies - run: | - sudo apt-get update - sudo apt install python3-dev swig libssl-dev libfann-dev portaudio19-dev libpulse-dev - - name: Install core repo - run: | - pip install .[pi,docker] - - name: Get explicit and transitive dependencies - run: | - pip freeze > requirements-all.txt - - name: Check python - id: license_check_report - uses: pilosus/action-pip-license-checker@v0.5.0 - with: - requirements: 'requirements-all.txt' - fail: 'Copyleft,Other,Error' - fails-only: true - exclude: '^(precise-runner|fann2|tqdm|bs4|ovos-phal-plugin|ovos-skill|neon-core|nvidia|neon-phal-plugin).*' - exclude-license: '^(Mozilla|NeonAI License v1.0).*$' - - name: Print report - if: ${{ always() }} - run: echo "${{ steps.license_check_report.outputs.report }}" \ No newline at end of file + uses: neongeckocom/.github/.github/workflows/license_tests.yml@master diff --git a/.github/workflows/publish_release.yml b/.github/workflows/publish_release.yml index 3ea96e45b..e34a096bc 100644 --- a/.github/workflows/publish_release.yml +++ b/.github/workflows/publish_release.yml @@ -6,76 +6,15 @@ on: branches: - master -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository_owner }}/neon_skills - jobs: - tag_release: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Get Version - run: | - VERSION=$(python setup.py --version) - echo "VERSION=${VERSION}" >> $GITHUB_ENV - - uses: ncipollo/release-action@v1 - with: - token: ${{secrets.GITHUB_TOKEN}} - tag: ${{env.VERSION}} + build_and_publish_pypi_and_release: + uses: neongeckocom/.github/.github/workflows/publish_stable_release.yml@master + secrets: inherit build_and_publish_docker: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - steps: - - name: Checkout repository - uses: actions/checkout@v2 - with: - ref: ${{ github.ref }} - - name: Get Version - id: version - run: | - VERSION=$(sed "s/a/-a./" <<< $(python setup.py --version)) - echo ::set-output name=version::${VERSION} - - - name: Log in to the Container registry - uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for base Docker - id: base_meta - uses: docker/metadata-action@v2 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | - type=semver,pattern={{version}},value=${{ steps.version.outputs.version }} - type=ref,event=branch - - name: Build and push base Docker image - uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc - with: - context: . - push: true - tags: ${{ steps.base_meta.outputs.tags }} - labels: ${{ steps.base_meta.outputs.labels }} - target: base - - - name: Extract metadata for default_skills Docker - id: default_skills_meta - uses: docker/metadata-action@v2 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-default_skills - tags: | - type=semver,pattern={{version}},value=${{ steps.version.outputs.version }} - type=ref,event=branch - - name: Build and push default_skills Docker image - uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc - with: - context: . - push: true - tags: ${{ steps.default_skills_meta.outputs.tags }} - labels: ${{ steps.default_skills_meta.outputs.labels }} - target: default_skills + needs: build_and_publish_pypi_and_release + uses: neongeckocom/.github/.github/workflows/publish_docker.yml@master + secrets: inherit + with: + image_name: ${{ github.repository_owner }}/neon_skills + base_tag: base + extra_tag: default_skills diff --git a/.github/workflows/publish_test_build.yml b/.github/workflows/publish_test_build.yml index a0411836c..84b3042db 100644 --- a/.github/workflows/publish_test_build.yml +++ b/.github/workflows/publish_test_build.yml @@ -8,106 +8,15 @@ on: paths-ignore: - 'version.py' -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository_owner }}/neon_skills - jobs: - increment_version: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ github.head_ref }} - - name: Setup Python - uses: actions/setup-python@v1 - with: - python-version: 3.8 - - name: Install Build Tools - run: | - python -m pip install build wheel - - name: Increment Version - run: | - VER=$(python setup.py --version) - python version_bump.py - - name: Push Version Change - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: Increment Version - tag_alpha_release: - runs-on: ubuntu-latest - needs: increment_version - steps: - - name: Checkout repository - uses: actions/checkout@v2 - with: - ref: ${{ github.ref }} - - name: Get Version - id: version - run: | - VERSION=$(python setup.py --version) - echo ::set-output name=version::${VERSION} - - name: Create Pre-release - uses: ncipollo/release-action@v1 - with: - token: ${{secrets.GITHUB_TOKEN}} - tag: ${{steps.version.outputs.version}} - commit: ${{ github.ref }} - prerelease: true + build_and_publish_pypi: + uses: neongeckocom/.github/.github/workflows/publish_alpha_release.yml@master + secrets: inherit build_and_publish_docker: - runs-on: ubuntu-latest - needs: increment_version - permissions: - contents: read - packages: write - steps: - - name: Checkout repository - uses: actions/checkout@v2 - with: - ref: ${{ github.ref }} - - name: Get Version - id: version - run: | - VERSION=$(sed "s/a/-a./" <<< $(python setup.py --version)) - echo ::set-output name=version::${VERSION} - - - name: Log in to the Container registry - uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for base Docker - id: base_meta - uses: docker/metadata-action@v2 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | - type=semver,pattern={{version}},value=${{ steps.version.outputs.version }} - type=ref,event=branch - - name: Build and push base Docker image - uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc - with: - context: . - push: true - tags: ${{ steps.base_meta.outputs.tags }} - labels: ${{ steps.base_meta.outputs.labels }} - target: base - - - name: Extract metadata for default_skills Docker - id: default_skills_meta - uses: docker/metadata-action@v2 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-default_skills - tags: | - type=semver,pattern={{version}},value=${{ steps.version.outputs.version }} - type=ref,event=branch - - name: Build and push default_skills Docker image - uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc - with: - context: . - push: true - tags: ${{ steps.default_skills_meta.outputs.tags }} - labels: ${{ steps.default_skills_meta.outputs.labels }} - target: default_skills \ No newline at end of file + needs: build_and_publish_pypi + uses: neongeckocom/.github/.github/workflows/publish_docker.yml@master + secrets: inherit + with: + image_name: ${{ github.repository_owner }}/neon_skills + base_tag: base + extra_tag: default_skills diff --git a/.github/workflows/pull_master.yml b/.github/workflows/pull_master.yml index 8e9c5a87f..8ab60d36b 100644 --- a/.github/workflows/pull_master.yml +++ b/.github/workflows/pull_master.yml @@ -5,17 +5,10 @@ on: push: branches: - dev - workflow_dispatch: jobs: pull_changes: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: pull-request-action - uses: repo-sync/pull-request@v2 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - pr_reviewer: 'neonreviewers' - pr_assignee: 'neondaniel' - pr_draft: true \ No newline at end of file + uses: neongeckocom/.github/.github/workflows/pull_master.yml@master + with: + pr_reviewer: neonreviewers + pr_assignee: neondaniel diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 531ade191..d7a81ca88 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -5,22 +5,13 @@ on: push: workflow_dispatch: -# TODO: Run tests here for everything in NeonCore jobs: - build_tests: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Setup Python - uses: actions/setup-python@v1 - with: - python-version: 3.8 - - name: Install Build Tools - run: | - python -m pip install build wheel - - name: Build Distribution Packages - run: | - python setup.py bdist_wheel + py_build_tests: + uses: neongeckocom/.github/.github/workflows/python_build_tests.yml@master + with: + python_version: "3.8" + docker_build_tests: + uses: neongeckocom/.github/.github/workflows/docker_build_tests.yml@master util_tests: strategy: matrix: diff --git a/.github/workflows/update_skills_image.yml b/.github/workflows/update_skills_image.yml index 4b8330db8..d9ebb33ef 100644 --- a/.github/workflows/update_skills_image.yml +++ b/.github/workflows/update_skills_image.yml @@ -2,41 +2,11 @@ name: Update Skills Image on: workflow_dispatch: -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository_owner }}/neon_skills - jobs: - update_default_skills_image: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - steps: - - name: Checkout repository - uses: actions/checkout@v2 - with: - ref: ${{ github.ref }} - - - name: Log in to the Container registry - uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for default_skills Docker - id: default_skills_meta - uses: docker/metadata-action@v2 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-default_skills - tags: | - type=ref,event=branch - - name: Build and push default_skills Docker image - uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc - with: - context: . - push: true - tags: ${{ steps.default_skills_meta.outputs.tags }} - labels: ${{ steps.default_skills_meta.outputs.labels }} - target: default_skills \ No newline at end of file + build_and_publish_docker: + needs: build_and_publish_pypi + uses: neongeckocom/.github/.github/workflows/publish_docker.yml@master + secrets: inherit + with: + image_name: ${{ github.repository_owner }}/neon_skills-default_skills + base_tag: default_skills \ No newline at end of file From 0a133bf456af92c810545a189b56d942833b4878 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Fri, 17 Feb 2023 01:34:12 +0000 Subject: [PATCH 06/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 395700d9a..4d2cbf1a4 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a1" +__version__ = "22.10.4a2" From a8bc131c132db817120fc5428f7bea955c99cc21 Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Wed, 22 Feb 2023 18:09:56 -0800 Subject: [PATCH 07/37] Remove invalid pypi automation (#369) --- .github/workflows/publish_release.yml | 15 ++++++-- .github/workflows/publish_test_build.yml | 46 +++++++++++++++++++++--- 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/.github/workflows/publish_release.yml b/.github/workflows/publish_release.yml index e34a096bc..1feaa0e6c 100644 --- a/.github/workflows/publish_release.yml +++ b/.github/workflows/publish_release.yml @@ -7,9 +7,18 @@ on: - master jobs: - build_and_publish_pypi_and_release: - uses: neongeckocom/.github/.github/workflows/publish_stable_release.yml@master - secrets: inherit + tag_release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Get Version + run: | + VERSION=$(python setup.py --version) + echo "VERSION=${VERSION}" >> $GITHUB_ENV + - uses: ncipollo/release-action@v1 + with: + token: ${{secrets.GITHUB_TOKEN}} + tag: ${{env.VERSION}} build_and_publish_docker: needs: build_and_publish_pypi_and_release uses: neongeckocom/.github/.github/workflows/publish_docker.yml@master diff --git a/.github/workflows/publish_test_build.yml b/.github/workflows/publish_test_build.yml index 84b3042db..77c35de29 100644 --- a/.github/workflows/publish_test_build.yml +++ b/.github/workflows/publish_test_build.yml @@ -9,11 +9,49 @@ on: - 'version.py' jobs: - build_and_publish_pypi: - uses: neongeckocom/.github/.github/workflows/publish_alpha_release.yml@master - secrets: inherit + increment_version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.head_ref }} + - name: Setup Python + uses: actions/setup-python@v1 + with: + python-version: 3.8 + - name: Install Build Tools + run: | + python -m pip install build wheel + - name: Increment Version + run: | + VER=$(python setup.py --version) + python version_bump.py + - name: Push Version Change + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: Increment Version + tag_alpha_release: + runs-on: ubuntu-latest + needs: increment_version + steps: + - name: Checkout repository + uses: actions/checkout@v2 + with: + ref: ${{ github.ref }} + - name: Get Version + id: version + run: | + VERSION=$(python setup.py --version) + echo ::set-output name=version::${VERSION} + - name: Create Pre-release + uses: ncipollo/release-action@v1 + with: + token: ${{secrets.GITHUB_TOKEN}} + tag: ${{steps.version.outputs.version}} + commit: ${{ github.ref }} + prerelease: true build_and_publish_docker: - needs: build_and_publish_pypi + needs: increment_version uses: neongeckocom/.github/.github/workflows/publish_docker.yml@master secrets: inherit with: From 52e495f85431c94f980bb5c5662926a578e68b9f Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Thu, 23 Feb 2023 02:10:19 +0000 Subject: [PATCH 08/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 4d2cbf1a4..ee7b3535e 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a2" +__version__ = "22.10.4a3" From bb78cd5cc47fb67be47e5e38203a05f986d448e3 Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Thu, 23 Feb 2023 17:12:47 -0800 Subject: [PATCH 09/37] Update Dependencies to Alpha Versions (#368) * Update skills to include runtime requirements Update news skill to troubleshoot user reported bugs * Bump minimum neon-utils to test automation changes * Add neon-utils audio extra to test alpha version * More alpha version resolution troubleshooting * Update alpha skills * Update core dependencies to alpha versions Update connectivity events plugin dependency * Update DDG and geolocation plugin to PyPI specs * Update update skill dependency Add somaFM to extended skills * Fix somafm skill spec --- requirements/core_modules.txt | 16 +++++++++------- requirements/pi.txt | 6 +++--- requirements/requirements.txt | 4 ++-- requirements/skills_default.txt | 30 +++++++++++++++--------------- requirements/skills_essential.txt | 10 +++++----- requirements/skills_extended.txt | 3 ++- requirements/skills_required.txt | 6 +++--- 7 files changed, 39 insertions(+), 36 deletions(-) diff --git a/requirements/core_modules.txt b/requirements/core_modules.txt index 8929d0988..bc264fc54 100644 --- a/requirements/core_modules.txt +++ b/requirements/core_modules.txt @@ -1,8 +1,10 @@ # neon core modules -ovos-core[audio]~=0.0.6 -# Above ensures alpha versions for neon_audio -neon_messagebus~=0.3 -neon_gui~=1.1,>=1.1.1 -neon_enclosure~=1.2 -neon_speech~=3.1 -neon_audio~=1.3 +neon_messagebus~=0.3,>=0.3.1a3 +neon_gui~=1.1,>=1.1.2a1 +neon_enclosure~=1.2,>=1.2.1a3 +neon_speech~=3.1,>=3.1.1a4 +neon_audio~=1.3,>=1.3.1a3 + +# Below patching alpha version conflicts +neon-utils[audio]~=1.2,>=1.2.2a4 +ovos-core[audio]~=0.0.6,>=0.0.7a7 diff --git a/requirements/pi.txt b/requirements/pi.txt index 6dd23fef8..920e615dd 100644 --- a/requirements/pi.txt +++ b/requirements/pi.txt @@ -35,12 +35,12 @@ ovos-phal-plugin-wifi-setup~=1.0,>=1.0.1 ovos-phal-plugin-dashboard>=0.0.2a3 ovos-phal-plugin-alsa~=0.0.2 ovos-phal-plugin-system~=0.0.3 -ovos-phal-plugin-connectivity-events~=0.0.1 +ovos-phal-plugin-connectivity-events~=0.0.1,>=0.0.2a1 ovos-phal-plugin-homeassistant>=0.0.0a3 -ovos-phal-plugin-ipgeo @ git+https://github.com/OpenVoiceOS/ovos-PHAL-plugin-ipgeo +ovos-phal-plugin-ipgeo>=0.0.1a1 # ovos-phal-plugin-gpsd @ git+https://github.com/OpenVoiceOS/ovos-PHAL-plugin-gpsd # Pi-specific skills -neon-skill-update~=0.1,>=0.1.1 +neon-skill-update~=0.1,>=0.1.2a2 ovos-skill-homescreen~=0.0.1 ovos-skill-setup~=0.0.1 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index b3cc19ee3..5485db095 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,7 +1,7 @@ # mycroft -ovos-core[skills_lgpl]~=0.0.6 +ovos-core[skills_lgpl]~=0.0.6,>=0.0.7a7 # utils -neon-utils[network,configuration]~=1.2,>=1.2.1 +neon-utils[network,configuration]~=1.2,>=1.2.2a4 neon-transformers~=0.2 ovos_utils~=0.0.27 ovos-config~=0.0.5 diff --git a/requirements/skills_default.txt b/requirements/skills_default.txt index 118632276..a782b8ef4 100644 --- a/requirements/skills_default.txt +++ b/requirements/skills_default.txt @@ -1,16 +1,16 @@ -skill-ddg @ git+https://github.com/openvoiceos/skill-ddg -neon-skill-alerts~=1.1 -neon-skill-caffeinewiz~=0.2,>=0.2.3 -neon-skill-data_controls~=0.1,>=0.1.1 -neon-skill-fallback_wolfram_alpha~=0.0.3 -neon-skill-personal~=0.1 -neon-skill-speak~=0.0.3 -neon-skill-speed_test~=0.3 -neon-skill-spelling~=0.0.2 -neon-skill-stock~=0.1,>=0.1.1 -neon-skill-support_helper~=0.0.2 -neon-skill-user_settings~=0.2 -neon-skill-weather~=0.0.2 +skill-ddg>=0.0.1a1 +neon-skill-alerts~=1.1,>=1.1.1a0 +neon-skill-caffeinewiz~=0.2,>=0.2.4a0 +neon-skill-data_controls~=0.1,>=0.1.2a1 +neon-skill-fallback_wolfram_alpha~=0.0.3,>=0.0.4a0 +neon-skill-personal~=0.1,>=0.1.1a0 +neon-skill-speak~=0.0.3,>=0.0.4a0 +neon-skill-speed_test~=0.3,>=0.3.1a0 +neon-skill-spelling~=0.0.2,>=0.0.3a2 +neon-skill-stock~=0.1,>=0.1.2a0 +neon-skill-support_helper~=0.0.2,>=0.0.3a2 +neon-skill-user_settings~=0.2,>=0.2.1a0 +neon-skill-weather~=0.0.2,>=0.0.3a2 neon-skill-wikipedia~=0.3,>=0.3.1 -neon-skill-free_music_archive~=0.0.1 -neon-skill-local_music~=0.0.2 \ No newline at end of file +neon-skill-free_music_archive~=0.0.1,>=0.0.2a2 +neon-skill-local_music~=0.0.2,>=0.0.3a0 \ No newline at end of file diff --git a/requirements/skills_essential.txt b/requirements/skills_essential.txt index cafc07575..213cc68ea 100644 --- a/requirements/skills_essential.txt +++ b/requirements/skills_essential.txt @@ -1,5 +1,5 @@ -neon-skill-about~=0.1 -neon-skill-date_time~=0.0.3 -neon-skill-demo~=0.2 -neon-skill-device_controls~=0.0.2 -neon-skill-ip_address~=0.0.3 +neon-skill-about~=0.1,>=0.1.2a0 +neon-skill-date_time~=0.0.3,>=0.0.4a3 +neon-skill-demo~=0.2,>=0.2.1a0 +neon-skill-device_controls~=0.0.2,>=0.0.3a4 +neon-skill-ip_address~=0.0.3,>=0.0.4a3 diff --git a/requirements/skills_extended.txt b/requirements/skills_extended.txt index f0155b67f..d5f2234a3 100644 --- a/requirements/skills_extended.txt +++ b/requirements/skills_extended.txt @@ -3,8 +3,9 @@ neon-skill-custom_conversation neon-skill-instructions neon-skill-launcher~=0.3,>=0.3.1 neon-skill-messaging -skill-news~=0.0.2 +skill-news~=0.0.2,>=0.0.3a12 # neon-skill-recipes neon-skill-synonyms~=0.0.1 neon-skill-translation~=0.2 neon-skill-camera~=0.1,>=0.1.1 +ovos-skill-somafm>=0.0.1a1 \ No newline at end of file diff --git a/requirements/skills_required.txt b/requirements/skills_required.txt index 77806625c..db3454e97 100644 --- a/requirements/skills_required.txt +++ b/requirements/skills_required.txt @@ -1,3 +1,3 @@ -ovos-skill-stop~=0.2 -neon-skill-fallback_unknown~=0.1 -neon-skill-communication~=0.0.2 \ No newline at end of file +ovos-skill-stop~=0.2,>=0.2.1a1 +neon-skill-fallback_unknown~=0.1,>=0.1.2a0 +neon-skill-communication~=0.0.2,>=0.0.3a1 \ No newline at end of file From a98b36ca94d5792ba5c4ae1f0e536244aa7c7be2 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Fri, 24 Feb 2023 01:13:12 +0000 Subject: [PATCH 10/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index ee7b3535e..8b5a06c4f 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a3" +__version__ = "22.10.4a4" From 296e7199a1b0650cacbb4498fa029a3b6e6c1c8a Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Thu, 2 Mar 2023 13:08:43 -0800 Subject: [PATCH 11/37] Update DCC skill and Speech module to support WW change (#370) * Update DCC skill and Speech module to support WW change * Update dependencies --- requirements/core_modules.txt | 2 +- requirements/skills_essential.txt | 8 ++++---- requirements/skills_required.txt | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/requirements/core_modules.txt b/requirements/core_modules.txt index bc264fc54..7db418625 100644 --- a/requirements/core_modules.txt +++ b/requirements/core_modules.txt @@ -2,7 +2,7 @@ neon_messagebus~=0.3,>=0.3.1a3 neon_gui~=1.1,>=1.1.2a1 neon_enclosure~=1.2,>=1.2.1a3 -neon_speech~=3.1,>=3.1.1a4 +neon_speech~=3.1,>=3.1.1a8 neon_audio~=1.3,>=1.3.1a3 # Below patching alpha version conflicts diff --git a/requirements/skills_essential.txt b/requirements/skills_essential.txt index 213cc68ea..1d2fedb33 100644 --- a/requirements/skills_essential.txt +++ b/requirements/skills_essential.txt @@ -1,5 +1,5 @@ -neon-skill-about~=0.1,>=0.1.2a0 -neon-skill-date_time~=0.0.3,>=0.0.4a3 +neon-skill-about~=0.2 +neon-skill-date_time~=0.0.3,>=0.0.4a8 neon-skill-demo~=0.2,>=0.2.1a0 -neon-skill-device_controls~=0.0.2,>=0.0.3a4 -neon-skill-ip_address~=0.0.3,>=0.0.4a3 +neon-skill-device_controls~=0.0.2,>=0.0.3a7 +neon-skill-ip_address~=0.1 diff --git a/requirements/skills_required.txt b/requirements/skills_required.txt index db3454e97..ce6166903 100644 --- a/requirements/skills_required.txt +++ b/requirements/skills_required.txt @@ -1,3 +1,3 @@ ovos-skill-stop~=0.2,>=0.2.1a1 -neon-skill-fallback_unknown~=0.1,>=0.1.2a0 -neon-skill-communication~=0.0.2,>=0.0.3a1 \ No newline at end of file +neon-skill-fallback_unknown~=0.2 +neon-skill-communication~=0.1 \ No newline at end of file From f822e6098ba7d441e940c91d40006abf7355d144 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Thu, 2 Mar 2023 21:09:07 +0000 Subject: [PATCH 12/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 8b5a06c4f..873cee88d 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a4" +__version__ = "22.10.4a5" From 8d49774fa9cee28dbf97f2054d7b42599ec4f5a0 Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Fri, 3 Mar 2023 18:56:21 -0800 Subject: [PATCH 13/37] Update core updater dependency (#371) * Update core updater dependency * Resolve ovos-config compat bugs * Update neon-utils dependency spec * Blacklist problematic ovos-utils versions * Blacklist problematic ovos-utils versions --- requirements/pi.txt | 2 +- requirements/requirements.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements/pi.txt b/requirements/pi.txt index 920e615dd..2bd440d0b 100644 --- a/requirements/pi.txt +++ b/requirements/pi.txt @@ -20,7 +20,7 @@ ovos-stt-plugin-vosk~=0.1,>=0.1.4 # PHAL Plugins neon-phal-plugin-reset~=0.1 -neon-phal-plugin-core-updater~=0.1 +neon-phal-plugin-core-updater~=0.1,>=0.1.1a0 neon-phal-plugin-fan~=0.0.3 neon-phal-plugin-switches~=0.0.3 neon-phal-plugin-linear_led~=0.1 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 5485db095..6e4e53e52 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,9 +1,9 @@ # mycroft ovos-core[skills_lgpl]~=0.0.6,>=0.0.7a7 # utils -neon-utils[network,configuration]~=1.2,>=1.2.2a4 +neon-utils[network,configuration]~=1.2,>=1.2.3a0 neon-transformers~=0.2 -ovos_utils~=0.0.27 +ovos_utils~=0.0.27, !=0.0.29a2, !=0.0.29a1, !=0.0.29 ovos-config~=0.0.5 ovos-skills-manager~=0.0.12 ovos-plugin-manager~=0.0.21 From eb375350e57a3c84516553e67beb51a9a3c195bd Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Sat, 4 Mar 2023 02:56:40 +0000 Subject: [PATCH 14/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 873cee88d..170ca8abd 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a5" +__version__ = "22.10.4a6" From 17b01e39fdc075755071f3546414788958c5c942 Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Mon, 6 Mar 2023 12:23:45 -0800 Subject: [PATCH 15/37] Enclosure Module Docker Compose (#373) * Update enclosure dependency to latest * Add enclosure to docker-compose.yml * Update neon-utils dependency * Stable enclosure dependency --- docker/docker-compose.yml | 26 +++++++++++++++++++++++++- requirements/core_modules.txt | 4 ++-- requirements/requirements.txt | 2 +- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index f1d02ed5d..29c65cfa0 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -119,4 +119,28 @@ services: - XDG_CONFIG_HOME=/xdg/config - XDG_DATA_HOME=/xdg/data - XDG_CACHE_HOME=/xdg/cache - - XDG_STATE_HOME=/xdg/state \ No newline at end of file + - XDG_STATE_HOME=/xdg/state + neon-enclosure: + container_name: neon-enclosure + image: ghcr.io/neongeckocom/neon_enclosure:master + networks: + - neon-core + volumes: + - config:/config:ro + - ~/.config/pulse/cookie:/tmp/pulse_cookie:ro + - ${XDG_RUNTIME_DIR}/pulse:${XDG_RUNTIME_DIR}/pulse:ro + - /run/dbus/system_dbus_socket:/run/dbus/system_dbus_socket:rw + - /tmp/.X11-unix:/tmp/.X11-unix:ro + - xdg:/xdg:rw + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + environment: + - PULSE_SERVER=unix:${XDG_RUNTIME_DIR}/pulse/native + - PULSE_COOKIE=/tmp/pulse_cookie + - DISPLAY=${DISPLAY} + - XDG_CONFIG_HOME=/xdg/config + - XDG_DATA_HOME=/xdg/data + - XDG_CACHE_HOME=/xdg/cache + - XDG_STATE_HOME=/xdg/state + devices: + - /dev/snd:/dev/snd \ No newline at end of file diff --git a/requirements/core_modules.txt b/requirements/core_modules.txt index 7db418625..2c1d0fd1e 100644 --- a/requirements/core_modules.txt +++ b/requirements/core_modules.txt @@ -1,10 +1,10 @@ # neon core modules neon_messagebus~=0.3,>=0.3.1a3 neon_gui~=1.1,>=1.1.2a1 -neon_enclosure~=1.2,>=1.2.1a3 +neon_enclosure~=1.3 neon_speech~=3.1,>=3.1.1a8 neon_audio~=1.3,>=1.3.1a3 # Below patching alpha version conflicts -neon-utils[audio]~=1.2,>=1.2.2a4 +neon-utils[audio]~=1.2,>=1.2.3 ovos-core[audio]~=0.0.6,>=0.0.7a7 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 6e4e53e52..b9d5dbb6f 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,7 +1,7 @@ # mycroft ovos-core[skills_lgpl]~=0.0.6,>=0.0.7a7 # utils -neon-utils[network,configuration]~=1.2,>=1.2.3a0 +neon-utils[network,configuration]~=1.2,>=1.2.3 neon-transformers~=0.2 ovos_utils~=0.0.27, !=0.0.29a2, !=0.0.29a1, !=0.0.29 ovos-config~=0.0.5 From e503e0e9e9a21a716010080d0f4bd9d202d7baa4 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Mon, 6 Mar 2023 20:24:15 +0000 Subject: [PATCH 16/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 170ca8abd..6943da9a4 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a6" +__version__ = "22.10.4a7" From 2e1814c321d3388648a061a18313d88341269625 Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Tue, 7 Mar 2023 13:16:32 -0800 Subject: [PATCH 17/37] Update neon-utils dependency to support latest ovos-utils (#374) * Troubleshooting ovos-utils config compat. bug * Remove ovos-utils excluded versions * Update neon-utils dependency spec --- requirements/core_modules.txt | 2 +- requirements/requirements.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements/core_modules.txt b/requirements/core_modules.txt index 2c1d0fd1e..d37fd0b6e 100644 --- a/requirements/core_modules.txt +++ b/requirements/core_modules.txt @@ -6,5 +6,5 @@ neon_speech~=3.1,>=3.1.1a8 neon_audio~=1.3,>=1.3.1a3 # Below patching alpha version conflicts -neon-utils[audio]~=1.2,>=1.2.3 +neon-utils[audio]~=1.2,>=1.2.4a0 ovos-core[audio]~=0.0.6,>=0.0.7a7 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index b9d5dbb6f..8021d57e6 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,9 +1,9 @@ # mycroft ovos-core[skills_lgpl]~=0.0.6,>=0.0.7a7 # utils -neon-utils[network,configuration]~=1.2,>=1.2.3 +neon-utils[network,configuration]~=1.2,>=1.2.4a0 neon-transformers~=0.2 -ovos_utils~=0.0.27, !=0.0.29a2, !=0.0.29a1, !=0.0.29 +ovos_utils~=0.0.27 ovos-config~=0.0.5 ovos-skills-manager~=0.0.12 ovos-plugin-manager~=0.0.21 From 0876ae37e7b0a1fb4058121b1bf27118188e1f4a Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Tue, 7 Mar 2023 21:16:55 +0000 Subject: [PATCH 18/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 6943da9a4..5c8964f7a 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a7" +__version__ = "22.10.4a8" From a02027c9f6ed43db85d8e9a5ba2e6409fac9f419 Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Thu, 9 Mar 2023 15:25:46 -0800 Subject: [PATCH 19/37] Update Skills (#372) * Update skills to stable versions * Remove invalid CC skill spec * Update data controls skill dependency spec * Update core update plugin dependency * Update dependencies * Update stable dependencies * More stable skill and plugin dependencies * Update update skill spec * Update stop skill spec * Update stop skill spec * Bump homeassistant skill version * Update update skill dependency * Update local music skill dependency --- requirements/core_modules.txt | 2 +- requirements/pi.txt | 8 ++++---- requirements/requirements.txt | 6 +++--- requirements/skills_default.txt | 32 +++++++++++++++---------------- requirements/skills_essential.txt | 6 +++--- requirements/skills_extended.txt | 17 ++++++++-------- requirements/skills_required.txt | 2 +- 7 files changed, 37 insertions(+), 36 deletions(-) diff --git a/requirements/core_modules.txt b/requirements/core_modules.txt index d37fd0b6e..14c4668ff 100644 --- a/requirements/core_modules.txt +++ b/requirements/core_modules.txt @@ -7,4 +7,4 @@ neon_audio~=1.3,>=1.3.1a3 # Below patching alpha version conflicts neon-utils[audio]~=1.2,>=1.2.4a0 -ovos-core[audio]~=0.0.6,>=0.0.7a7 +ovos-core[audio]~=0.0.6,>=0.0.7a11 diff --git a/requirements/pi.txt b/requirements/pi.txt index 2bd440d0b..8161d7ad2 100644 --- a/requirements/pi.txt +++ b/requirements/pi.txt @@ -20,7 +20,7 @@ ovos-stt-plugin-vosk~=0.1,>=0.1.4 # PHAL Plugins neon-phal-plugin-reset~=0.1 -neon-phal-plugin-core-updater~=0.1,>=0.1.1a0 +neon-phal-plugin-core-updater~=1.0 neon-phal-plugin-fan~=0.0.3 neon-phal-plugin-switches~=0.0.3 neon-phal-plugin-linear_led~=0.1 @@ -32,15 +32,15 @@ ovos-phal-plugin-balena-wifi~=1.0.0 ovos-phal-plugin-gui-network-client~=0.0.2 ovos-phal-plugin-network-manager~=1.0.0 ovos-phal-plugin-wifi-setup~=1.0,>=1.0.1 -ovos-phal-plugin-dashboard>=0.0.2a3 +ovos-phal-plugin-dashboard==0.0.2a3 ovos-phal-plugin-alsa~=0.0.2 ovos-phal-plugin-system~=0.0.3 ovos-phal-plugin-connectivity-events~=0.0.1,>=0.0.2a1 -ovos-phal-plugin-homeassistant>=0.0.0a3 +ovos-phal-plugin-homeassistant~=0.0.1 ovos-phal-plugin-ipgeo>=0.0.1a1 # ovos-phal-plugin-gpsd @ git+https://github.com/OpenVoiceOS/ovos-PHAL-plugin-gpsd # Pi-specific skills -neon-skill-update~=0.1,>=0.1.2a2 +neon-skill-update~=0.2,>=0.2.1 ovos-skill-homescreen~=0.0.1 ovos-skill-setup~=0.0.1 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 8021d57e6..9def02bc8 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,10 +1,10 @@ # mycroft -ovos-core[skills_lgpl]~=0.0.6,>=0.0.7a7 +ovos-core[skills_lgpl]~=0.0.6,>=0.0.7a11 # utils neon-utils[network,configuration]~=1.2,>=1.2.4a0 neon-transformers~=0.2 -ovos_utils~=0.0.27 -ovos-config~=0.0.5 +ovos_utils~=0.0.27,>=0.0.30a3 +ovos-config~=0.0.5,>=0.0.7a2 ovos-skills-manager~=0.0.12 ovos-plugin-manager~=0.0.21 ovos-backend-client~=0.0.6 diff --git a/requirements/skills_default.txt b/requirements/skills_default.txt index a782b8ef4..a37a37806 100644 --- a/requirements/skills_default.txt +++ b/requirements/skills_default.txt @@ -1,16 +1,16 @@ -skill-ddg>=0.0.1a1 -neon-skill-alerts~=1.1,>=1.1.1a0 -neon-skill-caffeinewiz~=0.2,>=0.2.4a0 -neon-skill-data_controls~=0.1,>=0.1.2a1 -neon-skill-fallback_wolfram_alpha~=0.0.3,>=0.0.4a0 -neon-skill-personal~=0.1,>=0.1.1a0 -neon-skill-speak~=0.0.3,>=0.0.4a0 -neon-skill-speed_test~=0.3,>=0.3.1a0 -neon-skill-spelling~=0.0.2,>=0.0.3a2 -neon-skill-stock~=0.1,>=0.1.2a0 -neon-skill-support_helper~=0.0.2,>=0.0.3a2 -neon-skill-user_settings~=0.2,>=0.2.1a0 -neon-skill-weather~=0.0.2,>=0.0.3a2 -neon-skill-wikipedia~=0.3,>=0.3.1 -neon-skill-free_music_archive~=0.0.1,>=0.0.2a2 -neon-skill-local_music~=0.0.2,>=0.0.3a0 \ No newline at end of file +skill-ddg~=0.0 +neon-skill-alerts~=1.2 +neon-skill-caffeinewiz~=0.3 +neon-skill-data_controls~=0.2 +neon-skill-fallback_wolfram_alpha~=0.1 +neon-skill-personal~=0.2 +neon-skill-speak~=0.1 +neon-skill-speed_test~=0.4 +neon-skill-spelling~=0.1 +neon-skill-stock~=0.2 +neon-skill-support_helper~=0.1 +neon-skill-user_settings~=0.3 +neon-skill-weather~=0.1 +neon-skill-wikipedia~=0.4 +neon-skill-free_music_archive~=0.1 +neon-skill-local_music~=0.1 \ No newline at end of file diff --git a/requirements/skills_essential.txt b/requirements/skills_essential.txt index 1d2fedb33..a5f0acae4 100644 --- a/requirements/skills_essential.txt +++ b/requirements/skills_essential.txt @@ -1,5 +1,5 @@ neon-skill-about~=0.2 -neon-skill-date_time~=0.0.3,>=0.0.4a8 -neon-skill-demo~=0.2,>=0.2.1a0 -neon-skill-device_controls~=0.0.2,>=0.0.3a7 +neon-skill-date_time~=0.1 +neon-skill-demo~=0.3 +neon-skill-device_controls~=0.1 neon-skill-ip_address~=0.1 diff --git a/requirements/skills_extended.txt b/requirements/skills_extended.txt index d5f2234a3..c3fbc0a66 100644 --- a/requirements/skills_extended.txt +++ b/requirements/skills_extended.txt @@ -1,11 +1,12 @@ -neon-skill-audio_record~=0.0.2 +neon-skill-audio_record~=0.1 neon-skill-custom_conversation -neon-skill-instructions -neon-skill-launcher~=0.3,>=0.3.1 +neon-skill-instructions~=0.1 +neon-skill-launcher~=0.4 neon-skill-messaging -skill-news~=0.0.2,>=0.0.3a12 +skill-news~=0.0.3 # neon-skill-recipes -neon-skill-synonyms~=0.0.1 -neon-skill-translation~=0.2 -neon-skill-camera~=0.1,>=0.1.1 -ovos-skill-somafm>=0.0.1a1 \ No newline at end of file +neon-skill-synonyms~=0.1 +neon-skill-translation~=0.3 +neon-skill-camera~=0.2 +ovos-skill-somafm~=0.0.1 +neon-homeassistant-skill~=0.0.8 \ No newline at end of file diff --git a/requirements/skills_required.txt b/requirements/skills_required.txt index ce6166903..efff435aa 100644 --- a/requirements/skills_required.txt +++ b/requirements/skills_required.txt @@ -1,3 +1,3 @@ -ovos-skill-stop~=0.2,>=0.2.1a1 +ovos-skill-stop~=0.2,>=0.2.1 neon-skill-fallback_unknown~=0.2 neon-skill-communication~=0.1 \ No newline at end of file From a5f2224ac13189bca0abe8e4cb3c323171c64334 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Thu, 9 Mar 2023 23:26:10 +0000 Subject: [PATCH 20/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 5c8964f7a..482253dc0 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a8" +__version__ = "22.10.4a9" From b5761c25edbb9bdd2fb265c2938f0239e948c42b Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Fri, 10 Mar 2023 17:10:43 -0800 Subject: [PATCH 21/37] Update core modules and OVOS dependencies to stable releases (#377) --- requirements/core_modules.txt | 9 ++++----- requirements/pi.txt | 4 ++-- requirements/requirements.txt | 6 +++--- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/requirements/core_modules.txt b/requirements/core_modules.txt index 14c4668ff..dc4b4ee7e 100644 --- a/requirements/core_modules.txt +++ b/requirements/core_modules.txt @@ -1,10 +1,9 @@ # neon core modules -neon_messagebus~=0.3,>=0.3.1a3 -neon_gui~=1.1,>=1.1.2a1 -neon_enclosure~=1.3 +neon_messagebus~=0.3,>=0.3.1 +neon_gui~=1.1,>=1.1.2 +neon_enclosure~=1.3,>=1.3.1 neon_speech~=3.1,>=3.1.1a8 -neon_audio~=1.3,>=1.3.1a3 +neon_audio~=1.3,>=1.3.1 # Below patching alpha version conflicts -neon-utils[audio]~=1.2,>=1.2.4a0 ovos-core[audio]~=0.0.6,>=0.0.7a11 diff --git a/requirements/pi.txt b/requirements/pi.txt index 8161d7ad2..38665343f 100644 --- a/requirements/pi.txt +++ b/requirements/pi.txt @@ -35,9 +35,9 @@ ovos-phal-plugin-wifi-setup~=1.0,>=1.0.1 ovos-phal-plugin-dashboard==0.0.2a3 ovos-phal-plugin-alsa~=0.0.2 ovos-phal-plugin-system~=0.0.3 -ovos-phal-plugin-connectivity-events~=0.0.1,>=0.0.2a1 +ovos-phal-plugin-connectivity-events~=0.0.2 ovos-phal-plugin-homeassistant~=0.0.1 -ovos-phal-plugin-ipgeo>=0.0.1a1 +ovos-phal-plugin-ipgeo~=0.0.1 # ovos-phal-plugin-gpsd @ git+https://github.com/OpenVoiceOS/ovos-PHAL-plugin-gpsd # Pi-specific skills diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 9def02bc8..d157731fb 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,10 +1,10 @@ # mycroft ovos-core[skills_lgpl]~=0.0.6,>=0.0.7a11 # utils -neon-utils[network,configuration]~=1.2,>=1.2.4a0 +neon-utils[network,configuration]~=1.2,>=1.2.4 neon-transformers~=0.2 -ovos_utils~=0.0.27,>=0.0.30a3 -ovos-config~=0.0.5,>=0.0.7a2 +ovos_utils~=0.0.30 +ovos-config~=0.0.7 ovos-skills-manager~=0.0.12 ovos-plugin-manager~=0.0.21 ovos-backend-client~=0.0.6 From 25a5455c18f267e7f56df5aa618cd81beacbc8dc Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Sat, 11 Mar 2023 01:11:02 +0000 Subject: [PATCH 22/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 482253dc0..1cd189058 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a9" +__version__ = "22.10.4a10" From b62041d057b8e87bad5820cd8a18fe23b936432f Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Mon, 13 Mar 2023 16:54:07 -0700 Subject: [PATCH 23/37] Update Alpha release action to shared workflow (#379) --- .github/workflows/publish_test_build.yml | 51 ++++------------------ version_bump.py | 54 ------------------------ 2 files changed, 9 insertions(+), 96 deletions(-) delete mode 100644 version_bump.py diff --git a/.github/workflows/publish_test_build.yml b/.github/workflows/publish_test_build.yml index 77c35de29..85848f543 100644 --- a/.github/workflows/publish_test_build.yml +++ b/.github/workflows/publish_test_build.yml @@ -9,49 +9,16 @@ on: - 'version.py' jobs: - increment_version: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ github.head_ref }} - - name: Setup Python - uses: actions/setup-python@v1 - with: - python-version: 3.8 - - name: Install Build Tools - run: | - python -m pip install build wheel - - name: Increment Version - run: | - VER=$(python setup.py --version) - python version_bump.py - - name: Push Version Change - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: Increment Version - tag_alpha_release: - runs-on: ubuntu-latest - needs: increment_version - steps: - - name: Checkout repository - uses: actions/checkout@v2 - with: - ref: ${{ github.ref }} - - name: Get Version - id: version - run: | - VERSION=$(python setup.py --version) - echo ::set-output name=version::${VERSION} - - name: Create Pre-release - uses: ncipollo/release-action@v1 - with: - token: ${{secrets.GITHUB_TOKEN}} - tag: ${{steps.version.outputs.version}} - commit: ${{ github.ref }} - prerelease: true + publish_alpha_release: + uses: neongeckocom/.github/.github/workflows/publish_alpha_release.yml@FEAT_TagAlphaReleases + secrets: inherit + with: + version_file: "version.py" + setup_py: "setup.py" + publish_pypi: false + publish_prerelease: true build_and_publish_docker: - needs: increment_version + needs: publish_alpha_release uses: neongeckocom/.github/.github/workflows/publish_docker.yml@master secrets: inherit with: diff --git a/version_bump.py b/version_bump.py deleted file mode 100644 index 5a01c558c..000000000 --- a/version_bump.py +++ /dev/null @@ -1,54 +0,0 @@ -# NEON AI (TM) SOFTWARE, Software Development Kit & Application Framework -# All trademark and other rights reserved by their respective owners -# Copyright 2008-2022 Neongecko.com Inc. -# Contributors: Daniel McKnight, Guy Daniels, Elon Gasper, Richard Leeds, -# Regina Bloomstine, Casimiro Ferreira, Andrii Pernatii, Kirill Hrymailo -# BSD-3 License -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import fileinput -from os.path import join, dirname - -with open(join(dirname(__file__), "version.py"), "r", encoding="utf-8") as v: - for line in v.readlines(): - if line.startswith("__version__"): - if '"' in line: - version = line.split('"')[1] - else: - version = line.split("'")[1] - -if "a" not in version: - parts = version.split('.') - parts[-1] = str(int(parts[-1]) + 1) - version = '.'.join(parts) - version = f"{version}a0" -else: - post = version.split("a")[1] - new_post = int(post) + 1 - version = version.replace(f"a{post}", f"a{new_post}") - -for line in fileinput.input(join(dirname(__file__), "version.py"), inplace=True): - if line.startswith("__version__"): - print(f"__version__ = \"{version}\"") - else: - print(line.rstrip('\n')) From 1c9b6932f94cd7be06c6054bc77af4a087dca037 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Mon, 13 Mar 2023 23:54:28 +0000 Subject: [PATCH 24/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 1cd189058..65e23d643 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a10" +__version__ = "22.10.4a11" From 0966049fb8ef67d27ed5c7d843724fb7bf779da0 Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Mon, 13 Mar 2023 17:10:54 -0700 Subject: [PATCH 25/37] Fix setup.py paths to support shared actions (#380) --- setup.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index cf4dcc519..ac937fac8 100644 --- a/setup.py +++ b/setup.py @@ -29,10 +29,10 @@ from setuptools import setup, find_packages from os import path, getenv -BASEDIR = path.abspath(path.dirname(__file__)) +BASE_PATH = path.abspath(path.dirname(__file__)) -with open("./version.py", "r", encoding="utf-8") as v: +with open(path.join(BASE_PATH, "version.py"), "r", encoding="utf-8") as v: for line in v.readlines(): if line.startswith("__version__"): if '"' in line: @@ -40,12 +40,12 @@ else: version = line.split("'")[1] -with open("README.md", "r") as f: +with open(path.join(BASE_PATH, "README.md"), "r") as f: long_description = f.read() def get_requirements(requirements_filename: str): - requirements_file = path.join(path.abspath(path.dirname(__file__)), "requirements", requirements_filename) + requirements_file = path.join(BASE_PATH, "requirements", requirements_filename) with open(requirements_file, 'r', encoding='utf-8') as r: requirements = r.readlines() requirements = [r.strip() for r in requirements if r.strip() and not r.strip().startswith("#")] From d4891814411f9106d43c92aad4eabb9f035b0069 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Tue, 14 Mar 2023 00:11:20 +0000 Subject: [PATCH 26/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 65e23d643..5f05a7e40 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a11" +__version__ = "22.10.4a12" From 57e132990b7ac66c3b6cb18a522ed72a873498ba Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Mon, 13 Mar 2023 18:34:47 -0700 Subject: [PATCH 27/37] Remove patches now handled in ovos-core (#378) * Remove patches now handled in ovos-core * Bump ovos-core version to test latest changes * Bump wifi plugin to include display bug Paritally revert changes to resolve config bug * Update automation to default branch ref * Update wifi-setup plugin to stable version --- .github/workflows/publish_test_build.yml | 2 +- neon_core/skills/skill_manager.py | 19 ++++++++++--------- requirements/core_modules.txt | 2 +- requirements/pi.txt | 2 +- requirements/requirements.txt | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/.github/workflows/publish_test_build.yml b/.github/workflows/publish_test_build.yml index 85848f543..1125a0150 100644 --- a/.github/workflows/publish_test_build.yml +++ b/.github/workflows/publish_test_build.yml @@ -10,7 +10,7 @@ on: jobs: publish_alpha_release: - uses: neongeckocom/.github/.github/workflows/publish_alpha_release.yml@FEAT_TagAlphaReleases + uses: neongeckocom/.github/.github/workflows/publish_alpha_release.yml@master secrets: inherit with: version_file: "version.py" diff --git a/neon_core/skills/skill_manager.py b/neon_core/skills/skill_manager.py index 62bde837d..4546264f9 100644 --- a/neon_core/skills/skill_manager.py +++ b/neon_core/skills/skill_manager.py @@ -43,7 +43,7 @@ class NeonSkillManager(SkillManager): def __init__(self, *args, **kwargs): - self.load_lock = RLock() # Prevent multiple network event handling + # self.load_lock = RLock() # Prevent multiple network event handling super().__init__(*args, **kwargs) skill_dir = self.get_default_skills_dir() self.skill_downloader = SkillsStore( @@ -92,16 +92,17 @@ def download_or_update_defaults(self): LOG.error("no internet, skipped default skills installation") def _load_new_skills(self, *args, **kwargs): - with self.load_lock: - LOG.debug(f"Loading skills: {kwargs}") - super()._load_new_skills(*args, **kwargs) + # with self.load_lock: + # LOG.debug(f"Loading skills: {kwargs}") + # Override load method for config module checks + super()._load_new_skills(*args, **kwargs) def run(self): """Load skills and update periodically from disk and internet.""" self.download_or_update_defaults() - from neon_utils.net_utils import check_online - if check_online(): - LOG.debug("Already online, allow skills to load") - self.bus.emit(Message("mycroft.network.connected")) - self.bus.emit(Message("mycroft.internet.connected")) + # from neon_utils.net_utils import check_online + # if check_online(): + # LOG.debug("Already online, allow skills to load") + # self.bus.emit(Message("mycroft.network.connected")) + # self.bus.emit(Message("mycroft.internet.connected")) super().run() diff --git a/requirements/core_modules.txt b/requirements/core_modules.txt index dc4b4ee7e..2ddc8e950 100644 --- a/requirements/core_modules.txt +++ b/requirements/core_modules.txt @@ -6,4 +6,4 @@ neon_speech~=3.1,>=3.1.1a8 neon_audio~=1.3,>=1.3.1 # Below patching alpha version conflicts -ovos-core[audio]~=0.0.6,>=0.0.7a11 +ovos-core[audio]~=0.0.6,>=0.0.7a14 diff --git a/requirements/pi.txt b/requirements/pi.txt index 38665343f..ee2bdb75b 100644 --- a/requirements/pi.txt +++ b/requirements/pi.txt @@ -31,7 +31,7 @@ ovos-phal-plugin-configuration-provider~=1.0.0 ovos-phal-plugin-balena-wifi~=1.0.0 ovos-phal-plugin-gui-network-client~=0.0.2 ovos-phal-plugin-network-manager~=1.0.0 -ovos-phal-plugin-wifi-setup~=1.0,>=1.0.1 +ovos-phal-plugin-wifi-setup~=1.1 ovos-phal-plugin-dashboard==0.0.2a3 ovos-phal-plugin-alsa~=0.0.2 ovos-phal-plugin-system~=0.0.3 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index d157731fb..86133084d 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,5 +1,5 @@ # mycroft -ovos-core[skills_lgpl]~=0.0.6,>=0.0.7a11 +ovos-core[skills_lgpl]~=0.0.6,>=0.0.7a14 # utils neon-utils[network,configuration]~=1.2,>=1.2.4 neon-transformers~=0.2 From 267ee4e7a7e0ad721e1754617519ab06497e8ac8 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Tue, 14 Mar 2023 01:35:13 +0000 Subject: [PATCH 28/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 5f05a7e40..8e64b0f60 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a12" +__version__ = "22.10.4a13" From d4d1cee144ce26a6199fc6575fc0dcbfc2499abc Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Tue, 14 Mar 2023 17:36:38 -0700 Subject: [PATCH 29/37] Patch mycroft.MycroftSkill with unit tests (#381) --- neon_core/skills/__init__.py | 4 ++++ test/test_skill_utils.py | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/neon_core/skills/__init__.py b/neon_core/skills/__init__.py index 710ca2339..5311f6e18 100644 --- a/neon_core/skills/__init__.py +++ b/neon_core/skills/__init__.py @@ -56,6 +56,10 @@ importlib.reload(mycroft.skills.common_iot_skill) importlib.reload(mycroft.skills) +import mycroft +mycroft.MycroftSkill = PatchedMycroftSkill +mycroft.FallbackSkill = mycroft.skills.fallback_skill.FallbackSkill + # Manually patch re-defined classes in `mycroft.skills.core` mycroft.skills.core.MycroftSkill = PatchedMycroftSkill mycroft.skills.core.FallbackSkill = mycroft.skills.fallback_skill.FallbackSkill diff --git a/test/test_skill_utils.py b/test/test_skill_utils.py index 4969dda3f..b48cd68c3 100644 --- a/test/test_skill_utils.py +++ b/test/test_skill_utils.py @@ -187,18 +187,23 @@ def test_skill_class_patches(self): import neon_core.skills # Import to do all the patching from neon_utils.skills.mycroft_skill import PatchedMycroftSkill from mycroft.skills import MycroftSkill + from mycroft import MycroftSkill as MycroftSkill1 from mycroft.skills.mycroft_skill import MycroftSkill as MycroftSkill2 from mycroft.skills.core import MycroftSkill as MycroftSkill3 from mycroft.skills.fallback_skill import FallbackSkill + from mycroft import FallbackSkill as FallbackSkill1 from mycroft.skills.core import FallbackSkill as FallbackSkill2 from mycroft.skills.common_play_skill import CommonPlaySkill from mycroft.skills.common_query_skill import CommonQuerySkill from mycroft.skills.common_iot_skill import CommonIoTSkill self.assertEqual(MycroftSkill, PatchedMycroftSkill) + self.assertEqual(MycroftSkill1, PatchedMycroftSkill) self.assertEqual(MycroftSkill2, PatchedMycroftSkill) self.assertEqual(MycroftSkill3, PatchedMycroftSkill) - self.assertEqual(FallbackSkill, FallbackSkill2) + + self.assertEqual(FallbackSkill1, FallbackSkill) + self.assertEqual(FallbackSkill2, FallbackSkill) self.assertTrue(issubclass(FallbackSkill, PatchedMycroftSkill)) self.assertTrue(issubclass(CommonPlaySkill, PatchedMycroftSkill)) From b29e6cc6bd2cc9702e13d2a36673d5708e59aeb9 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Wed, 15 Mar 2023 00:37:10 +0000 Subject: [PATCH 30/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 8e64b0f60..52a372b02 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a13" +__version__ = "22.10.4a14" From f6d54b295d2ec4c9fb3900abec89e133c97e4da0 Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Tue, 14 Mar 2023 17:55:24 -0700 Subject: [PATCH 31/37] Update dependencies to stable versions (#382) --- requirements/core_modules.txt | 5 +---- requirements/local_speech_processing.txt | 2 +- requirements/requirements.txt | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/requirements/core_modules.txt b/requirements/core_modules.txt index 2ddc8e950..c46a70ffa 100644 --- a/requirements/core_modules.txt +++ b/requirements/core_modules.txt @@ -2,8 +2,5 @@ neon_messagebus~=0.3,>=0.3.1 neon_gui~=1.1,>=1.1.2 neon_enclosure~=1.3,>=1.3.1 -neon_speech~=3.1,>=3.1.1a8 +neon_speech~=3.2 neon_audio~=1.3,>=1.3.1 - -# Below patching alpha version conflicts -ovos-core[audio]~=0.0.6,>=0.0.7a14 diff --git a/requirements/local_speech_processing.txt b/requirements/local_speech_processing.txt index 50875f1e0..4f8eea027 100644 --- a/requirements/local_speech_processing.txt +++ b/requirements/local_speech_processing.txt @@ -1,5 +1,5 @@ neon-stt-plugin-deepspeech-stream-local~=2.0 -neon-stt-plugin-nemo +neon-stt-plugin-nemo~=0.0 neon-tts-plugin-coqui~=0.7,>=0.7.1 # TODO: Local language plugin diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 86133084d..3e0287e92 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,5 +1,5 @@ # mycroft -ovos-core[skills_lgpl]~=0.0.6,>=0.0.7a14 +ovos-core[skills_lgpl]~=0.0.7 # utils neon-utils[network,configuration]~=1.2,>=1.2.4 neon-transformers~=0.2 From f0080d3aa34bed719febe108b0fe4890e66762b4 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Wed, 15 Mar 2023 00:55:47 +0000 Subject: [PATCH 32/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 52a372b02..bc88f9cbd 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a14" +__version__ = "22.10.4a15" From 2ecbf74e7feec930cc3db3ea89c97b9dad92cffe Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Tue, 14 Mar 2023 18:35:14 -0700 Subject: [PATCH 33/37] Refactor documentation into separate files (#324) * Refactor documentation into separate files * Refactor 'changes' documentation into a separate file * Update outdated download link * Add Docker notes from troubleshooting * Cleanup docker documentation --- README.md | 490 ++----------------------- documentation/legacy_changes.md | 44 +++ documentation/legacy_setup.md | 296 +++++++++++++++ documentation/service_account_setup.md | 105 ++++++ 4 files changed, 474 insertions(+), 461 deletions(-) create mode 100644 documentation/legacy_changes.md create mode 100644 documentation/legacy_setup.md create mode 100644 documentation/service_account_setup.md diff --git a/README.md b/README.md index 6d5bb39a1..9b52a7a57 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ - # Table of Contents 0. [Quick Start](#quick-start) * [a. Prerequisite Setup](#a-prerequisite-setup) @@ -6,49 +5,41 @@ * [c. Interacting with Neon](#c-interacting-with-neon) * [d. Skill Development](#d-skill-development) * [e. Persistent Data](#e-persistent-data) -1. [Optional Service Account Setup](#optional-service-account-setup) - * [a. Google Cloud Speech](#a-google-cloud-speech-setup) - * [b. Amazon Polly and Translate](#b-amazon-polly-and-translate-setup) -2. [Setting Up Hardware](#setting-up-hardware) -3. [Installing Neon](#installing-neon) - * [a. Development Environment](#installing-neon-in-a-development-environment) - * [b. User Environment](#installing-neon-in-a-userdeployment-environment) -4. [Using Neon](#using-neon) - * [a. Activating the venv](#a-activating-the-venv) - * [c. Running Tests](#c-running-tests) - * [d. Troubleshooting](#d-troubleshooting) -5. [Making Changes](#making-code-changes) - * [a. System Overview](#a-system-overview) - * [b. Creating a Skill](#b-creating-a-skill) -6. [Removing and re-installing Neon](#removing-and-re-installing-neon-ai) # Welcome to Neon AI -Neon AI is an open source voice assistant. Follow these instructions to start using Neon on your computer. If you are -using a Raspberry Pi, you may use the prebuilt image available [on our website](https://neon.ai/DownloadNeonAI). +Neon AI is an open source voice assistant. Follow these instructions to start +using Neon on your computer. If you are using a Mycroft Mark2 or Raspberry Pi, +you may use the prebuilt image available [on our website](https://neon.ai/Download). # Quick Start The fastest method for getting started with Neon is to run the modules in Docker containers. The `docker` directory contains everything you need to run Neon Core with default skills. ## a. Prerequisite Setup -You will need `docker` and `docker-compose` available. Docker provides updated guides for installing -[docker](https://docs.docker.com/engine/install/) and [docker-compose](https://docs.docker.com/compose/install/). -Neon Core is only tested on Ubuntu, but should be compatible with any linux distribution that uses +You will need `docker` and `docker-compose` available. Docker provides updated +guides for installing [docker](https://docs.docker.com/engine/install/) and +[docker-compose](https://docs.docker.com/compose/install/). +> *Note*: At this time, Neon is not compatible with Docker Desktop. This may change +> in the future, but it is currently recommended NOT to install Docker Desktop. + +Neon Core is only tested on Ubuntu, but should be compatible with any Linux distribution that uses [PulseAudio](https://www.freedesktop.org/wiki/Software/PulseAudio/). > *Note*: By default, only the `root` user has permissions to interact with Docker under Ubuntu. > To allow the current user to modify Docker containers, you can add them to the `docker` group with: > -> `sudo usermod -aG docker $USER && newgrp` +> `sudo usermod -aG docker $USER && newgrp docker` ## b. Running Neon -You can clone the repository, or just copy the `docker` directory contents onto your local system; this document will -assume that the repository is cloned to: `~/NeonCore`. +You can clone the repository, or just copy the `docker` directory contents onto +your local system; this document will assume that the repository is cloned to: `~/NeonCore`. -> *Note*: The `docker` directory includes required hidden files. If you copy files, make sure to include any hidden -> files. In must Ubuntu distros, you can toggle hidden file visibility in the file explorer with `CTRL` + `h`. +> *Note*: The `docker` directory includes required hidden files. If you copy files, +> make sure to include any hidden files. In must Ubuntu distros, you can toggle +> hidden file visibility in the file explorer with `CTRL` + `h`. -> *Note*: If you run `docker` commands with `sudo`, make sure to use the `-E` flag to preserve runtime envvars. +> *Note*: If you run `docker` commands with `sudo`, make sure to use the `-E` +> flag to preserve runtime envvars. > *Note*: Some Docker implementations don't handle relative paths. > If you encounter errors, try updating the paths in `.env` to absolute paths. @@ -74,9 +65,12 @@ The Mycroft GUI is an optional component that can be run on Linux host systems. The GUI is available with instructions [on GitHub](https://github.com/MycroftAI/mycroft-gui) ## c. Interacting with Neon -With the containers running, you can interact with Neon by voice (i.e. "hey Neon, what time is it?"), or using one of +With the containers running, you can interact with Neon by voice +(i.e. "hey Neon, what time is it?"), or using one of our CLI utilities, like [mana](https://pypi.org/project/neon-mana-utils/) or the -[neon_cli_client](https://pypi.org/project/neon-cli-client/). +[neon_cli_client](https://pypi.org/project/neon-cli-client/). If using the CLI +client, you can run `neon-cli --logs-dir xdg/state/neon/` from the directory +containing `docker-compose.yml` to see logs in the CLI. You can view module logs via docker with: ```shell @@ -99,7 +93,8 @@ cd ~/NeonCore/docker docker-compose up ``` -To run the skills module without any bundled skills, the image referenced in `docker-compose.yml` can be changed from: +To run the skills module without any bundled skills, the image referenced in +`docker-compose.yml` can be changed from: ```yaml neon-skills: @@ -130,438 +125,11 @@ STT/TTS model files, TTS audio files, and other downloaded files. > In order to modify anything in the `xdg` directory, you may need to take ownership with: > `sudo chown -R $USER:$USER xdg` -# Optional Service Account Setup -There are several online services that may be used with Neon. Speech-to-Text (STT) and Text-to-Speech (TTS) may be run -locally, but remote implementations are often faster and more accurate. Following are some instructions for getting -access to Google STT and Amazon Polly TTS. During setup, these credentials will be imported and validated. -> *Note:* If you complete this setup on a Windows PC, make sure to edit any files using a text editor such as -[Notepad++](https://notepad-plus-plus.org/) to ensure compatibility in Linux. Also check for correct file extensions -after copying your files to your Linux PC, as Windows will hide known file extensions by default. - - -## a. Google Cloud Speech Setup -1. Go to: - > https://cloud.google.com/ - -1. Sign in or create a `Google account` - >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google1.png) - - -1. Go to your `Console` - >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google2.png) - - -1. Search for and select `"Cloud Speech-to-Text"` (Not to be confused with Text-to-Speech) -1. Select the option you would like to use - >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google3.png) - - -1. You will be prompted to enable billing on your account at this point because this service is paid after a free monthly -quota - > Google will not automatically charge your card unless you give permission to do so. -1. In the left `Navigation Menu`, select `APIs & Services`, `Credentials` - >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google4.png) - - -1. Click `Create credendials`, `Service Account Key` - >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google5.png) - - -1. Choose any service account name for your reference. You may leave the `Role` field empty -1. Make sure key type is `JSON` and click on `Continue` - >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google6.png) - - -1. If you did not assign a role, you would be prompted. You may continue by clicking `'CREATE WITHOUT ROLE'` - >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google7.png) - - -1. You will see a prompt and your service key will automatically download -1. Rename the downloaded file to `google.json` and move it into the same directory as neonSetup.sh - - > *Note:* The premium models are only available in US English and provide some enhancements to phone and video audio - which do not apply to this project. The options with Data Logging allows Google to use your audio and transcriptions to - train their model. You may select the option without logging to opt out (note that the option with logging is - discounted). - -At this point, Neon can be partially tested without `Amazon translations` and `Wolfram information` skills. You may run -setup without continuing, but Amazon and Wolfram|Alpha services are *highly* recommended. - - -## b. Amazon Polly and Translate Setup -1. Go to: - > https://aws.amazon.com/ - -1. Click `"Sign into the Console"` at the top right of the screen - >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon1.png) - - -1. Sign in or register for an account -1. Go to the `Services Menu` at the top left of the screen and click `IAM` - >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon2.png) - - -1. Select `Users` from the left side menu and click `Add user` - >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon3.png) - - -1. Enter a `User name` and check the box for `Programmatic access` - >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon4.png) - - -1. On the next page, Select `'Attach existing policies directly'` and search for `'AmazonPollyFullAccess'` and -`'TranslateFullAccess'` - >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon5.png) - ![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon6.png) - - -1. You may add tags on the next page if desired -1. Review your selections on the next page and `Create user` - >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon7.png) - - -1. On the next page you can see your `Access key ID` and `Secret access key` -1. Click the `Download .csv file` button to save your credentials to your computer - >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon8.png) - - -1. Copy or move the downloaded `accessKeys.csv` to the same directory as neonSetup.sh - - > *Note:* You will ***not*** be able to view your secret access key after it is generated, so if you need a secret - access key, you will have to generate a new Access key. - -The Users menu lets you create new users and new access keys per user as you wish, as well as modify permissions. - -# Setting Up Hardware -Before continuing, make sure you have your hardware setup ready for installation. You will need the following: -* A computer running up-to-date Ubuntu 20.04 - > You can find our video tutorial for installing Ubuntu in a virtual machine - > [here](https://neongecko.com/WindowsOptionUbuntuVirtualMachineInstall), or you can find written instructions - > [here](https://tutorials.ubuntu.com/tutorial/tutorial-install-ubuntu-desktop#0) - - > *Note:* If you prefer to use Windows for your development environment, you can install the - > [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10). You can find our video - > tutorial [here](https://neongecko.com/WindowsOptionSubsystemforLinux). Audio and gui functionality will be limited - > in this case; you will only be able to interact with Neon via command line. - -## System Requirements -* Speakers and a microphone recognized by Ubuntu - >![NeonDev](https://0000.us/klatchat/app/files/neon_images/neon_setup_screens/Setup1.png) - You can verify Ubuntu sees your devices by accessing `Settings` and then `Sound` - * If you are unsure of which device to select, you can click `Test Speakers` to play a test tone through the selected - Output device - * You can test your microphone under the `Input` tab, the Input level should move when you speak into the microphone - > If you do not see any microphone activity, make sure the correct device is selected and the Input volume is set - above 50% - -* Webcam (optional) - > Some functionality requires a webcam (ex. USB Cam Skill). Most webcams also include a microphone that can be used - for Neon. - -* An active internet connection - > *Note*: A connection of at least 10Mbps is recommended. On slower connections, installation may take several - > hours. - -* At least `10GB` of available disk space (`15 GB` if installing Mimic) - > Neon AI occupies less than 1GB itself. With dependencies, the installation takes about 5GB on an up-to-date Ubuntu - > 20.04 system. Mimic local speech-to-text requires about 3.5 GB. Additional space is used while installing packages - > during installation and updates. Several gigabytes is recommended in order to keep local transcriptions and audio files. - -* A system with at least 2GB RAM and 2 or more processing threads is required, with 4GB RAM and 4 threads recommended - > Some features such as the vision service may not work on systems only meeting the minimum requirements. Responses - > and speech processing will take longer on lower performance systems. - -# Installing Neon -This guide includes instructions for installing in both a Development environment and a User environment. User -environment is similar to what is found on our [Raspberry Pi Image](https://neon.ai/DownloadNeonAI); packages will be -installed from distributions and installed code should not be modified. -A developer environment will clone `NeonCore` from source and include more debugging utilities. -Developer installations are also designed to run alongside other instances of Neon/OVOS/Mycroft. - -A development environment is designed to be a testable installation of NeonAI that can be connected to an IDE -(ex. Pycharm) for modifications and skill development. This guide assumes installation in a development environment from -an unmodified fork of NeonAI. After installation, any changes and additions can be pushed to git or hosted on a private -server. - -A user environment is designed to be an installation on a device that will be used normally as a voice assistant. You -may want to test how your changes affect performance on less powerful hardware or test how changes may be deployed as -updates. -If you are developing in a virtual machine, installation on physical hardware in a user environment is useful for -testing audio and video I/O which can be difficult in many virtualized environments. - -All the following options, such as autorun and automatic updates can be easily modified later using your voice, -profile settings, or configuration files. - -## Installing Neon in a Development Environment -Neon "core" is a collection of modules that may be installed and modified individually. These instructions will -outline a basic setup where the `neon_audio`, `neon_enclosure`, `neon_speech`, and any other modules are installed to their -latest stable versions. These modules may be installed as editable for further development; instructions for this can be -found [here](https://pip.pypa.io/en/stable/cli/pip_install/#editable-installs) - -1. Install required system packages -```shell -sudo apt install python3-dev python3-venv python3-pip swig libssl-dev libfann-dev portaudio19-dev git mpg123 ffmpeg -``` -> *Note*: The following commands can be used to install mimic for local TTS -```shell -sudo apt install -y curl -curl https://forslund.github.io/mycroft-desktop-repo/mycroft-desktop.gpg.key | sudo apt-key add - 2> /dev/null && echo "deb http://forslund.github.io/mycroft-desktop-repo bionic main" | sudo tee /etc/apt/sources.list.d/mycroft-desktop.list -sudo apt-get update -sudo apt install mimic -``` - -2. Clone NeonCore from your forked repository into a local directory. - -```shell -git clone https://github.com/NeonGeckoCom/NeonCore ~/NeonAI -cd ~/NeonAI -``` - -3. Create a virtual environment and activate it. -```shell -python3 -m venv ./.venv -. .venv/bin/activate -pip install wheel # this speeds up subsequent -``` - -4. If you have access to private Neon repositories, export your Github Personal Access Token as an environment variable -```shell -export GITHUB_TOKEN= -``` - -5. Install any desired requirements -```shell -pip install .[client,dev,remote] -``` - >*Note*: `dev`, `client`, and `remote` are recommended for general development installations. - > `local` may be substituted for `remote` - -6. Install the mycroft-gui package (optional) -```shell -git clone https://github.com/mycroftai/mycroft-gui -bash mycroft-gui/dev_setup.sh -rm -rf mycroft-gui -sudo apt-get install libqt5multimedia5-plugins qml-module-qtmultimedia -``` - >*Note*: dev_setup.sh is an interactive script; do not copy/paste the full block above into your terminal. - -7. Create and update configuration -```shell -neon-config-import -``` -Open `ngi_local_conf.yml` in your text editor of choice and make any desired changes. -If you selected `local` options above, you should change the following STT/TTS module lines: -```yaml -tts: - module: neon_tts_mimic - -stt: - module: deepspeech_stream_local -``` - -You may also choose to place logs, skills, configuration files, diagnostic files, etc. in the same directory as your cloned core -(default location is `~/.local/share/neon`). This isolates logs and skills if you have multiple cores installed. -```yaml -dirVars: - logsDir: ~/NeonCore/logs - diagsDir: ~/NeonCore/Diagnostics - skillsDir: ~/NeonCore/skills - confDir: ~/NeonCore/config -``` - -> *Note:* You may also have a configuration file you wish to copy here to overwrite the default one. - -8. Install default skills (optional) -```shell -neon-install-default-skills -``` -Installation of default skills will usually occur every time neon is started, but you may want to do this manually and -disable automatic skill installation to avoid conflicts with local development. The list of default skills may be changed -in `ngi_local_conf.yml` -```yaml -skills: - default_skills: -``` - >*Note:* The default_skills list may include URLs with branch specs, skill names, - > or a link to a text file containing either of these lists. - -10. Neon is now ready to run. You may start Neon with `neon-start` from a terminal; to start Neon in the background, run: -```shell -coproc neon-start >/dev/null 2>&1 & -``` - >*Note:* Starting Neon can take some time when skills are set to automatically install/update. You can speed this up - by disabling automatic skill installation/updates in `ngi_local_conf.yml`. -```yaml -skills: - auto_update: false -``` - -## Installing Neon in a User/Deployment Environment -Installing in a User Environment differs from a developer environment; you will not be able to modify Neon Core if you -use this installation method. - -1. Download `setup.sh` from the [NeonCore repository](https://github.com/NeonGeckoCom/NeonCore/blob/dev/setup.sh). - >*Note*: You can download this file by right-clicking `Raw` and selecting `Save link as...` -2. Take your `setup.sh` file and place it in your home directory - >![NeonDev](https://0000.us/klatchat/app/files/neon_images/neon_setup_screens/Neon1.png) -3. Open a terminal in your home directory (`ctrl`+`alt`+`t`) -4. Type in `bash setup.sh ${GITHUB_TOKEN}` and press `Enter` (where `${GITHUB_TOKEN}` is your Github token) - >*Note*: You can find instructions on how to generate a GitHub Personal Access Token - > [here](https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token) - - >![NeonDev](https://0000.us/klatchat/app/files/neon_images/neon_setup_screens/Neon2.png) -5. Type `n` to Install in User Mode (Not Developer Mode) -6. Type `n` to Input Custom settings - >*Note*: You may use quick settings and skip the following prompts -___ -8. Type `n` to install in User mode (`y` for full Developer mode) -8. `Autorun` is recommended (`y`) on for User Environments -8. `Automatic updates` are recommended (`y`) on for User Environments -8. `Local STT` is NOT recommended (`n`) IF you have google and aws keys, as remote processing is faster and more accurate -8. `Install GUI` is recommended (`y`) so long as your device has a display -8. Find out more about OpenHAB [here](https://www.openhab.org/docs/) -14. `Server` is NOT recommended (`n`) unless you know otherwise - -1. You will be prompted to confirm your settings, press `y` to continue, `n` to start over, or `b` to go back and - correct a previous setting - > ![NeonDev](https://0000.us/klatchat/app/files/neon_images/neon_setup_screens/Neon3-1.png) - -1. When setup is complete, you will be able to start Neon via `start_neon.sh` and stop Neon via: `stop_neon.sh` - -# Using Neon -After you have completed [Installing Neon](#installing-neon), you will have a fully functional system ready to test. - -## a. Activating the venv -If you followed the [Developer instructions](#installing-neon-in-a-development-environment) and attached Neon to an IDE -(such as PyCharm), your IDE likely configured a virtual environment in `NeonCore/venv`. -If you followed the [User instructions](#installing-neon-in-a-userdeployment-environment), a virtual environment was -created at `~/NeonAI/.venv`. - -To interact with Neon from a terminal, you need to activate the correct virtual environment by running: -`. ~/NeonAI/.venv/bin/activate` (or the appropriate path if you installed to a different directory). -> *Note:* If you are using an IDE like PyCharm, the built-in terminal will often activate the virtual environment automatically. - -You will know that your virtual environment is active by the `(.venv)` printed in your terminal. You may exit the `.venv` -shell by running `deactivate`. - -## b. Terminal Commands -From your shell with the virtual environment activated, you can see a list of available terminal commands by typing `neon` -and tapping `TAB` twice. Depending on which packages were installed with Neon, you might see `neon_cli_client` which -will launch the CLI for debugging. - -## c. Running Tests -From your shell with the virtual environment activated, `neon_skills_tests` will launch automated testing. You will be -prompted to select a test set to run (no entry will run `all`). Neon will proceed to execute and respond to a number of -requests, corresponding to all default installed skills. After all tests have run, a summary will be printed to the terminal -followed by any logged errors. ->*Note:* More complete logs and information can be found in the Diagnostics directory - >By default, this is at `~\NeonAI\Diagnostics\testing` for Development Machines and - `~\Documents\NeonGecko\Diagnostics\testing` for User Machines. - -## d. Troubleshooting -If you encounter any of the following issues while using Neon, please try these troubleshooting steps - -* My computer is slow to respond - > Check for high memory usage in `System Monitor`. If your Memory and Swap both show 100% utilization under - > `Resources`, try exiting PyCharm and Neon AI. If there is still abnormal memory usage, open a Terminal and type in: - ```bash - sudo systemctl stop openhab2.service - ``` - > If you can determine the offending program, see if restarting the program or your computer resolves your issues. If - > not, you may find common solutions online. - -* Neon AI is not transcribing anything I say - > Check that your microphone is working and active by going to `Sound` the `Settings` Menu. Go to the `Input` tab - > and make sure the correct microphone is selected. Make sure the `Input Level` is up and turned on and look for - > activity on the `Input Level` bar when you tap the mic. If you change devices here, restart Neon AI. - -* Some audio is very quiet, while other audio is louder - > Check that the audio level for the affected application is turned up by going to `Sound` the `Settings` Menu. Go to - > the `Applications` tab. - - > For quiet responses from Neon, ask Neon something with a longer response (ex. "Tell me a joke"). When an - > application named `neon-voice` appears, make sure it is not muted and that the volume is set to the maximum. Do - > the same for any other applications that are too quiet; start playing something and check the Application's - > volume. - -* AVMusic will not pause or resume - > If AVMusic playback is changed by something other than Neon, the skill can lose track of whether something is - > playing or paused. If something is paused and Neon will not resume, you may say "pause" to resume playback. "Stop" - > should work in any case. - -* Errors in the log when installing or updating Neon - > Installation of dlib can fail if system memory is completely full; you can open System Monitor during installation - > or updates to monitor memory usage. A minimum 2GB RAM is required, 4GB+ recommended. Errors may also occur if system - > storage becomes full. You may monitor storage availability in System Monitor as well; keep in mind that cached files - > will be removed when installation fails, so your file system will show some available space before and after the - > error occurs. - -* Any other issues - > If you encounter any other issues while using Neon, they can often be solved by restarting Neon or your computer. - > If this does not resolve you issue, please contact support at [info@neongecko.com](mailto:info@neongecko.com). - -# Making Code Changes -After completing setup and testing, you are ready to begin making changes and creating skills. An example workflow for -making a change would be: - -1. Create or modify a skill -1. Test changes in the Developer Environment (Look for errors in logs, unexpected behaviour, etc.) -1. Run `Test Neon` to check that all skills and TTS/STT behave as expected -1. Commit and Push changes to git (for collaborative development, it is often best to create a new branch for any changes) -1. Install your updated skill in a User Environment (check for any missing dependencies, invalid file paths, etc.) -1. Run complete tests using `Test Neon` -1. Check logs for any errors - -## a. System Overview -There are two aspects of the Neon AI system: `core` and `skills`. - -The `core` is composed of several modules, but generally includes: - - `speech` for handling user inputs and performing speech-to-text (STT) - - `skills` for processing user input to find intent and provide a response - - `audio` for speaking the response generated in skills - - `bus` for handling all communications between modules - - `enclosure` for handling any hardware interactions like speakers, microphone, lights, and buttons - -Other modules may also be running for gui functionality, etc and may be added to provide new functionality. - -`skills` provide the functionality of handling user inputs and generating responses or performing actions. - - -## b. Creating a Skill -Check out our three part youtube series on how to create a skill: -https://youtu.be/fxg25MaxIcE -https://youtu.be/DVSroqv6E6k -https://youtu.be/R_3Q-P3pk8o - -## Additional Steps for Developers Using PyCharm -11. Next you should update your IDE in your Developer Environment -> *Note*: This is PyCharm if you followed our setup guide. -10. In PyCharm, select `VCS` from the menu bar, and then `Update Project` - > ![NewRelease](https://0000.us/klatchat/app/files/neon_images/neon_release_screens/NewRelease4.png) -11. You will be prompted to `Update Project`, you may leave the default settings and click `OK` - > ![NewRelease](https://0000.us/klatchat/app/files/neon_images/neon_release_screens/NewRelease5.png) - - -# Removing and Re-installing Neon AI -You may wish to remove your Neon AI installation to start fresh with a new version. Below is a list of locaitons -where Neon may have saved files: - - `~/Documents/NeonGecko` - - `~/Pictures/NeonGecko` - - `~/Videos/NeonGecko` - - `~/Music/NeonGecko` - - `~/.local/share/neon` - - `~/.cache/neon` - - `~/NeonAI` - - `~/.neon` - - `/opt/neon` - - `/tmp/neon` - -You may now [re-install Neon](#installing-neon) - > *Note:* You may need your [credential files](#optional-service-account-setup) to complete re-installation. - -# Running Docker Modules +# Running Docker Skills Module +To run only the skills container that is published with this repository, you can +run the following command. You will need a messagebus service for the skills module +to connect to. -Skills Service ```shell docker run -d \ --name=neon_skills \ diff --git a/documentation/legacy_changes.md b/documentation/legacy_changes.md new file mode 100644 index 000000000..6d45bf4df --- /dev/null +++ b/documentation/legacy_changes.md @@ -0,0 +1,44 @@ +[Making Changes](#making-code-changes) + * [a. System Overview](#a-system-overview) + * [b. Creating a Skill](#b-creating-a-skill) + +# Making Code Changes +After completing setup and testing, you are ready to begin making changes and creating skills. An example workflow for +making a change would be: + +1. Create or modify a skill +1. Test changes in the Developer Environment (Look for errors in logs, unexpected behaviour, etc.) +1. Run `Test Neon` to check that all skills and TTS/STT behave as expected +1. Commit and Push changes to git (for collaborative development, it is often best to create a new branch for any changes) +1. Install your updated skill in a User Environment (check for any missing dependencies, invalid file paths, etc.) +1. Run complete tests using `Test Neon` +1. Check logs for any errors + +## a. System Overview +There are two aspects of the Neon AI system: `core` and `skills`. + +The `core` is composed of several modules, but generally includes: + - `speech` for handling user inputs and performing speech-to-text (STT) + - `skills` for processing user input to find intent and provide a response + - `audio` for speaking the response generated in skills + - `bus` for handling all communications between modules + - `enclosure` for handling any hardware interactions like speakers, microphone, lights, and buttons + +Other modules may also be running for gui functionality, etc and may be added to provide new functionality. + +`skills` provide the functionality of handling user inputs and generating responses or performing actions. + + +## b. Creating a Skill +Check out our three part youtube series on how to create a skill: +https://youtu.be/fxg25MaxIcE +https://youtu.be/DVSroqv6E6k +https://youtu.be/R_3Q-P3pk8o + +## Additional Steps for Developers Using PyCharm +11. Next you should update your IDE in your Developer Environment +> *Note*: This is PyCharm if you followed our setup guide. +10. In PyCharm, select `VCS` from the menu bar, and then `Update Project` + > ![NewRelease](https://0000.us/klatchat/app/files/neon_images/neon_release_screens/NewRelease4.png) +11. You will be prompted to `Update Project`, you may leave the default settings and click `OK` + > ![NewRelease](https://0000.us/klatchat/app/files/neon_images/neon_release_screens/NewRelease5.png) diff --git a/documentation/legacy_setup.md b/documentation/legacy_setup.md new file mode 100644 index 000000000..33cba0993 --- /dev/null +++ b/documentation/legacy_setup.md @@ -0,0 +1,296 @@ +# Table of Contents +3. [Setting Up Hardware](#setting-up-hardware) +3. [Installing Neon](#installing-neon) + * [a. Development Environment](#installing-neon-in-a-development-environment) + * [b. User Environment](#installing-neon-in-a-userdeployment-environment) +4. [Using Neon](#using-neon) + * [a. Activating the venv](#a-activating-the-venv) + * [c. Running Tests](#c-running-tests) + * [d. Troubleshooting](#d-troubleshooting) +6. [Removing and re-installing Neon](#removing-and-re-installing-neon-ai) + +# Setting Up Hardware +Before continuing, make sure you have your hardware setup ready for installation. You will need the following: +* A computer running up-to-date Ubuntu 20.04 + > You can find our video tutorial for installing Ubuntu in a virtual machine + > [here](https://neongecko.com/WindowsOptionUbuntuVirtualMachineInstall), or you can find written instructions + > [here](https://tutorials.ubuntu.com/tutorial/tutorial-install-ubuntu-desktop#0) + + > *Note:* If you prefer to use Windows for your development environment, you can install the + > [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10). You can find our video + > tutorial [here](https://neongecko.com/WindowsOptionSubsystemforLinux). Audio and gui functionality will be limited + > in this case; you will only be able to interact with Neon via command line. + +## System Requirements +* Speakers and a microphone recognized by Ubuntu + >![NeonDev](https://0000.us/klatchat/app/files/neon_images/neon_setup_screens/Setup1.png) + You can verify Ubuntu sees your devices by accessing `Settings` and then `Sound` + * If you are unsure of which device to select, you can click `Test Speakers` to play a test tone through the selected + Output device + * You can test your microphone under the `Input` tab, the Input level should move when you speak into the microphone + > If you do not see any microphone activity, make sure the correct device is selected and the Input volume is set + above 50% + +* Webcam (optional) + > Some functionality requires a webcam (ex. USB Cam Skill). Most webcams also include a microphone that can be used + for Neon. + +* An active internet connection + > *Note*: A connection of at least 10Mbps is recommended. On slower connections, installation may take several + > hours. + +* At least `10GB` of available disk space (`15 GB` if installing Mimic) + > Neon AI occupies less than 1GB itself. With dependencies, the installation takes about 5GB on an up-to-date Ubuntu + > 20.04 system. Mimic local speech-to-text requires about 3.5 GB. Additional space is used while installing packages + > during installation and updates. Several gigabytes is recommended in order to keep local transcriptions and audio files. + +* A system with at least 2GB RAM and 2 or more processing threads is required, with 4GB RAM and 4 threads recommended + > Some features such as the vision service may not work on systems only meeting the minimum requirements. Responses + > and speech processing will take longer on lower performance systems. + +# Installing Neon +This guide includes instructions for installing in both a Development environment and a User environment. User +environment is similar to what is found on our [Raspberry Pi Image](https://neon.ai/DownloadNeonAI); packages will be +installed from distributions and installed code should not be modified. +A developer environment will clone `NeonCore` from source and include more debugging utilities. +Developer installations are also designed to run alongside other instances of Neon/OVOS/Mycroft. + +A development environment is designed to be a testable installation of NeonAI that can be connected to an IDE +(ex. Pycharm) for modifications and skill development. This guide assumes installation in a development environment from +an unmodified fork of NeonAI. After installation, any changes and additions can be pushed to git or hosted on a private +server. + +A user environment is designed to be an installation on a device that will be used normally as a voice assistant. You +may want to test how your changes affect performance on less powerful hardware or test how changes may be deployed as +updates. +If you are developing in a virtual machine, installation on physical hardware in a user environment is useful for +testing audio and video I/O which can be difficult in many virtualized environments. + +All the following options, such as autorun and automatic updates can be easily modified later using your voice, +profile settings, or configuration files. + +## Installing Neon in a Development Environment +Neon "core" is a collection of modules that may be installed and modified individually. These instructions will +outline a basic setup where the `neon_audio`, `neon_enclosure`, `neon_speech`, and any other modules are installed to their +latest stable versions. These modules may be installed as editable for further development; instructions for this can be +found [here](https://pip.pypa.io/en/stable/cli/pip_install/#editable-installs) + +1. Install required system packages +```shell +sudo apt install python3-dev python3-venv python3-pip swig libssl-dev libfann-dev portaudio19-dev git mpg123 ffmpeg +``` +> *Note*: The following commands can be used to install mimic for local TTS +```shell +sudo apt install -y curl +curl https://forslund.github.io/mycroft-desktop-repo/mycroft-desktop.gpg.key | sudo apt-key add - 2> /dev/null && echo "deb http://forslund.github.io/mycroft-desktop-repo bionic main" | sudo tee /etc/apt/sources.list.d/mycroft-desktop.list +sudo apt-get update +sudo apt install mimic +``` + +2. Clone NeonCore from your forked repository into a local directory. + +```shell +git clone https://github.com/NeonGeckoCom/NeonCore ~/NeonAI +cd ~/NeonAI +``` + +3. Create a virtual environment and activate it. +```shell +python3 -m venv ./.venv +. .venv/bin/activate +pip install wheel # this speeds up subsequent +``` + +4. If you have access to private Neon repositories, export your Github Personal Access Token as an environment variable +```shell +export GITHUB_TOKEN= +``` + +5. Install any desired requirements +```shell +pip install .[client,dev,remote] +``` + >*Note*: `dev`, `client`, and `remote` are recommended for general development installations. + > `local` may be substituted for `remote` + +6. Install the mycroft-gui package (optional) +```shell +git clone https://github.com/mycroftai/mycroft-gui +bash mycroft-gui/dev_setup.sh +rm -rf mycroft-gui +sudo apt-get install libqt5multimedia5-plugins qml-module-qtmultimedia +``` + >*Note*: dev_setup.sh is an interactive script; do not copy/paste the full block above into your terminal. + +7. Create and update configuration +```shell +neon-config-import +``` +Open `ngi_local_conf.yml` in your text editor of choice and make any desired changes. +If you selected `local` options above, you should change the following STT/TTS module lines: +```yaml +tts: + module: neon_tts_mimic + +stt: + module: deepspeech_stream_local +``` + +You may also choose to place logs, skills, configuration files, diagnostic files, etc. in the same directory as your cloned core +(default location is `~/.local/share/neon`). This isolates logs and skills if you have multiple cores installed. +```yaml +dirVars: + logsDir: ~/NeonCore/logs + diagsDir: ~/NeonCore/Diagnostics + skillsDir: ~/NeonCore/skills + confDir: ~/NeonCore/config +``` + +> *Note:* You may also have a configuration file you wish to copy here to overwrite the default one. + +8. Install default skills (optional) +```shell +neon-install-default-skills +``` +Installation of default skills will usually occur every time neon is started, but you may want to do this manually and +disable automatic skill installation to avoid conflicts with local development. The list of default skills may be changed +in `ngi_local_conf.yml` +```yaml +skills: + default_skills: +``` + >*Note:* The default_skills list may include URLs with branch specs, skill names, + > or a link to a text file containing either of these lists. + +10. Neon is now ready to run. You may start Neon with `neon-start` from a terminal; to start Neon in the background, run: +```shell +coproc neon-start >/dev/null 2>&1 & +``` + >*Note:* Starting Neon can take some time when skills are set to automatically install/update. You can speed this up + by disabling automatic skill installation/updates in `ngi_local_conf.yml`. +```yaml +skills: + auto_update: false +``` + +## Installing Neon in a User/Deployment Environment +Installing in a User Environment differs from a developer environment; you will not be able to modify Neon Core if you +use this installation method. + +1. Download `setup.sh` from the [NeonCore repository](https://github.com/NeonGeckoCom/NeonCore/blob/dev/setup.sh). + >*Note*: You can download this file by right-clicking `Raw` and selecting `Save link as...` +2. Take your `setup.sh` file and place it in your home directory + >![NeonDev](https://0000.us/klatchat/app/files/neon_images/neon_setup_screens/Neon1.png) +3. Open a terminal in your home directory (`ctrl`+`alt`+`t`) +4. Type in `bash setup.sh ${GITHUB_TOKEN}` and press `Enter` (where `${GITHUB_TOKEN}` is your Github token) + >*Note*: You can find instructions on how to generate a GitHub Personal Access Token + > [here](https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token) + + >![NeonDev](https://0000.us/klatchat/app/files/neon_images/neon_setup_screens/Neon2.png) +5. Type `n` to Install in User Mode (Not Developer Mode) +6. Type `n` to Input Custom settings + >*Note*: You may use quick settings and skip the following prompts +___ +8. Type `n` to install in User mode (`y` for full Developer mode) +8. `Autorun` is recommended (`y`) on for User Environments +8. `Automatic updates` are recommended (`y`) on for User Environments +8. `Local STT` is NOT recommended (`n`) IF you have google and aws keys, as remote processing is faster and more accurate +8. `Install GUI` is recommended (`y`) so long as your device has a display +8. Find out more about OpenHAB [here](https://www.openhab.org/docs/) +14. `Server` is NOT recommended (`n`) unless you know otherwise + +1. You will be prompted to confirm your settings, press `y` to continue, `n` to start over, or `b` to go back and + correct a previous setting + > ![NeonDev](https://0000.us/klatchat/app/files/neon_images/neon_setup_screens/Neon3-1.png) + +1. When setup is complete, you will be able to start Neon via `start_neon.sh` and stop Neon via: `stop_neon.sh` + +# Using Neon +After you have completed [Installing Neon](#installing-neon), you will have a fully functional system ready to test. + +## a. Activating the venv +If you followed the [Developer instructions](#installing-neon-in-a-development-environment) and attached Neon to an IDE +(such as PyCharm), your IDE likely configured a virtual environment in `NeonCore/venv`. +If you followed the [User instructions](#installing-neon-in-a-userdeployment-environment), a virtual environment was +created at `~/NeonAI/.venv`. + +To interact with Neon from a terminal, you need to activate the correct virtual environment by running: +`. ~/NeonAI/.venv/bin/activate` (or the appropriate path if you installed to a different directory). +> *Note:* If you are using an IDE like PyCharm, the built-in terminal will often activate the virtual environment automatically. + +You will know that your virtual environment is active by the `(.venv)` printed in your terminal. You may exit the `.venv` +shell by running `deactivate`. + +## b. Terminal Commands +From your shell with the virtual environment activated, you can see a list of available terminal commands by typing `neon` +and tapping `TAB` twice. Depending on which packages were installed with Neon, you might see `neon_cli_client` which +will launch the CLI for debugging. + +## c. Running Tests +From your shell with the virtual environment activated, `neon_skills_tests` will launch automated testing. You will be +prompted to select a test set to run (no entry will run `all`). Neon will proceed to execute and respond to a number of +requests, corresponding to all default installed skills. After all tests have run, a summary will be printed to the terminal +followed by any logged errors. +>*Note:* More complete logs and information can be found in the Diagnostics directory + >By default, this is at `~\NeonAI\Diagnostics\testing` for Development Machines and + `~\Documents\NeonGecko\Diagnostics\testing` for User Machines. + +## d. Troubleshooting +If you encounter any of the following issues while using Neon, please try these troubleshooting steps + +* My computer is slow to respond + > Check for high memory usage in `System Monitor`. If your Memory and Swap both show 100% utilization under + > `Resources`, try exiting PyCharm and Neon AI. If there is still abnormal memory usage, open a Terminal and type in: + ```bash + sudo systemctl stop openhab2.service + ``` + > If you can determine the offending program, see if restarting the program or your computer resolves your issues. If + > not, you may find common solutions online. + +* Neon AI is not transcribing anything I say + > Check that your microphone is working and active by going to `Sound` the `Settings` Menu. Go to the `Input` tab + > and make sure the correct microphone is selected. Make sure the `Input Level` is up and turned on and look for + > activity on the `Input Level` bar when you tap the mic. If you change devices here, restart Neon AI. + +* Some audio is very quiet, while other audio is louder + > Check that the audio level for the affected application is turned up by going to `Sound` the `Settings` Menu. Go to + > the `Applications` tab. + + > For quiet responses from Neon, ask Neon something with a longer response (ex. "Tell me a joke"). When an + > application named `neon-voice` appears, make sure it is not muted and that the volume is set to the maximum. Do + > the same for any other applications that are too quiet; start playing something and check the Application's + > volume. + +* AVMusic will not pause or resume + > If AVMusic playback is changed by something other than Neon, the skill can lose track of whether something is + > playing or paused. If something is paused and Neon will not resume, you may say "pause" to resume playback. "Stop" + > should work in any case. + +* Errors in the log when installing or updating Neon + > Installation of dlib can fail if system memory is completely full; you can open System Monitor during installation + > or updates to monitor memory usage. A minimum 2GB RAM is required, 4GB+ recommended. Errors may also occur if system + > storage becomes full. You may monitor storage availability in System Monitor as well; keep in mind that cached files + > will be removed when installation fails, so your file system will show some available space before and after the + > error occurs. + +* Any other issues + > If you encounter any other issues while using Neon, they can often be solved by restarting Neon or your computer. + > If this does not resolve you issue, please contact support at [info@neongecko.com](mailto:info@neongecko.com). + +# Removing and Re-installing Neon AI +You may wish to remove your Neon AI installation to start fresh with a new version. Below is a list of locations +where Neon may have saved files: + - `~/Documents/NeonGecko` + - `~/Pictures/NeonGecko` + - `~/Videos/NeonGecko` + - `~/Music/NeonGecko` + - `~/.local/share/neon` + - `~/.cache/neon` + - `~/NeonAI` + - `~/.neon` + - `/opt/neon` + - `/tmp/neon` + +You may now [re-install Neon](#installing-neon) + > *Note:* You may need your [credential files](#optional-service-account-setup) to complete re-installation. + diff --git a/documentation/service_account_setup.md b/documentation/service_account_setup.md new file mode 100644 index 000000000..093b70ee3 --- /dev/null +++ b/documentation/service_account_setup.md @@ -0,0 +1,105 @@ +[Optional Service Account Setup](#optional-service-account-setup) + * [a. Google Cloud Speech](#a-google-cloud-speech-setup) + * [b. Amazon Polly and Translate](#b-amazon-polly-and-translate-setup) + +# Optional Service Account Setup +There are several online services that may be used with Neon. Speech-to-Text (STT) and Text-to-Speech (TTS) may be run +locally, but remote implementations are often faster and more accurate. Following are some instructions for getting +access to Google STT and Amazon Polly TTS. During setup, these credentials will be imported and validated. +> *Note:* If you complete this setup on a Windows PC, make sure to edit any files using a text editor such as +[Notepad++](https://notepad-plus-plus.org/) to ensure compatibility in Linux. Also check for correct file extensions +after copying your files to your Linux PC, as Windows will hide known file extensions by default. + + +## a. Google Cloud Speech Setup +1. Go to: + > https://cloud.google.com/ + +1. Sign in or create a `Google account` + >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google1.png) + + +1. Go to your `Console` + >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google2.png) + + +1. Search for and select `"Cloud Speech-to-Text"` (Not to be confused with Text-to-Speech) +1. Select the option you would like to use + >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google3.png) + + +1. You will be prompted to enable billing on your account at this point because this service is paid after a free monthly +quota + > Google will not automatically charge your card unless you give permission to do so. +1. In the left `Navigation Menu`, select `APIs & Services`, `Credentials` + >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google4.png) + + +1. Click `Create credendials`, `Service Account Key` + >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google5.png) + + +1. Choose any service account name for your reference. You may leave the `Role` field empty +1. Make sure key type is `JSON` and click on `Continue` + >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google6.png) + + +1. If you did not assign a role, you would be prompted. You may continue by clicking `'CREATE WITHOUT ROLE'` + >![Google](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Google7.png) + + +1. You will see a prompt and your service key will automatically download +1. Rename the downloaded file to `google.json` and move it into the same directory as neonSetup.sh + + > *Note:* The premium models are only available in US English and provide some enhancements to phone and video audio + which do not apply to this project. The options with Data Logging allows Google to use your audio and transcriptions to + train their model. You may select the option without logging to opt out (note that the option with logging is + discounted). + +At this point, Neon can be partially tested without `Amazon translations` and `Wolfram information` skills. You may run +setup without continuing, but Amazon and Wolfram|Alpha services are *highly* recommended. + + +## b. Amazon Polly and Translate Setup +1. Go to: + > https://aws.amazon.com/ + +1. Click `"Sign into the Console"` at the top right of the screen + >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon1.png) + + +1. Sign in or register for an account +1. Go to the `Services Menu` at the top left of the screen and click `IAM` + >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon2.png) + + +1. Select `Users` from the left side menu and click `Add user` + >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon3.png) + + +1. Enter a `User name` and check the box for `Programmatic access` + >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon4.png) + + +1. On the next page, Select `'Attach existing policies directly'` and search for `'AmazonPollyFullAccess'` and +`'TranslateFullAccess'` + >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon5.png) + ![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon6.png) + + +1. You may add tags on the next page if desired +1. Review your selections on the next page and `Create user` + >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon7.png) + + +1. On the next page you can see your `Access key ID` and `Secret access key` +1. Click the `Download .csv file` button to save your credentials to your computer + >![Amazon](https://0000.us/klatchat/app/files/neon_images/account_setup_screens/Amazon8.png) + + +1. Copy or move the downloaded `accessKeys.csv` to the same directory as neonSetup.sh + + > *Note:* You will ***not*** be able to view your secret access key after it is generated, so if you need a secret + access key, you will have to generate a new Access key. + +The Users menu lets you create new users and new access keys per user as you wish, as well as modify permissions. From cd88a1b2853d5bac11b7da9a52bf424f64241b87 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Wed, 15 Mar 2023 01:35:43 +0000 Subject: [PATCH 34/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index bc88f9cbd..6d1c9cec3 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a15" +__version__ = "22.10.4a16" From bd8ef4e1ee3f8cbcfb44db355b9114e24ae21edd Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Wed, 15 Mar 2023 11:55:37 -0700 Subject: [PATCH 35/37] Update homeassistant skill to latest version (#383) --- requirements/skills_extended.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/skills_extended.txt b/requirements/skills_extended.txt index c3fbc0a66..eab62376c 100644 --- a/requirements/skills_extended.txt +++ b/requirements/skills_extended.txt @@ -9,4 +9,4 @@ neon-skill-synonyms~=0.1 neon-skill-translation~=0.3 neon-skill-camera~=0.2 ovos-skill-somafm~=0.0.1 -neon-homeassistant-skill~=0.0.8 \ No newline at end of file +neon-homeassistant-skill~=0.0.9 \ No newline at end of file From 173984035b09f3b941bf833aeeed15899635a050 Mon Sep 17 00:00:00 2001 From: NeonDaniel Date: Wed, 15 Mar 2023 18:56:04 +0000 Subject: [PATCH 36/37] Increment Version --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 6d1c9cec3..5bc4cb06b 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a16" +__version__ = "22.10.4a17" From 1771064f57dee95763e8ecfc7c714421acad5927 Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Wed, 15 Mar 2023 14:01:38 -0700 Subject: [PATCH 37/37] Update version to 22.3.15 (#384) --- version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.py b/version.py index 5bc4cb06b..46d493978 100644 --- a/version.py +++ b/version.py @@ -26,4 +26,4 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = "22.10.4a17" +__version__ = "23.03.15"