Template Syntax

August 14, 2025 ยท View on GitHub

hassil's template syntax compactly represents large numbers of sentences for the purpose of intent recognition. It borrows inspiration from Rhasspy's template language, which itself borrows from JSGF.

Reserved Characters

The following characters are reserved for special syntax: ()[]{}<>|@ These characters can be escaped with a backslash: \

Everything else (except whitespace) is matched literally, so it is not advised to have punctuation in your sentence templates.

Optionals

Template block that may be omitted, surrounded by [] Example: [the]

An optional [x] is equivalent to the alternative (x|)

Alternatives

Example: (red|green|blue)

Template blocks separated by | and surrounded by () or [] Blocks surrounded by () are required while [] is optional.

Permutations

Example: (TV; pause)

Template blocks separated by ; and surrounded by () All possible orderings of the blocks are considered.

Lists

Example: {list_name}

Reference to a pre-defined list. The matched list value will be copied to an entity with the same name as the list.

Slot Name

Example: {list_name:slot_name}

Copies the matched list value to a differently named slot.

Captures

Example: {list_name:@capture_name}

Copies the matched list text to a "capture", which is intended for use in the response (not a slot).

Example {@list_name}

Compact syntax equivalent to {list_name:@list_name}

Expansion Rules

Example: <rule_name>

Reference to a named template block that is substituted in place of the reference. Rules cannot reference themselves.