From c23daf14e302d7ead53869e0ea0b231dcc9a5f59 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 30 May 2026 18:30:09 +0200 Subject: [PATCH] =?UTF-8?q?fix(xtts):=20Sticky-TLS-Fallback=20in=20whisper?= =?UTF-8?q?=20+=20f5tts=20Bridges=20=E2=80=94=20gleicher=20Bug=20wie=20dam?= =?UTF-8?q?als=20App/Bridge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stefan-Bug-Report: Diagnostic zeigt seit Tagen 'XTTS-Server: Nicht verbunden (starte xtts/ auf dem Gaming-PC)' obwohl der Container laeuft. Keine TTS-Ausgabe, keine STT-Eingabe. Ursache: exakt der gleiche Sticky-TLS-Fallback-Bug den wir vor ein paar Tagen bei aria-bridge (commit b5ca3cd) und Android-App (commit ad87c80) gefixt hatten — die xtts/whisper- und xtts/f5tts-Bridges sind aber separate Codebases auf der Gamebox und wurden uebersehen. Mechanik: 1. RVS hatte mal kurzen TLS-Hick (z.B. Caddy-Restart oder Port-Wechsel 443 → 444 vor Tagen) 2. Bridge versucht wss:// → fail → switch auf ws:// (use_tls = False) 3. Connect klappt jetzt nicht mehr (RVS-Port hatte sich geaendert) 4. Reconnect-Loop bleibt auf ws://, kommt NIE mehr auf wss zurueck 5. Container laeuft, RVS-Status 'nicht verbunden' Fix: nach jedem Disconnect-Sleep `use_tls = RVS_TLS` und `tls_fallback_tried = False` zuruecksetzen. Bei jedem Reconnect- Cycle wird wss neu probiert; falls das wieder failt, switcht's sauber auf ws fuer den naechsten Versuch. Co-Authored-By: Claude Opus 4.7 (1M context) --- xtts/f5tts/bridge.py | 6 ++++++ xtts/whisper/bridge.py | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/xtts/f5tts/bridge.py b/xtts/f5tts/bridge.py index 216e410..c986e2b 100644 --- a/xtts/f5tts/bridge.py +++ b/xtts/f5tts/bridge.py @@ -912,6 +912,12 @@ async def run_loop(runner: F5Runner) -> None: continue await asyncio.sleep(min(retry_s, 30)) retry_s = min(retry_s * 2, 30) + # Sticky-Fallback verhindern: nach jedem Disconnect-Cycle wieder + # mit wss anfangen. Sonst klebt der Client nach einem temporaeren + # TLS-Hick auf ws:// fest und kommt nie mehr auf wss zurueck — + # genau das Problem das die App + Bridge frueher schon hatten. + use_tls = RVS_TLS + tls_fallback_tried = False async def main() -> None: diff --git a/xtts/whisper/bridge.py b/xtts/whisper/bridge.py index 8f250c4..ae589de 100644 --- a/xtts/whisper/bridge.py +++ b/xtts/whisper/bridge.py @@ -292,6 +292,12 @@ async def run_loop(runner: WhisperRunner) -> None: continue await asyncio.sleep(min(retry_s, 30)) retry_s = min(retry_s * 2, 30) + # Sticky-Fallback verhindern: nach jedem Disconnect-Cycle wieder + # mit wss anfangen. Sonst klebt der Client nach einem temporaeren + # TLS-Hick auf ws:// fest und kommt nie mehr auf wss zurueck — + # genau das Problem das die App + Bridge frueher schon hatten. + use_tls = RVS_TLS + tls_fallback_tried = False async def main() -> None: