Slot syntax with rules

is this valid syntax ??
Was asking myself if I can mix rules with alternatives, possible word and such but didn’t find anything regarding this in doc.

time = ( minuit | <hour> ) [ <minute> ]

Also, is there a solution for at least duration in actual docker version ? Seems we have to wait for .25 version but even not sure ?

Really miss date time duration number and age to finish converting all my snips intents/slots :grin:

1 Like

For optional alternatives and rules you can do:
time = [ ( Minuit | midi ) à ] < hour> [ < minute> ]

For more info on JSGF grammar, take a look at the reference here:

Hope this helps :blush:


I put your file in an intent file, with at the end:

allume (dans | de la | du) (le | la) ($house_room){house_room} [pendant | durant] (<number> <duration>){duration}

And it works !
I got the right intent, with slot duration and house_room !!

Now, duration slot returned is “dix minutes”, we would need to get duration slot in intent always in same unit and as a number. Here it should be just “10”, if we ask two hours, it should be “120”, etc. Or in second to be more precise, and only later in handling the intent we do the conversion we need. But duration must be a float or int.

I guess rhasspy should intercept duration slot and convert all years, months, weeks etc to a number.

Anyway, can’t get these rules to work when separated in another file.


# Number
two_to_nine = ( deux | trois | quatre | cinq | six | sept | huit | neuf )

then in an intent:

allume (dans | de la | du) (le | la) ($house_room){house_room} [pendant | durant] (<mathSlots.number> <mathSlots.duration>){duration}

got error line 135, in walk_expression for item in replacements[key]: KeyError: ‘<number>’

You cannot put rules in slot files (yet). Only in intent files for now.

That’s my conclusion yes :laughing:
You say for now, so it will possible ? :upside_down_face:

According to @synesthesiam, it seems to be on the road map for the next major release 0.25.

Thanks, would be awesome !