smiletolerantly

joined 2 years ago

Sorry, I don't quite follow ๐Ÿ˜…

What's the problematic response?

[โ€“] smiletolerantly@awful.systems 2 points 7 hours ago (1 children)

Yay, that's fantastic to hear!

Also, how's your experience been with the PE? Getting a readymade device in a nice shell is appealing for sure ๐Ÿ˜…

[โ€“] smiletolerantly@awful.systems 3 points 8 hours ago (3 children)

Oh, in the demo gif, that's via a shortcut (holding power for half a second). Sorry, can't help with wakeword there ๐Ÿ˜…

[โ€“] smiletolerantly@awful.systems 2 points 9 hours ago (2 children)

Finally got this through another comment below. No, this should not be able to happen, unless you yourself have created a custom intent + shell script action in home assistant that runs this. The integration itself does not execute actions/scripts or the like, it just finds the closest string in a list of strings, and then hands that to the official conversation agent/Hassil.

[โ€“] smiletolerantly@awful.systems 3 points 9 hours ago* (last edited 9 hours ago)

...do you think I'm a bot, or what is this?

Edit: ohh, that's what the original comment was. Sorry. "lange leitung" today.

[โ€“] smiletolerantly@awful.systems 1 points 9 hours ago (1 children)

Have fun, hope this works out for you! FYI: you can also use an LLM as an additional fallback (first closest-intent, then on failure, LLM). README mentions it further down on Github.

Please do! And if it does drive her crazy, please do open a bug report ๐Ÿ˜„

Yes, should be completely language agnostic. I'm not a linguist though, so take with a grain of salt ๐Ÿ˜…

There's nothing language specific going on though, apart from a slight preference to split slots on word boundaries determined by spaces. So, might work a bit worse in e.g. Japanese.

[โ€“] smiletolerantly@awful.systems 8 points 10 hours ago (2 children)

โŒ Sorry, I couldnโ€™t understand that

Ahhh got it ๐Ÿ˜„ Yeah, I get/got similar stuff with Alexa. Honestly, the STT there is pretty impressive(ly fast), but sometimes it's incredible nonsense.

[โ€“] smiletolerantly@awful.systems 4 points 10 hours ago (2 children)

I mean, you still need to activate the assistant with your usual wakeword. This/Hassil isn't really intended to be constantly listening.

Or am I misunderstanding the question? ๐Ÿ˜…

 

cross-posted from: https://awful.systems/post/8238756

Basically, STT quality has kept me from switching to HomeAssistant's voice assistant features. The default matcher (Hassil) is waaaaaaay to strict, and LLMs are slow, constly, and/or a privacy nightmare, plus I don't like them.

I really thought there would be something available that just matches your STT output to the configured intents, but apparently not, so I've built in myself.

Finally convinced my GF to throw Alexa in the bin :)

Here's an excerpt from the README, and feel free to AMA:

๐ŸŒฒ Problem statement and solution

Speech-To-Text (STT) output, especially fast and local STT output, is often simply bad. HomeAssistant's own Hassil is incredibly picky: your STT output must match exactly to one of the configured intents.

There's two paths forward from this: Upgrade your hardware to support better STT, or try to figure out what the speaker probably meant to say from the garbled output.

This project does the latter.

With this custom integration, "Lights on in live in room" will actually turn on the lights in your living room. So will, for that matter, "lighrts on inn livainriomm".

Short demo, first with closest-intent, then with bare Hassil:

![demo gif(]https://raw.githubusercontent.com/charludo/hass-closest-intent/refs/heads/main/custom_components/closest_intent/brand/demo.gif)

ย 

๐Ÿ“œ Highlights

  • Pattern expansion. Expanding <expansion_rules>, (alternatives|to), and [optional|alternatives] all work, including on HASS-defined lists like your home's areas and entities!
  • Slot extraction. Both for wildcard slots (like for adding something to the shopping list, where the {item} is a wildcard), and against slots like {timer_hours:hours} with a fixed set of possibilities.
  • Fuzzy slot resolution. For list-like slots and expansion rules (including your areas and entities!), fuzzy match the slot values to the available options. Allows "livikroom" to be corrected to "living room".
  • Actual intent handling still done by Hassil. closest-intent simply corrects your STT output or typos to the closest matching intent, and then forwards a nice, canonical sentence to Hassil, who then deals with the intent just like if you had spoken/typed perfectly.
  • 100% LLM-free. Just uses relatively simple fuzzy matching of the input against your intents, plus some clever-ish (well... working, at least) tricks to improve the results.
  • Fallback agent support. OK, I said 100% LLM-free, but if you absolutely want to, you can use one as fallback. More on this below.
  • Is fast :) (as in: basically instant for a couple hundred configured custom intents).

