Boilerplate for Snips skills in Python3
Project description
snips-skill
Helpers to keep Snips skills in Python3 free of boilerplate code.
Contents
MqttClient
: A thin wrapper around paho-mqttCommandLineClient
skeleton MQTT command line client with connection settings.SnipsClient
: Reads connection parameters from/etc/snips/toml
- Snips-specific decorators for callbacks, see below.
MultiRoomConfig
: Utilities for multi-room setups.Skill
: Base class for Snips actions.@intent
decorator, see below.
Plain MQTT clients
Plain MQTT is supported via the MqttClient
and CommandLineClient
classes
and the @topic
decorator.
A CommandLineClient
provides argument parsing for connection parameters and includes
standard logging. For message handling, define a function or method as
above, and decorate it with @topic
. This registers the method (or function)
as a callback for the given MQTT topic.
Usage example
from snips_skill import CommandLineClient, topic
class Logger(CommandLineClient):
'Log all incoming MQTT messages'
@topic('#')
def print_msg(self, userdata, msg):
self.log.info("%s: %s", msg.topic, msg.payload[:64])
if __name__ == '__main__':
Logger().run()
Snips session event decorators
The Skill
class provides automatic connection configuration via /etc/snips/toml
.
Also, the following Snips-specific decorators for session events are provided:
on_intent
: Handle intents,on_intent_not_recognized
: Handle unknown intents,on_start_session
: Called before session start,on_continue_session
: Called for subsequent session prompts,on_session_started
: Called at session start,on_end_session
: Called before session end,on_session_ended
: Called at session end.
All decorators can be used either on standalone callback functions,
or on methods of the various client classes (including Skill
).
Methods should expect the parameters self, userdata, msg
, and
standalone functions should expect client, userdata, msg
.
Multiple decorators on the same method are possible,
but if they have inconsistent qos
values, the results will be unpredictable.
Also note that multiple decorators will produce repetitive log lines
with DEBUG
level. Set log_level=None
on all but one decorator to fix it.
The @intent
decorator
@intent
-decorated callbacks receive msg.paylod
as an IntentPayload
object, a parsed version of the JSON intent data.
Slot values are converted to appropriate Python types.
The next step in the Snips session depends on the outcome of the decorated function or method:
- If the function returns a string or raises a
SnipsError
, the session ends with a message, - If it returns en empty string, the session is ended silently.
- If it raises a
SnipsClarificationError
, the session is continued with a question. This can be used to narrow down parameters or to implement question-and-answer sequences.
To require a minimum level of confidence for an intent,
put @min_confidence
below @intent
.
To ensure that certain slots are present in the intent,
put @require_slot
with a slot name below @intent
.
The @intent
decorator should not be used in combination
with any on_*
decorators.
Usage example
from snips_skill import intent, Skill
class HelloSkill(Skill):
'Snips skill to say hello'
@intent('example:hello')
def say_hello(self, userdata, msg):
return 'Hello, there'
if __name__ == '__main__':
HelloSkill().run()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file snips-skill-0.1.4.tar.gz
.
File metadata
- Download URL: snips-skill-0.1.4.tar.gz
- Upload date:
- Size: 20.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7c4cd14a02eed680cab07cbaa06ecec85af74bcdaf19790321ef0a3c679f9f1c |
|
MD5 | a1105d46a568b4c20c98aa42de80ceda |
|
BLAKE2b-256 | fc2db9a647d9f704590e94aabf923ba170ef9d551ead5f7f2fda29624259f3a8 |
File details
Details for the file snips_skill-0.1.4-py2.py3-none-any.whl
.
File metadata
- Download URL: snips_skill-0.1.4-py2.py3-none-any.whl
- Upload date:
- Size: 23.2 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | dabccc2b0d62ab13f21dc41c013abb117d00b99fd611c1e7ce01435b95b4346f |
|
MD5 | 029be87687989cf6d3dabffc0c4563a3 |
|
BLAKE2b-256 | 5c3a082ddedacfce3a670095588d599ec8165582594884a6c422013d9355d08a |