From b2e1494b7f69599dce561d6cd2d346d80d81d402 Mon Sep 17 00:00:00 2001 From: miro Date: Mon, 9 Dec 2024 15:36:27 +0000 Subject: [PATCH] optimize: dont load padacioso if not needed by default --- ovos_core/intent_services/__init__.py | 48 ++++++++++++++++++--------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/ovos_core/intent_services/__init__.py b/ovos_core/intent_services/__init__.py index a22c518b333..bdb309ac5d4 100644 --- a/ovos_core/intent_services/__init__.py +++ b/ovos_core/intent_services/__init__.py @@ -15,14 +15,16 @@ from collections import defaultdict from typing import Tuple, Callable, Union -from ocp_pipeline.opm import OCPPipelineMatcher from ovos_adapt.opm import AdaptPipeline +from ovos_commonqa.opm import CommonQAService +from padacioso.opm import PadaciosoPipeline as PadaciosoService + +from ocp_pipeline.opm import OCPPipelineMatcher from ovos_bus_client.message import Message from ovos_bus_client.session import SessionManager from ovos_bus_client.util import get_message_lang -from ovos_commonqa.opm import CommonQAService from ovos_config.config import Configuration -from ovos_config.locale import setup_locale, get_valid_languages +from ovos_config.locale import get_valid_languages from ovos_core.intent_services.converse_service import ConverseService from ovos_core.intent_services.fallback_service import FallbackService from ovos_core.intent_services.stop_service import StopService @@ -31,7 +33,6 @@ from ovos_utils.lang import standardize_lang_tag from ovos_utils.log import LOG, log_deprecation, deprecated from ovos_utils.metrics import Stopwatch -from padacioso.opm import PadaciosoPipeline as PadaciosoService class IntentService: @@ -96,7 +97,14 @@ def _load_pipeline_plugins(self): except ImportError: LOG.error(f'Failed to create padatious intent handlers, padatious not installed') - self._padacioso_service = PadaciosoService(self.bus, self.config["padatious"]) + # by default only load padacioso is padatious is not available + # save memory if padacioso isnt needed + disable_padacioso = self.config.get("disable_padacioso", self._padatious_service is not None) + if not disable_padacioso: + self._padacioso_service = PadaciosoService(self.bus, self.config["padatious"]) + elif "disable_padacioso" not in self.config: + LOG.debug("Padacioso pipeline is disabled, only padatious is loaded. " + "set 'disable_padacioso': false in mycroft.conf if you want it to load alongside padatious") self._fallback = FallbackService(self.bus) self._converse = ConverseService(self.bus) self._common_qa = CommonQAService(self.bus, self.config.get("common_query")) @@ -168,11 +176,13 @@ def get_pipeline(self, skips=None, session=None) -> Tuple[str, Callable]: # Create matchers # TODO - from plugins + padatious_matcher = None if self._padatious_service is None: - if any("padatious" in p for p in session.pipeline): - LOG.warning("padatious is not available! using padacioso in it's place, " - "intent matching will be extremely slow in comparison") - padatious_matcher = self._padacioso_service + if self._padacioso_service is not None: + if any("padatious" in p for p in session.pipeline): + LOG.warning("padatious is not available! using padacioso in it's place, " + "intent matching will be extremely slow in comparison") + padatious_matcher = self._padacioso_service else: padatious_matcher = self._padatious_service @@ -181,20 +191,28 @@ def get_pipeline(self, skips=None, session=None) -> Tuple[str, Callable]: "stop_high": self._stop.match_stop_high, "stop_medium": self._stop.match_stop_medium, "stop_low": self._stop.match_stop_low, - "padatious_high": padatious_matcher.match_high, - "padacioso_high": self._padacioso_service.match_high, "adapt_high": self._adapt_service.match_high, "common_qa": self._common_qa.match, "fallback_high": self._fallback.high_prio, - "padatious_medium": padatious_matcher.match_medium, - "padacioso_medium": self._padacioso_service.match_medium, "adapt_medium": self._adapt_service.match_medium, "fallback_medium": self._fallback.medium_prio, - "padatious_low": padatious_matcher.match_low, - "padacioso_low": self._padacioso_service.match_low, "adapt_low": self._adapt_service.match_low, "fallback_low": self._fallback.low_prio } + if self._padacioso_service is not None: + matchers.update({ + "padacioso_high": self._padacioso_service.match_high, + "padacioso_medium": self._padacioso_service.match_medium, + "padacioso_low": self._padacioso_service.match_low, + + }) + if self._padatious_service is not None: + matchers.update({ + "padatious_high": padatious_matcher.match_high, + "padatious_medium": padatious_matcher.match_medium, + "padatious_low": padatious_matcher.match_low, + + }) if self._ocp is not None: matchers.update({ "ocp_high": self._ocp.match_high,