Note: closest-intent is completely language-agnostic. All the examples in this README are in English, but you can use it with any language you like; personally, I use it in German.

ย 

๐Ÿ“‹ Examples

Here's some examples of things I said, what my STT (wyoming-faster-whisper-base) understood, what HomeAssistant was able to do/answer after passing the STT output through closest-intent, and what the same STT output would have resulted in with just bare Hassil.

Note: These are actual results I got when speaking the "what was said" sentences in my phone. I'm a native German speaker, and so I do have an accent, but this pretty closely matches my experience when using the German-language version of whisper. The "bare Hassil" responses are what I got after 1:1 pasting the STT output into the voice assist chat window with closest-intent disabled.

| what was said | STT output | with Closest Intent | bare Hassil | |


|


|


|


|

| start cleaning | Star cleaning. | โœ… Cleaning started. | โŒ Sorry, I couldn't understand that | | stop cleaning | Stop clenching! | โœ… Cleaning stopped. | โŒ Sorry, I am not aware of any device called clenching | | vacuum the living room | Vacuum Believing Room | โœ… Cleaning the living room. | โŒ Sorry, I am unaware of any floor called Believing Room | | clean the office | King the Office | โœ… Cleaning the office. | โŒ Sorry, there are multiple devices called Office (author's note: no there aren't, wtf?) | | vacuum the kitchen | Back here in the kitchen. | โœ… Cleaning the kitchen. | โŒ Sorry, I couldn't understand that | | how warm is it in the bedroom | Our all is in the best room. | โœ… In the bedroom, the temperature is currently.... | โŒ Sorry, I am not aware of any area called best room | | add milk to the shopping list | Add milk to the chauvinist. | โœ… "milk" added. | โŒ Sorry, I am not aware of any device called chauvinist | | put call dentist on my todo list | put call dentist on my tudu list | โœ… "call dentist" added. | โŒ Sorry, I am not aware of any device called tudu | | turn on the water pump | turn on the what her pump | โœ… Turned on the water pump. | โŒ Sorry, I am not aware of any device called what her pump | | play some music | Place on music | โœ… Playing music. | โŒ Sorry, I am not aware of any area called music | | resume the music | Renew Music | โœ… Resuming. | โŒ Sorry, I couldn't understand that | | pause the music | Post music | โœ… Paused. | โŒ Sorry, I couldn't understand that | | next track | next rack | โœ… Next track. | โŒ Sorry, I am not aware of any device called rack | | enable shuffle | an able shuffling | โœ… Shuffle enabled. | โŒ Sorry, I couldn't understand that | | disable shuffle | Disable to schaffen. | โœ… Shuffle disabled. | โŒ Sorry, I am not aware of any device called Disable | | restart the player | Reset the plan. | โœ… Restarting the player. | โŒ Sorry, I am not aware of any area called Reset | | play a random album | Player random album | โœ… Playing a random album. | โŒ Sorry, I couldn't understand that | | play a random artist | Player and Immartist. | โœ… Playing a random artist. | โŒ Sorry, I couldn't understand that | | play the latest tracks | Plan the ladder tracks. | โœ… Playing recently added tracks. | โŒ Sorry, I am not aware of any area called Plan | | play recently played songs | Player recently played so... | โœ… Playing recently heard tracks. | โŒ Sorry, I couldn't understand that | | play playlist NieR | Play playlist NEAR! | โœ… Playing the playlist NieR. | โŒ Sorry, I couldn't understand that | | play my daily briefing | and play my daily breathing | โœ… Here is your daily briefing: ... | โŒ Sorry, I am not aware of any area called and play | | what time is it | What the hell is it? | โœ… It is 16:36. | โœ… It is 16:36. (author's note: okay, know what? earned. did not expect that.) | | what day is it today | One day is today. | โœ… Today is Friday. | โœ…/โŒ May 8th, 2026 (author's note: that's the output for "What date is it?", but, eh, close enough) | | make the tv brighter | Make that CV brighter. | โœ… Screen is now bright. | โŒ Sorry, I couldn't understand that | | set the screen darker | The screen doctor. | โœ… Screen is now dark. | โŒ Sorry, I am not aware of any device called screen doctor | | what's the weather today | What's the matter with you? | โœ… Today, the weather is... | โŒ It is 16:36. (author's note: wait, WHAT?) | | how's the weather tomorrow morning | How's the better tomorrow? | โœ… Tomorrow morning, it will be... | โŒ Sorry, I am not aware of any area called How's | | what's the weather this week | What's the matter this weak | โœ… Monday:..., Tuesday:..., | โŒ It is 16:36. (author's note: sigh...) | | how's the weather at 5 o'clock | cast the red there at 5 o'clock | โœ… At 5 o'clock, it will be... | โŒ Sorry, I am not aware of any area called cast | | how windy is it right now | how windy is IR low | โœ… The wind is currently blowing with... | โŒ No timers. | | how windy will it be tonight | How will you be tonight? | โœ… Tonight, the wind speed will be around... | โŒ Sorry, I couldn't understand that | | how hot will it get today | How hard will it get today? | โœ… Today, temperatures will reach up to... | โŒ Sorry, I couldn't understand that | | will it rain today | with it right today | โœ… No rain is expected today. | โŒ Sorry, I couldn't understand that |

