mirror of
https://github.com/moltbot/moltbot.git
synced 2026-04-28 08:52:45 +00:00
fix(android): ignore stale out-of-order agent events in streaming TTS
Agent events arrive on multiple threads concurrently. A stale event with shorter accumulated text was falsely triggering 'text diverged', causing the streaming TTS to restart with a new WebSocket — resulting in multiple simultaneous ElevenLabs connections (2-3 voices) and eventual system TTS fallback when hasReceivedAudio was false. Fix: if sentFullText.startsWith(fullText), the event is stale (we already have this text), not diverged. Accept and ignore it.
This commit is contained in:
committed by
Ayaan Zaidi
parent
a583261775
commit
ccca99c472
@@ -200,6 +200,9 @@ class ElevenLabsStreamingTts(
|
|||||||
private var sentFullText = ""
|
private var sentFullText = ""
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
// If we already sent a superset of this text, it's just a stale/out-of-order
|
||||||
|
// event from a different thread — not a real divergence. Ignore it.
|
||||||
|
if (sentFullText.startsWith(fullText)) return true
|
||||||
* Returns true if text was accepted, false if text diverged (caller should restart).
|
* Returns true if text was accepted, false if text diverged (caller should restart).
|
||||||
*/
|
*/
|
||||||
@Synchronized
|
@Synchronized
|
||||||
@@ -210,6 +213,9 @@ class ElevenLabsStreamingTts(
|
|||||||
// Detect text replacement: if the new text doesn't start with what we already sent,
|
// Detect text replacement: if the new text doesn't start with what we already sent,
|
||||||
// the stream has diverged (e.g., tool call interrupted and text was replaced).
|
// the stream has diverged (e.g., tool call interrupted and text was replaced).
|
||||||
if (sentFullText.isNotEmpty() && !fullText.startsWith(sentFullText)) {
|
if (sentFullText.isNotEmpty() && !fullText.startsWith(sentFullText)) {
|
||||||
|
// If we already sent a superset of this text, it's just a stale/out-of-order
|
||||||
|
// event from a different thread — not a real divergence. Ignore it.
|
||||||
|
if (sentFullText.startsWith(fullText)) return true
|
||||||
Log.d(TAG, "text diverged — sent='${sentFullText.take(60)}' new='${fullText.take(60)}'")
|
Log.d(TAG, "text diverged — sent='${sentFullText.take(60)}' new='${fullText.take(60)}'")
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user