From 4e4e7b2f9b9a5f03a7aa757e63183eb05e93f207 Mon Sep 17 00:00:00 2001 From: JarbasAi Date: Fri, 4 Sep 2026 00:42:41 +0100 Subject: [PATCH] feat: migrate en-US intents to language-agnostic file-intents Replace all 14 IntentBuilder (Adapt) registrations in EnclosureControlSkill with @intent_handler("*.intent") file-intents, matching the pattern already used by eye_color/custom_eye_color/brightness. Each intent gets a new locale/en-US/*.intent template built from the existing sibling .voc phrase sets via inline-vocab references (ovos-spec-tools expansion, verified empirically end-to-end through a MiniCroft-backed skill load). Single-entry .voc files (blink, crazy, down, left, mouth, narrow, right, up) cannot be referenced via : the padatious/padacioso template compiler rejects a single-branch alternation group as malformed and silently drops the whole intent. Those words are now written as plain literals in the templates, and the now-consumerless en-US .voc files are deleted, along with five .voc files (mute, perform, reboot, system, unmute) that had no consumer left in the current handler set. The blink handler's two independent Adapt "right"/"left" flags become one {direction} entity slot; behaviour otherwise unchanged. golden_utterances.jsonl rows for these intents are updated from intent_type "adapt" to "padatious" with intent_label pointing at the new file basenames, so the existing data-driven golden-utterance suite keeps validating routing. pyproject.toml package-data gains the locale/*/*.entity glob the new direction.entity (and the existing color/brightness entities) need to ship in the wheel. Local run (en-US only): test/unittests (5), test/end2end/test_intents_en_us.py (2), test/end2end/test_entity_constraints.py (3), test/end2end/test_golden_utterances.py (54) all green. Co-Authored-By: Claude Sonnet 5 --- README.md | 7 +-- __init__.py | 72 +++++++++------------------- locale/en-US/blink.intent | 1 + locale/en-US/blink.voc | 1 - locale/en-US/crazy.voc | 1 - locale/en-US/crazy_eyes.intent | 1 + locale/en-US/direction.entity | 2 + locale/en-US/down.voc | 1 - locale/en-US/left.voc | 1 - locale/en-US/listen.intent | 1 + locale/en-US/look_down.intent | 2 + locale/en-US/look_left.intent | 2 + locale/en-US/look_left_right.intent | 2 + locale/en-US/look_right.intent | 2 + locale/en-US/look_up.intent | 2 + locale/en-US/look_up_down.intent | 2 + locale/en-US/mouth.voc | 1 - locale/en-US/mute.voc | 4 -- locale/en-US/narrow.voc | 1 - locale/en-US/narrow_eyes.intent | 2 + locale/en-US/perform.voc | 1 - locale/en-US/reboot.voc | 1 - locale/en-US/reset.intent | 2 + locale/en-US/right.voc | 1 - locale/en-US/smile.intent | 1 + locale/en-US/spin.intent | 1 + locale/en-US/system.voc | 2 - locale/en-US/think.intent | 1 + locale/en-US/unmute.voc | 3 -- locale/en-US/up.voc | 1 - pyproject.toml | 1 + test/end2end/golden_utterances.jsonl | 64 ++++++++++++------------- 32 files changed, 84 insertions(+), 103 deletions(-) create mode 100644 locale/en-US/blink.intent delete mode 100644 locale/en-US/blink.voc delete mode 100644 locale/en-US/crazy.voc create mode 100644 locale/en-US/crazy_eyes.intent create mode 100644 locale/en-US/direction.entity delete mode 100644 locale/en-US/down.voc delete mode 100644 locale/en-US/left.voc create mode 100644 locale/en-US/listen.intent create mode 100644 locale/en-US/look_down.intent create mode 100644 locale/en-US/look_left.intent create mode 100644 locale/en-US/look_left_right.intent create mode 100644 locale/en-US/look_right.intent create mode 100644 locale/en-US/look_up.intent create mode 100644 locale/en-US/look_up_down.intent delete mode 100644 locale/en-US/mouth.voc delete mode 100644 locale/en-US/mute.voc delete mode 100644 locale/en-US/narrow.voc create mode 100644 locale/en-US/narrow_eyes.intent delete mode 100644 locale/en-US/perform.voc delete mode 100644 locale/en-US/reboot.voc create mode 100644 locale/en-US/reset.intent delete mode 100644 locale/en-US/right.voc create mode 100644 locale/en-US/smile.intent create mode 100644 locale/en-US/spin.intent delete mode 100644 locale/en-US/system.voc create mode 100644 locale/en-US/think.intent delete mode 100644 locale/en-US/unmute.voc delete mode 100644 locale/en-US/up.voc diff --git a/README.md b/README.md index d6d07e0..758dfe9 100644 --- a/README.md +++ b/README.md @@ -34,9 +34,10 @@ pip install ovos-skill-mark1-ctrl * "look up and down" * "reset enclosure" -* "narrow your eyes" -* "spin your eyes" -* "blink your eyes" +* "narrow eyes" +* "spin eyes" +* "blink" +* "blink left" * "smile animation" * "listen animation" diff --git a/__init__.py b/__init__.py index 57ffac6..1009d8b 100644 --- a/__init__.py +++ b/__init__.py @@ -6,7 +6,6 @@ from ovos_utils.log import LOG from ovos_utils.process_utils import RuntimeRequirements from ovos_workshop.decorators import intent_handler -from ovos_workshop.intents import IntentBuilder from ovos_workshop.skills import OVOSSkill from ovos_bus_client.message import Message from ovos_i2c_detection import is_mark_1 @@ -156,113 +155,88 @@ def play_animation(self, animation=None): self.animations = animation self.thread = create_daemon(self.run) - @intent_handler(IntentBuilder("EnclosureLookRight") - .require("look").require("right") - .optionally("enclosure")) + @intent_handler("look_right.intent") def handle_look_right(self, message): self.speak("looking right") self.enclosure.eyes_look("r") - @intent_handler(IntentBuilder("EnclosureLookLeft") - .require("look").require("left").optionally("enclosure")) + @intent_handler("look_left.intent") def handle_look_left(self, message): self.speak("looking left") self.enclosure.eyes_look("l") - @intent_handler(IntentBuilder("EnclosureLookUp") - .require("look").require("up").optionally("enclosure")) + @intent_handler("look_up.intent") def handle_look_up(self, message): self.speak("looking up") self.enclosure.eyes_look("u") - @intent_handler(IntentBuilder("EnclosureLookDown") - .require("look").require("down").optionally("enclosure")) + @intent_handler("look_down.intent") def handle_look_down(self, message): self.speak("looking down") self.enclosure.eyes_look("d") - @intent_handler(IntentBuilder("EnclosureLookUpDown") - .require("look").require("up") - .require("down").optionally("enclosure") - .optionally("animation")) + @intent_handler("look_up_down.intent") def handle_look_up_down(self, message): self.speak("up and down, up and down") self.play_animation(self.up_down_animation) - @intent_handler(IntentBuilder("EnclosureLookLeftRight") - .require("look").require("right") - .require("left").optionally("enclosure") - .optionally("animation")) + @intent_handler("look_left_right.intent") def handle_look_left_right(self, message): self.speak("left and right, left and right") self.play_animation(self.left_right_animation) - @intent_handler(IntentBuilder("EnclosureEyesBlink") - .require("blink") - .optionally("eyes").optionally("animation") - .optionally("enclosure").optionally("right") - .optionally("left")) + @intent_handler("blink.intent") def handle_blink_eyes(self, message): + """ Blink the eyes, optionally in just one direction. + + Args: + message (Message): carries an optional {direction} slot + ("left"/"right"); absent means blink both eyes. + """ + direction = message.data.get("direction") for i in range(0, 10): - if "right" in message.data: + if direction == "right": self.enclosure.eyes_blink("r") - if "left" in message.data: + elif direction == "left": self.enclosure.eyes_blink("l") else: self.enclosure.eyes_blink("b") self.speak("so this is what it feels like having low F P S") - @intent_handler(IntentBuilder("EnclosureEyesSpin") - .require("spin") - .optionally("eyes").optionally("animation") - .optionally("enclosure")) + @intent_handler("spin.intent") def handle_spin_eyes(self, message): self.speak("around the world, here i go") self.enclosure.eyes_spin() - @intent_handler(IntentBuilder("EnclosureEyesNarrow") - .require("narrow").require("eyes") - .optionally("enclosure")) + @intent_handler("narrow_eyes.intent") def handle_narrow_eyes(self, message): self.speak("this is my evil face") self.enclosure.eyes_narrow() self.enclosure.eyes_color(255, 0, 0) - @intent_handler(IntentBuilder("EnclosureReset") - .require("reset").require("enclosure")) + @intent_handler("reset.intent") def handle_enclosure_reset(self, message): self.handle_default_eyes() self.enclosure.eyes_reset() self.enclosure.mouth_reset() self.speak("this was fun") - @intent_handler(IntentBuilder("EnclosureMouthSmile") - .require("smile") - .optionally("animation").optionally("mouth") - .optionally("enclosure")) + @intent_handler("smile.intent") def handle_enclosure_smile(self, message): self.enclosure.mouth_smile() self.speak("i don't know how to smile") - @intent_handler(IntentBuilder("EnclosureMouthListen") - .require("listen") - .optionally("animation").optionally("mouth") - .optionally("enclosure")) + @intent_handler("listen.intent") def handle_enclosure_listen(self, message): self.speak("when i do this i feel like I'm dancing") self.enclosure.mouth_listen() - @intent_handler(IntentBuilder("EnclosureMouthThink") - .require("think") - .optionally("animation").optionally("mouth") - .optionally("enclosure")) + @intent_handler("think.intent") def handle_enclosure_think(self, message): self.speak("i love thinking") self.enclosure.mouth_think() - @intent_handler(IntentBuilder("EnclosureCrazyEyes") - .require("eyes").optionally("animation").require("crazy") - .optionally("enclosure")) + @intent_handler("crazy_eyes.intent") def handle_enclosure_crazy_eyes(self, message): self.speak("artificial intelligence performing artificial " "stupidity, you don't see this every day") diff --git a/locale/en-US/blink.intent b/locale/en-US/blink.intent new file mode 100644 index 0000000..d179b8d --- /dev/null +++ b/locale/en-US/blink.intent @@ -0,0 +1 @@ +blink [{direction}] [] [] [] diff --git a/locale/en-US/blink.voc b/locale/en-US/blink.voc deleted file mode 100644 index 647107e..0000000 --- a/locale/en-US/blink.voc +++ /dev/null @@ -1 +0,0 @@ -blink \ No newline at end of file diff --git a/locale/en-US/crazy.voc b/locale/en-US/crazy.voc deleted file mode 100644 index 85109f9..0000000 --- a/locale/en-US/crazy.voc +++ /dev/null @@ -1 +0,0 @@ -crazy \ No newline at end of file diff --git a/locale/en-US/crazy_eyes.intent b/locale/en-US/crazy_eyes.intent new file mode 100644 index 0000000..360f49a --- /dev/null +++ b/locale/en-US/crazy_eyes.intent @@ -0,0 +1 @@ +crazy [] [] diff --git a/locale/en-US/direction.entity b/locale/en-US/direction.entity new file mode 100644 index 0000000..ffa2cab --- /dev/null +++ b/locale/en-US/direction.entity @@ -0,0 +1,2 @@ +right +left diff --git a/locale/en-US/down.voc b/locale/en-US/down.voc deleted file mode 100644 index d00e753..0000000 --- a/locale/en-US/down.voc +++ /dev/null @@ -1 +0,0 @@ -down \ No newline at end of file diff --git a/locale/en-US/left.voc b/locale/en-US/left.voc deleted file mode 100644 index d75e9e5..0000000 --- a/locale/en-US/left.voc +++ /dev/null @@ -1 +0,0 @@ -left \ No newline at end of file diff --git a/locale/en-US/listen.intent b/locale/en-US/listen.intent new file mode 100644 index 0000000..84b3bd9 --- /dev/null +++ b/locale/en-US/listen.intent @@ -0,0 +1 @@ + [] [mouth] [] diff --git a/locale/en-US/look_down.intent b/locale/en-US/look_down.intent new file mode 100644 index 0000000..e74db33 --- /dev/null +++ b/locale/en-US/look_down.intent @@ -0,0 +1,2 @@ + down [] +down [] diff --git a/locale/en-US/look_left.intent b/locale/en-US/look_left.intent new file mode 100644 index 0000000..21faa8e --- /dev/null +++ b/locale/en-US/look_left.intent @@ -0,0 +1,2 @@ + left [] +left [] diff --git a/locale/en-US/look_left_right.intent b/locale/en-US/look_left_right.intent new file mode 100644 index 0000000..041a4ee --- /dev/null +++ b/locale/en-US/look_left_right.intent @@ -0,0 +1,2 @@ + left [and] right [] [] +left right [] [] diff --git a/locale/en-US/look_right.intent b/locale/en-US/look_right.intent new file mode 100644 index 0000000..0685022 --- /dev/null +++ b/locale/en-US/look_right.intent @@ -0,0 +1,2 @@ + right [] +right [] diff --git a/locale/en-US/look_up.intent b/locale/en-US/look_up.intent new file mode 100644 index 0000000..d5e82f7 --- /dev/null +++ b/locale/en-US/look_up.intent @@ -0,0 +1,2 @@ + up [] +up [] diff --git a/locale/en-US/look_up_down.intent b/locale/en-US/look_up_down.intent new file mode 100644 index 0000000..5de3be8 --- /dev/null +++ b/locale/en-US/look_up_down.intent @@ -0,0 +1,2 @@ + up [and] down [] [] +down up [] [] diff --git a/locale/en-US/mouth.voc b/locale/en-US/mouth.voc deleted file mode 100644 index 6027101..0000000 --- a/locale/en-US/mouth.voc +++ /dev/null @@ -1 +0,0 @@ -mouth \ No newline at end of file diff --git a/locale/en-US/mute.voc b/locale/en-US/mute.voc deleted file mode 100644 index 417ed49..0000000 --- a/locale/en-US/mute.voc +++ /dev/null @@ -1,4 +0,0 @@ -mute -sound disable -sound off -sound shutdown \ No newline at end of file diff --git a/locale/en-US/narrow.voc b/locale/en-US/narrow.voc deleted file mode 100644 index d7dced3..0000000 --- a/locale/en-US/narrow.voc +++ /dev/null @@ -1 +0,0 @@ -narrow \ No newline at end of file diff --git a/locale/en-US/narrow_eyes.intent b/locale/en-US/narrow_eyes.intent new file mode 100644 index 0000000..b108810 --- /dev/null +++ b/locale/en-US/narrow_eyes.intent @@ -0,0 +1,2 @@ +narrow [] [] + narrow [] diff --git a/locale/en-US/perform.voc b/locale/en-US/perform.voc deleted file mode 100644 index 31d2cc6..0000000 --- a/locale/en-US/perform.voc +++ /dev/null @@ -1 +0,0 @@ -perform \ No newline at end of file diff --git a/locale/en-US/reboot.voc b/locale/en-US/reboot.voc deleted file mode 100644 index dde059f..0000000 --- a/locale/en-US/reboot.voc +++ /dev/null @@ -1 +0,0 @@ -reboot \ No newline at end of file diff --git a/locale/en-US/reset.intent b/locale/en-US/reset.intent new file mode 100644 index 0000000..6934631 --- /dev/null +++ b/locale/en-US/reset.intent @@ -0,0 +1,2 @@ + [] + diff --git a/locale/en-US/right.voc b/locale/en-US/right.voc deleted file mode 100644 index 19981f7..0000000 --- a/locale/en-US/right.voc +++ /dev/null @@ -1 +0,0 @@ -right \ No newline at end of file diff --git a/locale/en-US/smile.intent b/locale/en-US/smile.intent new file mode 100644 index 0000000..2dbd956 --- /dev/null +++ b/locale/en-US/smile.intent @@ -0,0 +1 @@ + [] [mouth] [] diff --git a/locale/en-US/spin.intent b/locale/en-US/spin.intent new file mode 100644 index 0000000..8b7eb75 --- /dev/null +++ b/locale/en-US/spin.intent @@ -0,0 +1 @@ + [] [] diff --git a/locale/en-US/system.voc b/locale/en-US/system.voc deleted file mode 100644 index 2e3eac7..0000000 --- a/locale/en-US/system.voc +++ /dev/null @@ -1,2 +0,0 @@ -operating system -system \ No newline at end of file diff --git a/locale/en-US/think.intent b/locale/en-US/think.intent new file mode 100644 index 0000000..0fad872 --- /dev/null +++ b/locale/en-US/think.intent @@ -0,0 +1 @@ + [] [mouth] [] diff --git a/locale/en-US/unmute.voc b/locale/en-US/unmute.voc deleted file mode 100644 index 5d526b7..0000000 --- a/locale/en-US/unmute.voc +++ /dev/null @@ -1,3 +0,0 @@ -sound enable -sound on -unmute \ No newline at end of file diff --git a/locale/en-US/up.voc b/locale/en-US/up.voc deleted file mode 100644 index 4d3e85f..0000000 --- a/locale/en-US/up.voc +++ /dev/null @@ -1 +0,0 @@ -up \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 9cfdd47..001a04b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,4 +55,5 @@ ovos_skill_mark1_ctrl = [ "locale/*/*.intent", "locale/*/*.dialog", "locale/*/*.voc", + "locale/*/*.entity", ] diff --git a/test/end2end/golden_utterances.jsonl b/test/end2end/golden_utterances.jsonl index e19386e..6bba843 100644 --- a/test/end2end/golden_utterances.jsonl +++ b/test/end2end/golden_utterances.jsonl @@ -1,35 +1,35 @@ -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "right look", "intent_method": "handle_look_right", "intent_label": "EnclosureLookRight", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "right look enclosure", "intent_method": "handle_look_right", "intent_label": "EnclosureLookRight", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "left look", "intent_method": "handle_look_left", "intent_label": "EnclosureLookLeft", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "left look enclosure", "intent_method": "handle_look_left", "intent_label": "EnclosureLookLeft", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "up look", "intent_method": "handle_look_up", "intent_label": "EnclosureLookUp", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "up look enclosure", "intent_method": "handle_look_up", "intent_label": "EnclosureLookUp", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "down look", "intent_method": "handle_look_down", "intent_label": "EnclosureLookDown", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "down look enclosure", "intent_method": "handle_look_down", "intent_label": "EnclosureLookDown", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "down up look", "intent_method": "handle_look_up_down", "intent_label": "EnclosureLookUpDown", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "down up look animation", "intent_method": "handle_look_up_down", "intent_label": "EnclosureLookUpDown", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "down up look enclosure", "intent_method": "handle_look_up_down", "intent_label": "EnclosureLookUpDown", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "left right look", "intent_method": "handle_look_left_right", "intent_label": "EnclosureLookLeftRight", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "left right look animation", "intent_method": "handle_look_left_right", "intent_label": "EnclosureLookLeftRight", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "left right look enclosure", "intent_method": "handle_look_left_right", "intent_label": "EnclosureLookLeftRight", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "blink", "intent_method": "handle_blink_eyes", "intent_label": "EnclosureEyesBlink", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "blink left", "intent_method": "handle_blink_eyes", "intent_label": "EnclosureEyesBlink", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "blink right", "intent_method": "handle_blink_eyes", "intent_label": "EnclosureEyesBlink", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "blink enclosure", "intent_method": "handle_blink_eyes", "intent_label": "EnclosureEyesBlink", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "rotate", "intent_method": "handle_spin_eyes", "intent_label": "EnclosureEyesSpin", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "rotate enclosure", "intent_method": "handle_spin_eyes", "intent_label": "EnclosureEyesSpin", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "eye narrow", "intent_method": "handle_narrow_eyes", "intent_label": "EnclosureEyesNarrow", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "eye narrow enclosure", "intent_method": "handle_narrow_eyes", "intent_label": "EnclosureEyesNarrow", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "enclosure back to default", "intent_method": "handle_enclosure_reset", "intent_label": "EnclosureReset", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "smile", "intent_method": "handle_enclosure_smile", "intent_label": "EnclosureMouthSmile", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "smile enclosure", "intent_method": "handle_enclosure_smile", "intent_label": "EnclosureMouthSmile", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "listen", "intent_method": "handle_enclosure_listen", "intent_label": "EnclosureMouthListen", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "listen enclosure", "intent_method": "handle_enclosure_listen", "intent_label": "EnclosureMouthListen", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "think", "intent_method": "handle_enclosure_think", "intent_label": "EnclosureMouthThink", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "think enclosure", "intent_method": "handle_enclosure_think", "intent_label": "EnclosureMouthThink", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "crazy eye", "intent_method": "handle_enclosure_crazy_eyes", "intent_label": "EnclosureCrazyEyes", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "crazy eye enclosure", "intent_method": "handle_enclosure_crazy_eyes", "intent_label": "EnclosureCrazyEyes", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} -{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "crazy eye animation", "intent_method": "handle_enclosure_crazy_eyes", "intent_label": "EnclosureCrazyEyes", "intent_type": "adapt", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "right look", "intent_method": "handle_look_right", "intent_label": "look_right.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "right look enclosure", "intent_method": "handle_look_right", "intent_label": "look_right.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "left look", "intent_method": "handle_look_left", "intent_label": "look_left.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "left look enclosure", "intent_method": "handle_look_left", "intent_label": "look_left.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "up look", "intent_method": "handle_look_up", "intent_label": "look_up.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "up look enclosure", "intent_method": "handle_look_up", "intent_label": "look_up.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "down look", "intent_method": "handle_look_down", "intent_label": "look_down.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "down look enclosure", "intent_method": "handle_look_down", "intent_label": "look_down.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "down up look", "intent_method": "handle_look_up_down", "intent_label": "look_up_down.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "down up look animation", "intent_method": "handle_look_up_down", "intent_label": "look_up_down.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "down up look enclosure", "intent_method": "handle_look_up_down", "intent_label": "look_up_down.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "left right look", "intent_method": "handle_look_left_right", "intent_label": "look_left_right.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "left right look animation", "intent_method": "handle_look_left_right", "intent_label": "look_left_right.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "left right look enclosure", "intent_method": "handle_look_left_right", "intent_label": "look_left_right.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "blink", "intent_method": "handle_blink_eyes", "intent_label": "blink.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "blink left", "intent_method": "handle_blink_eyes", "intent_label": "blink.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "blink right", "intent_method": "handle_blink_eyes", "intent_label": "blink.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "blink enclosure", "intent_method": "handle_blink_eyes", "intent_label": "blink.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "rotate", "intent_method": "handle_spin_eyes", "intent_label": "spin.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "rotate enclosure", "intent_method": "handle_spin_eyes", "intent_label": "spin.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "eye narrow", "intent_method": "handle_narrow_eyes", "intent_label": "narrow_eyes.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "eye narrow enclosure", "intent_method": "handle_narrow_eyes", "intent_label": "narrow_eyes.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "enclosure back to default", "intent_method": "handle_enclosure_reset", "intent_label": "reset.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "smile", "intent_method": "handle_enclosure_smile", "intent_label": "smile.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "smile enclosure", "intent_method": "handle_enclosure_smile", "intent_label": "smile.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "listen", "intent_method": "handle_enclosure_listen", "intent_label": "listen.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "listen enclosure", "intent_method": "handle_enclosure_listen", "intent_label": "listen.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "think", "intent_method": "handle_enclosure_think", "intent_label": "think.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "think enclosure", "intent_method": "handle_enclosure_think", "intent_label": "think.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "crazy eye", "intent_method": "handle_enclosure_crazy_eyes", "intent_label": "crazy_eyes.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "crazy eye enclosure", "intent_method": "handle_enclosure_crazy_eyes", "intent_label": "crazy_eyes.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} +{"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "crazy eye animation", "intent_method": "handle_enclosure_crazy_eyes", "intent_label": "crazy_eyes.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} {"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "change to a custom eye color", "intent_method": "handle_custom_eye_color", "intent_label": "custom_eye_color.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} {"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "change to a custom eye colors", "intent_method": "handle_custom_eye_color", "intent_label": "custom_eye_color.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false} {"skill_id": "ovos-skill-mark1-ctrl.openvoiceos", "utterance": "set to a custom eye color", "intent_method": "handle_custom_eye_color", "intent_label": "custom_eye_color.intent", "intent_type": "padatious", "expected_messages": ["speak"], "needs_manual": false}