...you get the idea.

ย 

๐Ÿ’ก How it works

closest-intent is registered in HomeAssistant as a conversation agent. On startup, it parses (by default) all user-defined intents (or optionally, also the builtins ones). In this process, it also expands all rules, like <expansion_rule>, (alternatives|to), and [optionals], and notes where {slots} are located, and whether they are wildcards or belong to some list (like areas, entities, or the numbers 1-100).

When a user request comes in (via voice command or the chat box), closest-intent fuzzy-matches that request against those expanded rules. If the rule does not contain a slot, it is picked immediately. If it does contain a slot, closest-intent performs a sequence of fancy magic steps to find the best-fitting slot value among a range of possible positions within the top-scoring matched sentences. In practice, this often means "smallest slot-value on a word-boundary", but the extraction is not limited to that.

With the best match found, we then reconstruct the "canonical form", i.e. a sentence that Hassil will actually understand. If in your configured intents, "Play some music." exists, and closest-intent got "Place on music" and matched that to the intent, it will simply forward "Play some music." to Hassil. If the intent contained a slot, the extracted value will be substituted.

This guarantees that the sentence passed to Hassil will actually be understood, and allows us to not have to worry at all about performing actions, running scripts,...

If no matching intent could be found, we pass the exact input we got to the configured fallback agent. By default, that is simply Hassil (which again allows us to be lazy and not worry about proper error responses), or another agent, like a LLM.

 

Basically, STT quality has kept me from switching to HomeAssistant's voice assistant features. The default matcher (Hassil) is waaaaaaay to strict, and LLMs are slow, constly, and/or a privacy nightmare, plus I don't like them.

I really thought there would be something available that just matches your STT output to the configured intents, but apparently not, so I've built in myself.

Finally convinced my GF to throw Alexa in the bin :)

Here's an excerpt from the README, and feel free to AMA:

๐ŸŒฒ Problem statement and solution

Speech-To-Text (STT) output, especially fast and local STT output, is often simply bad. HomeAssistant's own Hassil is incredibly picky: your STT output must match exactly to one of the configured intents.

There's two paths forward from this: Upgrade your hardware to support better STT, or try to figure out what the speaker probably meant to say from the garbled output.

This project does the latter.

With this custom integration, "Lights on in live in room" will actually turn on the lights in your living room. So will, for that matter, "lighrts on inn livainriomm".

Short demo, first with closest-intent, then with bare Hassil:

demo gif

ย 

๐Ÿ“œ Highlights

  • Pattern expansion. Expanding <expansion_rules>, (alternatives|to), and [optional|alternatives] all work, including on HASS-defined lists like your home's areas and entities!
  • Slot extraction. Both for wildcard slots (like for adding something to the shopping list, where the {item} is a wildcard), and against slots like {timer_hours:hours} with a fixed set of possibilities.
  • Fuzzy slot resolution. For list-like slots and expansion rules (including your areas and entities!), fuzzy match the slot values to the available options. Allows "livikroom" to be corrected to "living room".
  • Actual intent handling still done by Hassil. closest-intent simply corrects your STT output or typos to the closest matching intent, and then forwards a nice, canonical sentence to Hassil, who then deals with the intent just like if you had spoken/typed perfectly.
  • 100% LLM-free. Just uses relatively simple fuzzy matching of the input against your intents, plus some clever-ish (well... working, at least) tricks to improve the results.
  • Fallback agent support. OK, I said 100% LLM-free, but if you absolutely want to, you can use one as fallback. More on this below.
  • Is fast :) (as in: basically instant for a couple hundred configured custom intents).

