From 58fd8721e3aa3d06e8481ef1cb14d9072e39ba6e Mon Sep 17 00:00:00 2001 From: duffyduck Date: Fri, 24 Apr 2026 20:03:45 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Voice-Transkription=20erzwingt=20kein=20?= =?UTF-8?q?"small"=20mehr=20=E2=80=94=20nutzt=20geladenes=20Modell?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit f5tts/bridge.py: das hardcoded model="small" in request_transcription war ein Fehler — whisper-bridge hat dadurch stumm zwischen Modellen geswappt. Wenn User large-v3 in Diagnostic eingestellt hatte: - f5tts Voice-Transkribierung triggerte Swap zu "small" (+~500MB Laden) - Danach aria-bridge schickte naechsten stt_request mit large-v3 (+~3GB Laden weil small jetzt im RAM war) Doppelter Load, unnoetiger Traffic. Fix: - f5tts: kein model mehr im payload, whisper-bridge entscheidet - whisper: wenn kein payload.model UND bereits ein Modell geladen → das behalten. Nur wenn gar nichts da ist fallback auf WHISPER_MODEL env default. Co-Authored-By: Claude Opus 4.7 (1M context) --- xtts/f5tts/bridge.py | 5 ++++- xtts/whisper/bridge.py | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/xtts/f5tts/bridge.py b/xtts/f5tts/bridge.py index 0d90273..3553e68 100644 --- a/xtts/f5tts/bridge.py +++ b/xtts/f5tts/bridge.py @@ -374,7 +374,10 @@ async def request_transcription(ws, wav_path: Path, language: str = "de") -> Opt "requestId": request_id, "audio": audio_b64, "mimeType": "audio/wav", - "model": "small", # klein reicht fuer Voice-Referenz + # KEIN hardcoded model — whisper-bridge nimmt das bereits + # geladene. Sonst wuerde hier ein Swap auf 'small' passieren und + # danach muesste das in Diagnostic konfigurierte Modell (z.B. + # large-v3) wieder geladen werden → doppelter Download. "language": language, }) return await asyncio.wait_for(fut, timeout=_STT_TIMEOUT_S) diff --git a/xtts/whisper/bridge.py b/xtts/whisper/bridge.py index 9a93b43..8f250c4 100644 --- a/xtts/whisper/bridge.py +++ b/xtts/whisper/bridge.py @@ -143,7 +143,11 @@ async def handle_stt_request(ws, payload: dict, runner: WhisperRunner) -> None: request_id = payload.get("requestId", "") audio_b64 = payload.get("audio", "") mime_type = payload.get("mimeType", "audio/mp4") - model = payload.get("model") or WHISPER_MODEL + # Modell-Auswahl: + # payload.model gesetzt → nimm das (aria-bridge sendet's basierend auf Config) + # sonst + Modell geladen → behalt das aktuelle (kein sinnloser Swap) + # sonst → fallback auf ENV-Default + model = payload.get("model") or (runner.model_size if runner.model is not None else WHISPER_MODEL) language = payload.get("language") or WHISPER_LANGUAGE if not audio_b64: