Version 2.4.16 Released

Some important changes in this version of Rhasspy on the way to 2.5:

  • Numbers and number ranges are now supported:
    • Putting 75 in your sentences.ini file will produce the integer (not string) 75 in your JSON event
    • Putting 1..100 will generate “one” to “one hundred” for your language, and put integers in the JSON
  • Built-in and custom converters can be used to convert named entity values to something besides strings in your JSON events.
  • Slot programs were added, allowing you to generate slot values during training with a custom program. The $rhasspy/number program does this for number ranges (0..100).
  • $rhasspy/days and $rhasspy/months slots are available now for every language (days of the week, months of the year)
  • Lots of bug fixes and great community contributions!

This is the first step to having built-in entities available in Rhasspy. In the future, Kaldi-based profiles will be able to deal with them natively. Other speech systems, like Pocketsphinx or DeepSpeech (someday) will fall back to these new methods.

Also, a big thank you to all of the community members who have stepped up to provide technical support, bug fixes/code clean-up, and documentation/tutorials! :clap:

9 Likes

Fantastic work !

Seems there is some problems actually (reported issues) with numbers, but no problem about this, just need to sort it out. This is a really big first step for builtins slots, a feature that will put rhasspy to an amazing assistant !

Thanks @synesthesiam for your involvement in this project, you are putting Rhasspy on the road of success :+1:

1 Like

@synesthesiam just updated docker container !

My rhasspy batcher now report:

[ MATCHED] TimeTurnOnJeedom | query: allume dans la cuisine pendant douze minutes | confidence:1.0 | Slots: | duration_mins : 12 | house_room : cuisine
[ MATCHED] TimeTurnOnJeedom | query: allume la cuisine pendant trente minutes | confidence:1.0 | Slots: | duration_mins : 30 | house_room : cuisine
[ MATCHED] TimeTurnOnJeedom | query: allume le champi d’axel pendant dix minutes | confidence:1.0 | Slots: | device_name : champi_Axel | duration_mins : 10
[ MATCHED] TimeTurnOffJeedom | query: éteins dans la cuisine pendant douze minutes | confidence:1.0 | Slots: | duration_mins : 12 | house_room : cuisine
[ MATCHED] TimeTurnOffJeedom | query: laisse le globe d’axel éteint pendant vingt minutes | confidence:1.0 | Slots: | device_name : globe_Axel | duration_mins : 20
[ MATCHED] TimeTurnOffJeedom | query: laisse la cuisine éteinte pendant 25 minutes | confidence:1.0 | Slots: | duration_mins : 25 | house_room : cuisine

matched: 6 | unmatched: 0 | total: 6

images

4 Likes

I need to ask again regarding an update.
I used:

docker pull synesthesiam/rhasspy-server:latest

and he downloaded the package. But even after “Restart” and restart of the Pi the version 2.4.15 is shown in the upper left corner.
a

Is there somehting else to do after “docker pull”?

Because I tried it again and everthing seems OK.

> pi@raspberrypi:~ $ docker pull synesthesiam/rhasspy-server:latest
> latest: Pulling from synesthesiam/rhasspy-server
> Digest: sha256:10203bf79af063a0d65ea09a3aaa3fb6afa38e02879bd1dc10ab15b4b888ec90
> Status: Image is up to date for synesthesiam/rhasspy-server:latest
> docker.io/synesthesiam/rhasspy-server:latest
> pi@raspberrypi:~ $

THX

You need to remove the previous container with
docker rm <container-name>

Then do
docker run ...

Doing docker pull only update the image and not containers based on this image. You need to stop and remove the old containers and start a new one using the updated image.

Hope this helps.

1 Like

Lol, love the image :slight_smile:

1 Like

mhhhh … seems I am too stupid …

Did these steps now:

pi@raspberrypi:~ $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
12bd3fe8b7b8 a0690039c98c “/run.sh --user-prof…” 3 days ago Up 39 minutes 0.0.0.0:12101->12101/tcp lucid_swanson

pi@raspberrypi:~ $ docker stop 12bd3fe8b7b8

pi@raspberrypi:~ $ docker rm 12bd3fe8b7b8

pi@raspberrypi:~ $ docker pull synesthesiam/rhasspy-server:latest

