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': 'Custom',
'settings.voice.page.provider.say': 'Say',
'settings.voice.page.provider.server': 'Server',
'settings.voice.page.provider.wasm': 'Local',
'settings.voice.page.stt.wasmModel': 'Whisper Model',
'settings.voice.page.stt.wasmLoaded': 'Model loaded, ready',
'settings.voice.page.stt.wasmDownloading': 'Downloading model...',
'settings.voice.page.stt.wasmLoading': 'Loading model...',
'settings.voice.page.stt.wasmNotLoaded': 'Model will load on first voice use',
'settings.voice.page.stt.wasmDownload': 'Load',
'settings.voice.page.stt.wasmRetry': 'Retry',
'settings.voice.page.tooltip.browser': 'Free, offline, limited mobile support.',
'settings.voice.page.tooltip.openai': 'High quality, mobile ready, needs API key.',
'settings.voice.page.tooltip.custom': 'OpenAI-compatible server (for example Kokoro).',