Note: closest-intent is completely language-agnostic. All the examples in this README are in English, but you can use it with any language you like; personally, I use it in German.

ย 

๐Ÿ“‹ Examples

Here's some examples of things I said, what my STT (wyoming-faster-whisper-base) understood, what HomeAssistant was able to do/answer after passing the STT output through closest-intent, and what the same STT output would have resulted in with just bare Hassil.

Note: These are actual results I got when speaking the "what was said" sentences in my phone. I'm a native German speaker, and so I do have an accent, but this pretty closely matches my experience when using the German-language version of whisper. The "bare Hassil" responses are what I got after 1:1 pasting the STT output into the voice assist chat window with closest-intent disabled.

| what was said | STT output | with Closest Intent | bare Hassil | |


|


|


|


| | start cleaning | Star cleaning. | โœ… Cleaning started. | โŒ Sorry, I couldn't understand that | | stop cleaning | Stop clenching! | โœ… Cleaning stopped. | โŒ Sorry, I am not aware of any device called clenching | | vacuum the living room | Vacuum Believing Room | โœ… Cleaning the living room. | โŒ Sorry, I am unaware of any floor called Believing Room | | clean the office | King the Office | โœ… Cleaning the office. | โŒ Sorry, there are multiple devices called Office (author's note: no there aren't, wtf?) | | vacuum the kitchen | Back here in the kitchen. | โœ… Cleaning the kitchen. | โŒ Sorry, I couldn't understand that | | how warm is it in the bedroom | Our all is in the best room. | โœ… In the bedroom, the temperature is currently.... | โŒ Sorry, I am not aware of any area called best room | | add milk to the shopping list | Add milk to the chauvinist. | โœ… "milk" added. | โŒ Sorry, I am not aware of any device called chauvinist | | put call dentist on my todo list | put call dentist on my tudu list | โœ… "call dentist" added. | โŒ Sorry, I am not aware of any device called tudu | | turn on the water pump | turn on the what her pump | โœ… Turned on the water pump. | โŒ Sorry, I am not aware of any device called what her pump | | play some music | Place on music | โœ… Playing music. | โŒ Sorry, I am not aware of any area called music | | resume the music | Renew Music | โœ… Resuming. | โŒ Sorry, I couldn't understand that | | pause the music | Post music | โœ… Paused. | โŒ Sorry, I couldn't understand that | | next track | next rack | โœ… Next track. | โŒ Sorry, I am not aware of any device called rack | | enable shuffle | an able shuffling | โœ… Shuffle enabled. | โŒ Sorry, I couldn't understand that | | disable shuffle | Disable to schaffen. | โœ… Shuffle disabled. | โŒ Sorry, I am not aware of any device called Disable | | restart the player | Reset the plan. | โœ… Restarting the player. | โŒ Sorry, I am not aware of any area called Reset | | play a random album | Player random album | โœ… Playing a random album. | โŒ Sorry, I couldn't understand that | | play a random artist | Player and Immartist. | โœ… Playing a random artist. | โŒ Sorry, I couldn't understand that | | play the latest tracks | Plan the ladder tracks. | โœ… Playing recently added tracks. | โŒ Sorry, I am not aware of any area called Plan | | play recently played songs | Player recently played so... | โœ… Playing recently heard tracks. | โŒ Sorry, I couldn't understand that | | play playlist NieR | Play playlist NEAR! | โœ… Playing the playlist NieR. | โŒ Sorry, I couldn't understand that | | play my daily briefing | and play my daily breathing | โœ… Here is your daily briefing: ... | โŒ Sorry, I am not aware of any area called and play | | what time is it | What the hell is it? | โœ… It is 16:36. | โœ… It is 16:36. (author's note: okay, know what? earned. did not expect that.) | | what day is it today | One day is today. | โœ… Today is Friday. | โœ…/โŒ May 8th, 2026 (author's note: that's the output for "What date is it?", but, eh, close enough) | | make the tv brighter | Make that CV brighter. | โœ… Screen is now bright. | โŒ Sorry, I couldn't understand that | | set the screen darker | The screen doctor. | โœ… Screen is now dark. | โŒ Sorry, I am not aware of any device called screen doctor | | what's the weather today | What's the matter with you? | โœ… Today, the weather is... | โŒ It is 16:36. (author's note: wait, WHAT?) | | how's the weather tomorrow morning | How's the better tomorrow? | โœ… Tomorrow morning, it will be... | โŒ Sorry, I am not aware of any area called How's | | what's the weather this week | What's the matter this weak | โœ… Monday:..., Tuesday:..., | โŒ It is 16:36. (author's note: sigh...) | | how's the weather at 5 o'clock | cast the red there at 5 o'clock | โœ… At 5 o'clock, it will be... | โŒ Sorry, I am not aware of any area called cast | | how windy is it right now | how windy is IR low | โœ… The wind is currently blowing with... | โŒ No timers. | | how windy will it be tonight | How will you be tonight? | โœ… Tonight, the wind speed will be around... | โŒ Sorry, I couldn't understand that | | how hot will it get today | How hard will it get today? | โœ… Today, temperatures will reach up to... | โŒ Sorry, I couldn't understand that | | will it rain today | with it right today | โœ… No rain is expected today. | โŒ Sorry, I couldn't understand that |