pi@raspberrypi:~ $ docker run -d -p 12101:12101
–restart unless-stopped
-v “$HOME/.config/rhasspy/profiles:/profiles”
–device /dev/snd:/dev/snd
synesthesiam/rhasspy-server:latest
–user-profiles /profiles
–profile de

Restart of Pi and webgui.

But still without success.

Can you give me a hint what is missing or what is going wrong?

THX

Try clearing your browser cache?

1 Like

grrrrrr …

That was the missing piece of the puzzle!

THX!!

2 Likes

Just finished updating my two client/satellite nodes, and the server/host node, too. Piece o’ cake. Thanks!!

2 Likes

Fantastic!
Thanks to developers for their work!

1 Like

@Synesthesiam
Many thanks for the impressive development of Rhasspy. :+1: I hope you get enough sleep. :thinking: 2.4.15 works very stable for me and the slight audio crackling at the end of a TTS message was finally gone. I didn’t report it because I thought it was a bug of my DIY audio system. Rhasspy sounds perfect now. Update to 2.4.16 is running next I will test it extensively. The new functions are great and fit very well. Thanks to you and the whole community!

1 Like

Impossible with two little ones…:boy::girl:

5 Likes

En french, the femin of ‘one’ is ‘une’ not ‘un’
if ‘une’ $rhasspy/number return “une” not 1
example: ‘activer le sablier pour une minute’

no?

What intent recognizer do you use?
I had the same with fuzzywuzzy for English, but with OpenFST it works well

i use OpenFST on this device

Don’t know if it’s related to the 2.4.16 release but when I try to use ‘PocketSphinx’ as wake word service even after re-training and restarting rhasspy I get this error in the logs and PocketSphinx is not working:

[ERROR:850182] quart.serving: Error in ASGI Framework
Traceback (most recent call last):
File “/usr/local/lib/python3.6/dist-packages/hypercorn/asgi/wsproto.py”, line 91, in handle_asgi_app
await asgi_instance(self.asgi_receive, self.asgi_send)
File “/usr/local/lib/python3.6/dist-packages/quart/asgi.py”, line 106, in call
await _cancel_tasks(pending)
File “/usr/local/lib/python3.6/dist-packages/quart/asgi.py”, line 189, in _cancel_tasks
raise task.exception()
File “/usr/local/lib/python3.6/dist-packages/quart/asgi.py”, line 157, in handle_websocket
‘code’: 1000,
File “/usr/local/lib/python3.6/dist-packages/hypercorn/asgi/wsproto.py”, line 149, in asgi_send
await self.asend(CloseConnection(code=int(message[“code”])))
File “/usr/local/lib/python3.6/dist-packages/hypercorn/asyncio/wsproto.py”, line 93, in asend
self.write(self.connection.send(event))
File “/usr/local/lib/python3.6/dist-packages/wsproto/init.py”, line 64, in send
data += self.connection.send(event)
File “/usr/local/lib/python3.6/dist-packages/wsproto/connection.py”, line 101, in send
“Connection cannot be closed in state %s” % self.state
wsproto.utilities.LocalProtocolError: Connection cannot be closed in state ConnectionState.CLOSED

Might have to point out that I’m running on docker on a Rpi 3B.

Any suggestions on how to fix or do I need to somehow install manually something in the docker image, if so how (docker exec…? maybe)

Hmm… just to double-check :nerd_face: are you sure all snips services is stopped?
Try to do this with
sam service stop

Also do you have porcupine/snowboy working?

You’re correct! This is an open issue with the num2words library that Rhasspy uses. If you have some coding skill, consider modifying the French module to include gender :slight_smile:

Unfortunately, I’m not sure even having an option to specify gender would help. If you have something like 1..10 some_word in your sentences.ini file, the words for 1..10 are generated independently of the surrounding words (i.e. context free). This is going to be a problem for many languages, and I’m not sure what a good general solution would be.

Any thoughts?

You can safely ignore this error. I’m trying to find a way to silence it without blocking actual error messages. This is just your web browser disconnecting from the websocket connection used to stream logging information to Rhasspy’s web UI. These disconnects happen all the time, and there’s no need for them (in my opinion) to bubble up as errors.