HassIL
The Home Assistant Intent Language (HassIL) parser for intents.
Dependencies
Installation
Run the script/setup
script to automatically create a virtual environment and install the requirements.
Running
python3 -m hassil <yaml_file_or_directory> [<yaml_file_or_directory> ...]
Once loaded, you may type in a sentence and see what intent it matches.
For example:
python3 -m hassil examples/en.yaml --areas 'living room'
what is the temperature in the living room
{'intent': 'HassClimateGetTemperature', 'area': 'living room', 'domain': 'climate'}
Make sure to provide area names with --areas
. Device or entity names can be provided with --names
.
python3 -m hassil examples/en.yaml --areas office --names trapdoor
open the trapdoor in the office
{'intent': 'HassOpenCover', 'name': 'trapdoor', 'area': 'office'}
Sampling Sentences
Sentences for each intent can be sampled from the intent YAML files:
python3 -m hassil.sample examples/en.yaml -n 1
{"intent": "HassTurnOn", "text": "turn on the entity"}
{"intent": "HassTurnOff", "text": "turn off the entity"}
{"intent": "HassOpenCover", "text": "open the entity in the area"}
{"intent": "HassCloseCover", "text": "close the entity in the area"}
{"intent": "HassLightsSet", "text": "set the entity color to red"}
{"intent": "HassClimateSetTemperature", "text": "set temperature to 0 degrees in the area"}
{"intent": "HassClimateGetTemperature", "text": "what is the temperature in the area"}
The --areas
and --names
arguments are the same from python3 -m hassil
, but default to generic "area" and "entity" terms.
Exclude the -n
argument to sample all possible sentences.
Sentence Templates
Uses a custom parser written in Python.
- Alternative words or phrases
(red|green|blue)
turn(s|ed|ing)
- Optional words or phrases
- Permutations of words or phrases
(patience; you must have) my young Padawan
is [the] light (on; in <area>)
- Slot Lists
{list_name}
{list_name:slot_name}
- Refers to a pre-defined list of values in YAML (
lists
), either global or local (particular to the intent to which the sentence refers)
- Expansion Rules
<rule_name>
- Refers to a pre-defined expansion rule in YAML (
expansion_rules
), either global or local (particular to the intent to which the sentence refers)
YAML Format
language: "<language code>"
intents:
<intent name>:
data:
- sentences:
- "<sentence template>"
- "<sentence template>"
slots:
<name>: <value>
requires_context:
<name>:
excludes_context:
<name>: <value or list>
expansion_rules:
<rule_name>: <sentence template>
lists:
<list name>:
values:
- "items"
- "in list"
metadata:
<key>: <value>
lists:
<list name>:
values:
- "items"
- "in list"
- in: "text in"
out: <value for slot>
context:
<name>: <value>
metadata:
<key>: <value>
<range_name>
range:
type: "number"
from: 0
to: 100
multiplier: 1.0
<wildcard_name>
wildcard: true
expansion_rules:
<rule_name>: "<sentence template>"
skip_words:
- "<word>"