Skip to content

Store recognition results per STT entity and consume on use - #13

Open
jgsaez9 wants to merge 1 commit into
EuleMitKeule:masterfrom
jgsaez9:fix/multi-satellite-results
Open

Store recognition results per STT entity and consume on use#13
jgsaez9 wants to merge 1 commit into
EuleMitKeule:masterfrom
jgsaez9:fix/multi-satellite-results

Conversation

@jgsaez9

@jgsaez9 jgsaez9 commented Jul 5, 2026

Copy link
Copy Markdown

Problem

The recognised speaker was stored in a single shared hass.data slot (speaker_recognition.last_result). Two issues follow:

  1. Multiple satellites collide. With more than one satellite/pipeline active, concurrent utterances overwrite the single slot, so a conversation turn can be enriched with another satellite's speaker.
  2. Stale reuse. The value was never cleared, so a turn with no fresh recognition could still be enriched with a result from up to 5 seconds earlier.

Fix

  • The STT proxy stores results keyed by its entity_id (hass.data[DOMAIN]["results"][entity_id]).
  • The conversation proxy selects the freshest result within the freshness window and consumes it (removes it), so a recognition is applied to at most one turn and stale results are never reused.

This does not fully correlate a specific satellite's audio to its conversation turn (Assist does not expose a shared run id to both the STT and conversation entities), but it removes the shared-slot overwrite and the stale-reuse window, which are the practical failure modes.

The recognised speaker was stored in a single shared `hass.data` slot
(`last_result`). With more than one satellite this is unsafe: concurrent
utterances overwrite each other, and because the value was never cleared, a
conversation turn with no fresh recognition could still be enriched with a
result from up to 5 seconds earlier.

- The STT proxy now stores results keyed by its entity id.
- The conversation proxy takes the freshest result within the freshness window
  and consumes it, so a recognition is applied to at most one turn and stale
  results are never reused.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant