fix: voice input in Electron - local Whisper STT + network error handling

- Add local Whisper STT via Transformers.js with Web Worker (no UI freeze)
- Default sttProvider to 'local' in Electron (browser STT unavailable)
- Fix infinite toast loop: stop auto-restart on network errors
- Add retry limit with exponential backoff for transient STT errors
- Append voice transcript to input field (append-inline), not replace
- Add model catalog with download/load button in Voice Settings
This commit is contained in:
Bohdan Triapitsyn
2026-05-14 01:19:52 +03:00
parent ceb5bbd5dd
commit ef85c63336
18 changed files with 1114 additions and 89 deletions
@@ -1301,6 +1301,14 @@ export const settingsDict = {
"settings.voice.page.provider.custom": "Personalizado",
"settings.voice.page.provider.say": "Decir",
"settings.voice.page.provider.server": "Servidor",
"settings.voice.page.provider.wasm": "Local",
"settings.voice.page.stt.wasmModel": "Modelo Whisper",
"settings.voice.page.stt.wasmLoaded": "Modelo cargado",
"settings.voice.page.stt.wasmDownloading": "Descargando modelo...",
"settings.voice.page.stt.wasmLoading": "Cargando modelo...",
"settings.voice.page.stt.wasmNotLoaded": "El modelo se descargará en el primer uso de voz",
"settings.voice.page.stt.wasmDownload": "Descargar",
"settings.voice.page.stt.wasmRetry": "Reintentar",
"settings.voice.page.tooltip.browser": "Gratuito, offline, soporte limitado en móvil.",
"settings.voice.page.tooltip.openai": "Calidad alta, compatible con móviles, requiere clave de API.",
"settings.voice.page.tooltip.custom": "Servidor compatible con OpenAI (por ejemplo Kokoro).",