15 from functools
import lru_cache
16 from subprocess
import call
17 from threading
import Event
18 from time
import time
as get_time, sleep
20 from os.path
import expanduser, isfile
21 from pkg_resources
import get_distribution
32 fallback_tight_match = 5
33 fallback_loose_match = 89
36 FallbackSkill.__init__(self, use_settings=
False)
37 if not PadatiousService.instance:
38 PadatiousService.instance = self
45 from padatious
import IntentContainer
47 LOG.error(
'Padatious not installed. Please re-run dev_setup.sh')
49 call([
'notify-send',
'Padatious not installed',
50 'Please run build_host_setup and dev_setup again'])
62 self.bus.on(
'mycroft.skills.initialized', self.
train)
66 PadatiousService.fallback_tight_match)
70 PadatiousService.fallback_loose_match)
84 single_thread = message.data.get(
'single_thread',
False)
85 self.finished_training_event.clear()
87 LOG.info(
'Training... (single_thread={})'.format(single_thread))
88 self.container.train(single_thread=single_thread)
89 LOG.info(
'Training complete.')
91 self.finished_training_event.set()
93 LOG.info(
"Mycroft is all loaded and ready to roll!")
94 self.bus.emit(
Message(
'mycroft.ready'))
109 self.registered_intents.remove(intent_name)
110 self.container.remove_intent(intent_name)
116 skill_id = message.data[
'skill_id']
118 for i
in remove_list:
122 file_name = message.data[
'file_name']
123 name = message.data[
'name']
125 LOG.debug(
'Registering Padatious ' + object_name +
': ' + name)
127 if not isfile(file_name):
128 LOG.warning(
'Could not find file ' + file_name)
131 register_func(name, file_name)
136 self.registered_intents.append(message.data[
'name'])
143 if not self.finished_training_event.is_set():
144 LOG.debug(
'Waiting for Padatious training to finish...')
147 utt = message.data.get(
'utterance',
'')
148 LOG.debug(
"Padatious fallback attempt: " + utt)
151 if not intent
or intent.conf < threshold:
153 norm = message.data.get(
'norm_utt',
'')
155 LOG.debug(
" alt attempt: " + norm)
158 if not intent
or intent.conf < threshold:
161 intent.matches[
'utterance'] = utt
162 self.service.add_active_skill(intent.name.split(
':')[0])
163 self.bus.emit(message.reply(intent.name, data=intent.matches))
171 @lru_cache(maxsize=2)
173 return self.container.calc_intent(utt)
def _register_object(self, message, object_name, register_func)
def register_fallback(self, handler, priority)
def __detach_intent(self, intent_name)
def calc_intent(self, utt)
def handle_fallback(self, message, threshold=0.8)
def register_intent(self, message)
def train(self, message=None)
def handle_detach_skill(self, message)
def register_intent(self, intent_parser, handler)
def handle_detach_intent(self, message)
def handle_fallback_last_chance(self, message)
def register_entity(self, message)
def __init__(self, bus, service)