Metadata-Version: 2.1
Name: hassil
Version: 0.2.3
Summary: The Home Assistant Intent Language parser
Home-page: http://github.com/home-assistant/hassil
Author: Michael Hansen
Author-email: mike@rhasspy.org
License: Apache-2.0
Description: # HassIL
        
        The Home Assistant Intent Language (HassIL) parser for [intents](https://github.com/home-assistant/intents).
        
        
        ## Dependencies
        
        * antlr4-python3-runtime
        * PyYAML
        * dataclasses-json
        
        
        ## Installation
        
        Run the `script/setup` script to automatically create a virtual environment and install the requirements.
        
        
        # Running
        
        ``` sh
        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:
        
        ``` sh
        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`.
        
        ``` sh
        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:
        
        ``` sh
        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
        
        Parsed using a custom [ANTLR](https://www.antlr.org) grammar (see [`HassILGrammar.g4`](HassILGrammar.g4)).
        
        * Alternative words or phrases
          * `(red | green | blue)`
          * `turn(s | ed | ing)`
        * Optional words or phrases
          * `[the]`
          * `[this | that]`
          * `light[s]`
        * Slot Lists
          * `{list_name}`
          * `{list_name:slot_name}`
          * Refers to a pre-defined list of values in YAML (`lists`)
        * Expansion Rules
          * `<rule_name>`
          * Refers to a pre-defined expansion rule in YAML (`expansion_rules`)
        
        
        ## YAML Format
        
        ``` yaml
        language: "<language code>"
        intents:
          <intent name>:
            data:
              # List of sentences/slots/etc.
              - sentences:
                  - "<sentence template>"
                  - "<sentence template>"
                # Optional
                slots:
                  # Fixed slots for the recognized intent
                  <name>: <value>
                requires_context:
                  # Must be present in match context
                  <name>: <value or list>
                excludes_context:
                  # Must NOT be present in match context
                  <name>: <value or list>
        
        # Optional lists of items that become alternatives in sentence templates
        lists:
          # Referenced as {list_name} or {list_name:slot_name}
          <list name>:
            values:
              - "items"
              - "in list"
              - in: "text in"
                out: <value for slot>
                # Optional
                context:
                  <name>: <value>
          <range_name>
            range:
              type: "number"
              from: 0
              to: 100  # inclusive
        
        # Optional rules that are expanded in sentence templates
        expansion_rules:
          # Referenced as <rule_name>
          <rule_name>: "<sentence template>"
        
        # Optional words that the intent recognizer can skip during recognition
        skip_words:
          - "<word>"
        ```
        
Keywords: home assistant intent recognition
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: Text Processing :: Linguistic
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Description-Content-Type: text/markdown
