Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e170991222 | |||
| a1343ee18f | |||
| b2d3c935d8 |
+17
-6
@@ -1449,17 +1449,23 @@ class ARIABridge:
|
|||||||
self._pending_stt[request_id] = future
|
self._pending_stt[request_id] = future
|
||||||
|
|
||||||
try:
|
try:
|
||||||
await self._send_to_rvs({
|
model = getattr(self.stt_engine, "model_size", "small")
|
||||||
|
logger.info("[rvs] stt_request → whisper-bridge (id=%s, model=%s, %dKB)",
|
||||||
|
request_id[:8], model, len(audio_b64) // 1365)
|
||||||
|
ok = await self._send_to_rvs({
|
||||||
"type": "stt_request",
|
"type": "stt_request",
|
||||||
"payload": {
|
"payload": {
|
||||||
"requestId": request_id,
|
"requestId": request_id,
|
||||||
"audio": audio_b64,
|
"audio": audio_b64,
|
||||||
"mimeType": mime_type,
|
"mimeType": mime_type,
|
||||||
"model": getattr(self.stt_engine, "model_size", "small"),
|
"model": model,
|
||||||
"language": getattr(self.stt_engine, "language", "de"),
|
"language": getattr(self.stt_engine, "language", "de"),
|
||||||
},
|
},
|
||||||
"timestamp": int(loop.time() * 1000),
|
"timestamp": int(loop.time() * 1000),
|
||||||
})
|
})
|
||||||
|
if not ok:
|
||||||
|
logger.warning("[rvs] stt_request konnte nicht gesendet werden — skip Remote")
|
||||||
|
return None
|
||||||
return await asyncio.wait_for(future, timeout=self._STT_REMOTE_TIMEOUT_S)
|
return await asyncio.wait_for(future, timeout=self._STT_REMOTE_TIMEOUT_S)
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
logger.warning("[rvs] Remote-STT Timeout (%.0fs)", self._STT_REMOTE_TIMEOUT_S)
|
logger.warning("[rvs] Remote-STT Timeout (%.0fs)", self._STT_REMOTE_TIMEOUT_S)
|
||||||
@@ -1516,10 +1522,13 @@ class ARIABridge:
|
|||||||
except OSError:
|
except OSError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
async def _send_to_rvs(self, message: dict) -> None:
|
async def _send_to_rvs(self, message: dict) -> bool:
|
||||||
"""Sendet eine Nachricht an die App (via RVS) mit Verbindungs-Check."""
|
"""Sendet eine Nachricht an die App (via RVS) mit Verbindungs-Check.
|
||||||
|
|
||||||
|
Rueckgabe: True wenn erfolgreich gesendet, False wenn Verbindung tot.
|
||||||
|
"""
|
||||||
if self.ws_rvs is None:
|
if self.ws_rvs is None:
|
||||||
return
|
return False
|
||||||
|
|
||||||
# Ping-Check: Verbindung wirklich aktiv?
|
# Ping-Check: Verbindung wirklich aktiv?
|
||||||
try:
|
try:
|
||||||
@@ -1533,12 +1542,14 @@ class ARIABridge:
|
|||||||
pass
|
pass
|
||||||
self.ws_rvs = None
|
self.ws_rvs = None
|
||||||
# Reconnect wird vom connect_to_rvs Loop uebernommen
|
# Reconnect wird vom connect_to_rvs Loop uebernommen
|
||||||
return
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
await self.ws_rvs.send(json.dumps(message))
|
await self.ws_rvs.send(json.dumps(message))
|
||||||
|
return True
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.warning("[rvs] Sendefehler — RVS nicht erreichbar")
|
logger.warning("[rvs] Sendefehler — RVS nicht erreichbar")
|
||||||
|
return False
|
||||||
|
|
||||||
# ── Log-Streaming an die App ─────────────────────────────
|
# ── Log-Streaming an die App ─────────────────────────────
|
||||||
|
|
||||||
|
|||||||
@@ -214,13 +214,20 @@ async def run_loop(runner: WhisperRunner) -> None:
|
|||||||
payload = msg.get("payload", {}) or {}
|
payload = msg.get("payload", {}) or {}
|
||||||
|
|
||||||
if mtype == "stt_request":
|
if mtype == "stt_request":
|
||||||
|
req_id = payload.get("requestId", "?")
|
||||||
|
audio_len = len(payload.get("audio", ""))
|
||||||
|
logger.info("stt_request empfangen (id=%s, %dKB Audio)",
|
||||||
|
req_id[:8] if req_id != "?" else "?", audio_len // 1365)
|
||||||
asyncio.create_task(handle_stt_request(ws, payload, runner))
|
asyncio.create_task(handle_stt_request(ws, payload, runner))
|
||||||
elif mtype == "config":
|
elif mtype == "config":
|
||||||
new_model = payload.get("whisperModel")
|
new_model = payload.get("whisperModel")
|
||||||
if new_model and new_model != runner.model_size:
|
if new_model and new_model != runner.model_size:
|
||||||
logger.info("Config-Broadcast: Whisper-Modell → %s", new_model)
|
logger.info("Config-Broadcast: Whisper-Modell → %s", new_model)
|
||||||
asyncio.create_task(runner.ensure_loaded(new_model))
|
asyncio.create_task(runner.ensure_loaded(new_model))
|
||||||
# andere Types (chat, heartbeat, ...) einfach ignorieren
|
else:
|
||||||
|
# Alle anderen Nachrichten debug-loggen — hilft beim Diagnostizieren,
|
||||||
|
# ob stt_request ueberhaupt durch den RVS kommt
|
||||||
|
logger.debug("Unbeachteter Type: %s", mtype)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning("Verbindung verloren: %s", e)
|
logger.warning("Verbindung verloren: %s", e)
|
||||||
if use_tls and RVS_TLS_FALLBACK and not tls_fallback_tried:
|
if use_tls and RVS_TLS_FALLBACK and not tls_fallback_tried:
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
faster-whisper==1.0.3
|
faster-whisper==1.0.3
|
||||||
websockets>=12.0
|
websockets>=12.0
|
||||||
numpy>=1.24
|
numpy>=1.24
|
||||||
|
requests>=2.31
|
||||||
|
|||||||
Reference in New Issue
Block a user