feat(stt): add parakeet - #2
Merged
Merged
Conversation
- ParakeetEngine (parakeet-rs / ONNX Runtime, parakeet-tdt-0.6b-v3 int8) - multilingual (25 languages) with auto language detection - model downloader with progress (HuggingFace, ~670 MB) + delete - Engine settings page: Parakeet option, download UI, local model info Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
When STT is local (Parakeet), let the user pick which chat provider (OpenAI, Groq, Mistral, Gemini) handles reformulation/translation, with the matching API key field in the settings. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
src-tauri/gen/schemas is regenerated at every build; keeping it tracked only produced diff noise (a linux schema landed in the parakeet branch). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Pulls ort rc.13, cached mel FFTs and the streaming decoder fixes. The only breaking change (ParakeetUnified::from_shared) is on an API we don't use. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Every engine used to swallow inference failures: a dictation that failed pasted nothing with no explanation. SttEvent::Error is now emitted by all five engines, shown as a toast in the settings window and as a red pill in the overlay before it hides. Parakeet also paid its ONNX load (~1s) on the first dictation. The engine is now pre-created at startup, on engine switch and once the download finishes, and dropped when the local model is deleted (it kept transcribing from a model the UI reported as absent). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Covers every open Dependabot alert except glib (Linux-only, pinned by the webkit2gtk stack, needs an upstream tauri bump). npm (dev tooling only): vite 7.3.6, rollup 4.63.1, postcss 8.5.28, nanoid 3.3.18, picomatch 4.0.7, @babel/core 7.29.7. rust: tauri 2.11.5, openssl 0.10.81, rustls-webpki 0.103.15, serde_with 3.22.0, tar 0.4.46, rand 0.9.5 (0.7/0.8 dropped). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…nload Cancel (Cmd+Shift+C) went through pipeline.stop(), which flushes: it transcribed the very audio the user asked to throw away, froze the overlay until the result came back and, on the API engines, billed a request for it. It now resets the engine instead. Same for the engine switch, whose flush events had nowhere to go. The flush blocks until the transcription completes, so stop_recording_internal now runs it through spawn_blocking rather than stalling a tokio worker. Downloads: the progress counter only counts the files actually missing, a truncated body (HTTP 200 with a short read) is rejected instead of being installed as valid, partial files are cleaned up on failure, and the whole thing can be cancelled from the UI. A recording under a second, empty buffer included, now says so instead of vanishing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds NVIDIA Parakeet as a fifth STT engine, running entirely on the machine.
Description written retroactively, after the fact: the PR was merged without one.
The engine
parakeet-tdt-0.6b-v3through ONNX Runtime (parakeet-rs), multilingual across 25 languages with automatic detection. No audio ever leaves the machine and no API key is needed.The int8 quantized export (~640 MB, against 2.5 GB for fp32) is downloaded from HuggingFace on demand, from the settings, with progress reporting, cancellation, integrity checking against
content-length, and.partcleanup on failure. The model is loaded at startup rather than on first use, so the first dictation does not pay the ONNX load.Since transcription is local but reformulation is not,
parakeet_reformulation_providerlets you pick which chat provider handles the rewriting — or none, in which case the transcription is pasted as-is and the pipeline stays fully local.Fixes that came with it
Reviewing the engine surfaced problems that predated it and affected all five engines:
SttEvent::Errornow travels to a toast and a red overlay pill. A recording shorter than a second, empty buffer included, says so instead of vanishing.Cmd+Shift+Cwent throughpipeline.stop(), which flushes: it ran the transcription the user had just discarded, froze the overlay until it returned, and billed an API request for it. It now resets the engine instead.stop_recording_internalnow runs it throughspawn_blocking.Housekeeping
parakeet-rs0.3.5 → 0.3.7 (ortrc.13)glib, which is Linux-only and pinned by Tauri's webkit stack:tauri2.11.5,openssl0.10.81,rustls-webpki0.103.15,serde_with3.22.0,tar0.4.46, plus the npm dev toolingsrc-tauri/gen/schemas, regenerated at every buildVerification
Local transcription measured end to end on real audio: model loaded in 0.8s, 4.8s of French speech transcribed in 0.1s, accurate. Two unit tests cover the cancel path and the blocking flush. Released as v0.7.0.