fix(realtime): skip responses for empty transcripts (#11940)

Realtime turns could invoke the LLM and TTS even when speech transcription returned only whitespace. This let ambient noise produce unsolicited assistant output and polluted conversation history with an empty user turn.

Require non-blank transcript text before automatic response generation while preserving the completed transcription event.

Assisted-by: Codex:gpt-5 golangci-lint

Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
This commit is contained in:
localai-org-maint-botandEttore Di Giacinto authored and GitHub committed 2026-09-08 23:12:57 +02:00
1 parent 2ba6600440
commit 780e458f11
2 files changed
+15 -1

No files matched your search

+2 -1
View File
@@ -12,6 +12,7 @@ import (
"math"
"os"
"strconv"
"strings"
"sync"
"time"
@@ -1923,7 +1924,7 @@ func commitUtteranceWithTranscript(ctx context.Context, utt []byte, live *liveUt
// Generate an LLM response only when there is a transcript to feed it. A
// sound-detection-only session (no transcription) has no LLM stage, so it
// stops here after emitting the sound-detection event.
if session.InputAudioTranscription != nil && !session.TranscriptionOnly {
if session.InputAudioTranscription != nil && !session.TranscriptionOnly && strings.TrimSpace(transcript) != "" {
generateResponse(ctx, session, utt, transcript, speaker, conv, t)
}
}
@@ -355,6 +355,19 @@ var _ = Describe("commitUtteranceWithTranscript", func() {
Expect(tr.countEvents(types.ServerEventTypeConversationItemInputAudioTranscriptionCompleted)).To(Equal(1))
})
It("does not generate a response for a blank transcript", func() {
session, model := itSession(nil)
model.transcribeFinal = &schema.TranscriptionResult{Text: " \t\n"}
tr := &fakeTransport{}
conv := &Conversation{}
commitUtterance(context.Background(), []byte{1, 2}, session, conv, tr)
Expect(tr.countEvents(types.ServerEventTypeConversationItemInputAudioTranscriptionCompleted)).To(Equal(1))
Expect(conv.Items).To(BeEmpty())
Expect(tr.countEvents(types.ServerEventTypeResponseCreated)).To(Equal(0))
})
})
// transcribeUtterance is the retranscribe gate's offline decode of the