This repository contains training data for Home Assistant's local voice control.
- Progress per language x intent
- How to contribute
- Language leaders
- Supported intents
- Supported languages
Repository layout:
sentences/<language>
- YAML files for
<language>
with the name<domain>_<intent>.yaml
- File format
- YAML files for
responses/<language>
- YAML files for
<language>
with responses for intents - File format
- YAML files for
tests/<language>
- YAML files for
<language>
with test sentences and corresponding intents - File format
- YAML files for
See the documentation for more information.
Home Assistant will automatically generate the following lists during recognition:
{name}
- List of device or entity names
{area}
- List of area names
Checkout the repository and get a development environment with script/setup
. This will create a new virtual environment in the venv
directory of the repository, and install all necessary requirements.
Before developing, always activate your virtual environment with source venv/bin/activate
.
Validate that the data is correctly formatted:
python3 -m script.intentfest validate --language nl
Run the tests. This will parse the sentences and verifies them with the test sentences.
pytest tests --language nl -k fan_HassTurnOn
Leave off --language
to test all languages. Leave off -k
to test all files.
You can try parsing sentences for a specific language with:
python3 -m script.intentfest parse --language en --sentence 'turn on the lights in the kitchen'
This will print a line of JSON for each --sentence
:
{
"text": "turn on the lights in the kitchen",
"match": true,
"intent": "HassTurnOn",
"slots": {
"area": "kitchen",
"domain": "light"
}
}
You can sample the possible sentences for a specific language with:
python3 -m script.intentfest sample --language en -n 1
This will print a line of JSON for each possible sentence:
python3 -m script.intentfest sample --language en -n 1
{"intent": "HassTurnOff", "text": "turn off all the fan in the kitchen"}
{"intent": "HassTurnOn", "text": "turn on the light in the kitchen"}
{"intent": "HassCloseCover", "text": "close the bedroom lamp"}
{"intent": "HassClimateSetTemperature", "text": "set the temp to 0 degrees celsius"}
{"intent": "HassLightSet", "text": "set the bedroom lamp brightness to 0 percent"}
{"intent": "HassOpenCover", "text": "open the bedroom lamp"}
{"intent": "HassClimateGetTemperature", "text": "what's the temp "}
You can filter for specific intents by adding --intents HassTurnOn HassTurnOff
.
Leave off -n
to generate all possible sentences.
To quickly test a sentence template, use:
python3 -m script.intentfest sample_template <template>
For example:
python3 -m script.intentfest sample_template 'open [the] door'
open the door
open door
You can add lists, ranges, and expansion rules as well:
python3 -m script.intentfest sample_template 'set color to <color> and brightness to {brightness}' --values color red green --range brightness 1 2 --rule color '[the] {color}'
python3 -m script.intentfest add_language <language code> <language name>
<language code>
should be something like en
or pl
according to ISO 639.
Language name should be the name of the language in its own language.