...you get the idea.

ย 

๐Ÿ’ก How it works

closest-intent is registered in HomeAssistant as a conversation agent. On startup, it parses (by default) all user-defined intents (or optionally, also the builtins ones). In this process, it also expands all rules, like <expansion_rule>, (alternatives|to), and [optionals], and notes where {slots} are located, and whether they are wildcards or belong to some list (like areas, entities, or the numbers 1-100).

When a user request comes in (via voice command or the chat box), closest-intent fuzzy-matches that request against those expanded rules. If the rule does not contain a slot, it is picked immediately. If it does contain a slot, closest-intent performs a sequence of fancy magic steps to find the best-fitting slot value among a range of possible positions within the top-scoring matched sentences. In practice, this often means "smallest slot-value on a word-boundary", but the extraction is not limited to that.

With the best match found, we then reconstruct the "canonical form", i.e. a sentence that Hassil will actually understand. If in your configured intents, "Play some music." exists, and closest-intent got "Place on music" and matched that to the intent, it will simply forward "Play some music." to Hassil. If the intent contained a slot, the extracted value will be substituted.

This guarantees that the sentence passed to Hassil will actually be understood, and allows us to not have to worry at all about performing actions, running scripts,...

If no matching intent could be found, we pass the exact input we got to the configured fallback agent. By default, that is simply Hassil (which again allows us to be lazy and not worry about proper error responses), or another agent, like a LLM.

 

cross-posted from: https://awful.systems/post/8068330

This is a 50sqm balcony/terrace on the 2nd (3rd American) floor of a rental apartment building. I immediately knew we had to take the apartment, because having a balcony garden was my number 1 wish. In that sense, we definitely got super lucky.

This is year 4 of the garden, and it feels like we've reached "routine" with it. In the first year, we lugged about 2.5 cubic meters of soil up there to fill all the pots. From June-October, this space is enough to fill 100% of our (two people) vegetable needs.

Unsurprisingly, this is way too much to water by hand every day, not to mention when we're not home for some days/weeks. The balcony is also south-facing, and it gets hot in the summer (seriously, I have burnt my feet on the stones before).

Unfortunately, there's also no water outlet on the terrace itself, and the landlord said "no" to putting one there (which was expected, the way the house/apartment is built is not really suitable for that).

Our solution has been to put two 300l rain tanks on the balcony (atop of load bearing walls). They get filled by a hose from the kitchen tap whenever required. The barrels are connected by a second hose. In the one in the greenhouse, a rain barrel pump sucks water out, into a watering computer and optionally to a hose for manual watering.

From the watering computer, two watering circuits start; originally the plan was to distinguish between plants that constantly needed a bit of water, and ones that preferred a lot of water occasionally (e.g. the citrus plants); in practice, it turned out to be easier to just always water everything a bit. Oh well.

The watering computer itself it pretty dumb / not connected to an app or the like; it just opens the valves every 8 hours for (in the summer) 3 minutes each time. That's mostly OK. On super hot days, I sometimes start a fourth round of watering in the early afternoon.

The pump is however plugged into a Zigbee-enabled smart socket, which is controlled by an automation via HomeAssistant (so, all-locally, thankfully). The main purpose of this is an automation that disables the pump when there has been a lot of rain in the past 24hrs, or a moderate amount of rain in the past 8 hours. Not that important when we are home, but usually extends the number of days we can be away from home by 2-3 days for a full filling of the tanks.

Finally, here's some pictures and a video from the past couple of years. I think this year is the first year where no new pots were added, and we needed to buy hardly any new soil (the compost bin has really been worth it in that regard, as well!)

Happy to answer any questions!!

 

This is a 50sqm balcony/terrace on the 2nd (3rd American) floor of a rental apartment building. I immediately knew we had to take the apartment, because having a balcony garden was my number 1 wish. In that sense, we definitely got super lucky.

This is year 4 of the garden, and it feels like we've reached "routine" with it. In the first year, we lugged about 2.5 cubic meters of soil up there to fill all the pots. From June-October, this space is enough to fill 100% of our (two people) vegetable needs.

Unsurprisingly, this is way too much to water by hand every day, not to mention when we're not home for some days/weeks. The balcony is also south-facing, and it gets hot in the summer (seriously, I have burnt my feet on the stones before).

Unfortunately, there's also no water outlet on the terrace itself, and the landlord said "no" to putting one there (which was expected, the way the house/apartment is built is not really suitable for that).

Our solution has been to put two 300l rain tanks on the balcony (atop of load bearing walls). They get filled by a hose from the kitchen tap whenever required. The barrels are connected by a second hose. In the one in the greenhouse, a rain barrel pump sucks water out, into a watering computer and optionally to a hose for manual watering.

From the watering computer, two watering circuits start; originally the plan was to distinguish between plants that constantly needed a bit of water, and ones that preferred a lot of water occasionally (e.g. the citrus plants); in practice, it turned out to be easier to just always water everything a bit. Oh well.

The watering computer itself it pretty dumb / not connected to an app or the like; it just opens the valves every 8 hours for (in the summer) 3 minutes each time. That's mostly OK. On super hot days, I sometimes start a fourth round of watering in the early afternoon.

The pump is however plugged into a Zigbee-enabled smart socket, which is controlled by an automation via HomeAssistant (so, all-locally, thankfully). The main purpose of this is an automation that disables the pump when there has been a lot of rain in the past 24hrs, or a moderate amount of rain in the past 8 hours. Not that important when we are home, but usually extends the number of days we can be away from home by 2-3 days for a full filling of the tanks.

Finally, here's some pictures and a video from the past couple of years. I think this year is the first year where no new pots were added, and we needed to buy hardly any new soil (the compost bin has really been worth it in that regard, as well!)

Happy to answer any questions!!

 

Not an ad, I'm not involved with Bento (or Stirling, for that matter). I've been unhappy with Stirling for a while (why do documents need to be uploaded to the server? That makes it really hard to safely host publicly. Why is it so slow? Plus, too many things are put behind a fucking paywall).

Learned about Bento this morning, tried it out, really liked it, spent an hour today packaging it for nixpkgs. It doesn't quite have feature parity with Stirling yet, but at least for me, everything I need is there, it's fast, and it keeps processing in the browser. Like, not even joking: the output of the build process/nixpkg are just a couple of static HTML files and some WASM. No server-side components at all. Really refreshing to see.

 

A while back I played a round with the HASS Voice Assistant, and pretty easily got to a point where STT and TTS were working really well on my local installation. Also got the hardware to build wyoming satellites with wakeword recognition.

