-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path__init__.py
69 lines (58 loc) · 2.24 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from hivemind_bus_client import HiveMessageBusClient
from ovos_bus_client.message import Message
from ovos_utils import classproperty
from ovos_utils.process_utils import RuntimeRequirements
from ovos_workshop.skills.fallback import FallbackSkill
class HiveMindFallbackSkill(FallbackSkill):
@classproperty
def runtime_requirements(self):
return RuntimeRequirements(
internet_before_load=True,
network_before_load=True,
requires_internet=True,
requires_network=True,
)
def initialize(self):
# values are taken from the NodeIdentity file
# set via 'hivemind-client set-identity'
self.hm = HiveMessageBusClient(
share_bus=self.slave_mode,
useragent=f"HiveMindFallbackSkill",
self_signed=self.settings.get("allow_selfsigned", False),
internal_bus=self.bus if self.slave_mode else None
)
self.hm.run_in_thread()
if not self.slave_mode:
self.hm.on_mycroft("speak", self.on_speak)
self.register_fallback(self.ask_hivemind, 85)
def on_speak(self, message):
# master has no direct access to OVOS bus
# we need to re-emit speak messages sent by master
utt = message.data["utterance"]
self.speak(utt)
@property
def slave_mode(self):
return self.settings.get("slave_mode", False)
@property
def ai_name(self):
return self.settings.get("name", "Hive Mind")
@property
def confirmation(self):
return self.settings.get("confirmation", True)
def ask_hivemind(self, message):
if self.confirmation:
self.speak_dialog("asking", data={"name": self.ai_name})
utterance = message.data["utterance"]
try:
self.hm.emit_mycroft(
Message("recognizer_loop:utterance",
{"utterances": [utterance], "lang": self.lang})
)
# hivemind will answer async
return True
except:
if self.confirmation:
# speak an error if we said we were asking hivemind
# but let next fallback try to answer
self.speak_dialog("hivemind_error")
return False