This repository contains training data for Home Assistant's local voice control.
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
nl
- Dutch (language leader position open)en
- English (language leader position open)fr
- French (language leader position open)de
- German (language leader position open)nb
- Norwegian Bokmål (language leader position open)sv
- Swedish (language leader position open)
Each language is maintained by one or more language leaders. Language leaders are responsible for reviewing the contributions in their language and making sure that they are grammatically correct.
Anyone can apply to become one. If you want to apply to be a language leader, join us in #devs_voice
on Discord or open an issue.
Anyone can contribute to the repository. The sentences will be reviewed by the language leaders and merged if they are correct. You can either contribute new sentences or improve existing ones.
If you only want to contribute sentences that should be supported, but don't feel comfortable with YAML, you can add them to the issue of your language. Limit your submissions to commands that work with the supported intents.
See intents.yaml for the Home Assistant intent schemas that are supported.
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 enviornment 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 the data is correctly formatted.
python3 -m script.intentfest validate
Run the tests. Leave --language
off to run all tests.
pytest tests --language nl
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 "}
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>
<language>
should be something like en
or pl
according to ISO 639.
Before you start on a new language, confirm that no one else is already working on one.