However, what kept me from going through the effort of setting everything up properly (and finally getting fucking Alexa out of my house) was the "all or nothing" approach HASS seemingly has to intent recognition. You either:

  • use the build in Assistant conversation agent, which is a pain in the ass because it matches what your STT recognized 1:1, letter by letter, so it's almost impossible to actually get it to do something unless you spoke perfectly (and forget, for example, about putting something on your ToDo list; Todo, todo, To-Do,... are all not recognized, and have fun getting your STT to reliably generate the ToDo spelling!), or
  • you slap a full-blown LLM behind it, either forcing you to again rely on a shitty company, or host the LLM locally; but even in the latter case and on decent (not H100, of course, but with a GPU at least) hardware, the results were slow and shit, and due to context size limitations, you can just forget about exposing all your entities to the LLM Agent.
  • You also have the option of combining the two approaches; match exactly first, if no intent recognized, forward to LLM; but in practice, that just means that sometimes, you get what you wanted ("all lights off" with a 70% success rate, I'd say), and still a lot of the time you have to wait for ages for a response that may be correct, but often isn't from the LLM.

What I'd like is a third option, doing fuzzy matching on what the STT generated. Indeed, there seems to have been multiple options for that through rhasspy, but that project appears to be dead? The HASS integration has not been updated in over 4 years, and the rhasspy repos are archived as of earlier this month.

Besides, it was not entirely clear to me if you could just use the intent recognition part of the project, forgoing the rest in favor of what HASS already brings to the table.

At this point, I am willing to implement a custom conversation agent, but wanted to make sure first that I haven't simply missed an obvious setting/addon/... for HASS.

My questions are:

  • are you using the HASS Voice Assistant without an LLM?
  • if so, how do you get your intents to be recognized reliably?
  • do you know of any setting/project/addon helping with that?

Cheers! Have a good start into the working week...!

 

If you've been selfhosting conduit or conduwuit, you probabl are aware that the conduwuit project was discontinued a couple months back.

I've been holding out on updating my matrix homeserver until it becomes clear which fork(s) will survive long term.

I feel like I can't put off updating for much longer now, plus the tuwunel nixpkg and -module were merged yesterday, so now the two most promising forks are both options for me.

Still, I'm unsure what route to take. Here's my thoughts:

  • not going through another round of this in a couple of months from now would be great, so stability and long-term maintenance promises would be great
  • I assume incompatibility between the forks, if not now then very soon; this is a "pick an option, then stick with it and pray" situation
  • tuwunel apparently has a full-time paid dev working on it now, which is great; at the same time, that means features will follow the priorities of the (as of now unknown) sponsor of the project
  • it is, however, the officially endorsed successor
  • it also seems like few other people are actively involved, putting in question development practices, reviews, and what happens should the lead dev throw in the towel
  • lastly, while there's been a lot of apparently rapid progress (with releases 1.0.0, 1.1.0, and 1.2.0 at quite a fast pace), the repo itself seems... empty? Few issues, few PRs, commentlessly-deleted issues
  • on the other hand, continuwuity seems more active by commit/contributors count, but is seemingly 100% volunteer work
  • they do seem to backport tuwunel changes and features, which is great!
  • they are not officially endorsed

In short: I fucking hate community drama. What fork did you go with? Is there anything else to consider? I just want an up-to-date matrix homeserver, and not to have to tell my users "sorry, starting from scratch because we picked the wrong fork..."

Update: there's been some back and forth on the nixpkgs PR, esp. one user who posted a lot of receipts here:

@scvalex @queeek180 @Askhalion you wanted links, here's some links :)

claim legitimacy over or de legitimise other projects:

https://matrix.to/#/#ping:maunium.net/$V9aN1Wn0pId-JWbxH1WV5I8PAVMajooX7WMFKmDyh6E
https://matrix.to/#/#ping:maunium.net/$IsfOfe8anRYqbRAwj7OdlX_hS-kBbHUJTVhQW-32Etk
https://matrix.to/#/#ping:maunium.net/$-Bswk96jj3ns8xpSISKH0Y24pXZ2Xcd6Rwl8mRZQIaM (ironic)
https://matrix.to/#/#meowlnir:maunium.net/$zOmf7-NIHfQ_f_Ku9Q794GeKyu8n9v2MAvPtYjlGJIE (ironic that he asked https://matrix.to/#/#meowlnir:maunium.net/$nE57Bi_DmvodZJe7JDPS7NxUBlxeDLUBhYIWNzgNk0g despite having cherrypicked a bunch of fixes from continuwuity already)
https://matrix.to/#/#tuwunel:grin.hu/$svIUeuWfm2VWuHGSUMeT5VWWcZclraKcmUaDK3NiYEM ("June and I dealt with another "continuwuity" called "grapevine" last year")

threats against the project:

https://matrix.to/#/#ping:maunium.net/$o27P102ebbFa9U80e-FK-DxGTupy8IJ3TSWFYJm6hIs
https://matrix.to/#/#ping:maunium.net/$priRlTsBuH2YfTo_pb04xHUJpTeU2DKXdJ7tAVrR5w4

personal threats:

https://matrix.to/#/#ping:maunium.net/$5YefXN_uVR5WiGfj32j3Po9Q1JMKuTTfxve_8IHp1J8
https://matrix.to/#/#ping:maunium.net/$L-dXYMXucfJiLkyc5dvv4t7pQqUKMwnLEd9zzLjZlu0

attempting to get security details released early (knowing only he and three other servers have finished implementing):

https://matrix.to/#%2F%21NasysSDfxKxZBzJJoE%3Amatrix.org%2F%24_d2wJk45JtwblMHRVBdfeEV1cAU5flPuRebTAvfOr-s%3Fvia=nexy7574.co.uk&via=matrix.org&via=element.io
https://matrix.to/#/#tuwunel:grin.hu/$mgi2dDGnL-L9Jqjm_YZPhu4NoAx8q3OMF9KIfRiGwFs

other trivia:

Jason getting his server ACL'ed from all foundation rooms:
https://matrix.to/#/!WuBtumawCeOGEieRrp:matrix.org/$u8YRBq_s-OrOpl4IGt15iUHPBKubKa4A_n-u_WbgqAU` - zemos.net ban
https://matrix.to/#/!WuBtumawCeOGEieRrp:matrix.org/$l8pKC-mR0tjLFnbnmi_8xSXbHGA3vgew-QTRWAk-kCs - wildcard ban on his domain

if any of these events get redacted, feel free to reach out and I will provide the original events - unredacted. just as another layer of certainty, when i provide the events, you can verify the server signing keys yourself, fairly trivially, as well as calculate the event ID (which is a hash). fetching the event from your $CONDUWUIT_DESCENDANT homeserver is as simple as running @conduit debug get-pdu $id in your admin room, as well as checking validity with @conduit debug verify-json or @conduit debug verify-pdu.

UPDATE: i've just been informed json signing is based on the redacted event, not the full input.

Honestly, that first link is all the info I needed. Keep reading, <100 messages and it becomes clear that I do not want to put the continuation of my homeserver into Jasons/tuwunels hands. Going to migrate to continuwuity later today.

 

Danke!! Endlich sagt wer was!

 

Schadenfreude ๐Ÿ™‚

 

Five years ago, I bought a Supernote A5. It was (and mostly still is) a great device for reading and writing on an eInk display, and it runs plain old linux.

The deciding reason I went for this device instead of the competition is that I was "under the impression" that they were about to enable full SSH access to the device! Awesome!

"Why were you under that impression?", I hear the skeptics ask. Well, their spokesperson has stated that they would do so. Via mail, and on reddit, publicly, multiple times. I was still torn, so sent them a DM, asking if this was ineed factual. "Yes", they said, "the next quarterly update will enable SSH access!".

Great!

Well, it's been 5 years. They did not follow through. A couple updates were published, none contained the promised functionality, the spokesperson stopped answering questions about SSH. The last software update I received is from 2.5yrs ago. Mentions of the original Supernote A5 have largely been scrubbed from their website.

Let me be clear, the device still functions perfectly. But it is in danger of becoming e-waste because it is so needlessly complicated to get stuff on the device. I'm currently in need of an ebook reader with (ideally) OPDS capability, and I am pretty confident I'd be able to get something like koreader running on this, or at least just run a script to sync files over SSH. Also, I frankly feel wounded in my pride having a Linux device in my possession which refuses to do my bidding (I'm joking of course, but also I am 100% serious).

Here's all I know:

  • plugging it in via USB, the device reads as an MTP device, with access only to the documents/books/... stored on it
  • you can place an update.zip file (obtained from the SN website) into the root of that MTP directory, and upon reboot, the device will update. To me, this appears to be the most promising route of gaining access.
  • unfortunately, the zip file is encrypted. The decryption key clearly has to be known to the device, but since I have no access to it,...

I'm a software engineer, but I have zero knowledge of the "dark arts", so to speak. If anyone could help me (or point me into the right direction!), I would really be grateful. I don't want this (generally nice) product to turn into a paperweight instead of a paper replacement :(

 

Basically, the title. After years of inactivty, I'll be taking music (cello) lessons again, with my teacher of yesteryear, from whom I've moved half a country away.

She has suggested Zoom but is open to alternatives. I don't particularly like Zoom, plus I have a feeling better quality can be had through a custom solution - but I'm at a bit of a loss as to what exactly would be a good fit for this project.

Maybe Jitsi? Does someone here have experience with it and could tell me if it's possible to set something like a "target" audio quality?

For hardware, I basically have two options. Both are already in use, for different things, and have sufficient processing capabilities - albeit no GPU:

  • host everything at home. Plus: lowest possible latency from me to the server. Not sure how much that is worth though.
  • root server in the Hetzner cloud: much faster network speed. Again though, not sure how beneficial that is, the ultimate bottleneck will always be my upload speed (40Mbit)

OK, I realize that this post is a but of a random assortment of thoughts. I'd be really happy about suggestions and / or hearing about other's experiences with similar use-cases!

view more: next โ€บ