cjpais/Handy · error · anyhow::Error
Parakeet transcription failed
Error message
Parakeet transcription failed: {} What it means
The Parakeet branch calls parakeet_engine.transcribe_with(&audio, ¶ms) with segment-level timestamp granularity; this error wraps the ONNX Runtime inference failure. The chained message after the colon is ORT's own error (provider failure, invalid tensor shape, session/graph error).
Solutions
- Check the chained ORT message for provider errors and switch accelerator to CPU if GPU is implicated
- Retry with a slightly longer recording to rule out too-short audio
- Reload/re-download the Parakeet model if the graph itself errors
- Update the app if the ONNX Runtime version changed model compatibility
Defensive patterns
Strategy: retry
Try / catch
if let Err(e) = manager.transcribe(audio.clone()) {
if e.to_string().contains("Parakeet transcription failed") {
// transient ORT/provider failures often clear: reload model and retry once
manager.unload_current_model();
manager.load_model_blocking(&model_id, None)?;
return manager.transcribe(audio);
}
return Err(e);
} Prevention
- Keep GPU drivers current; fall back to CPU accelerator when provider errors recur
- Discard recordings shorter than ~0.5s after VAD trim
- Re-download the model when graph errors (not provider errors) appear
When it happens
Trigger: ONNX inference fails: audio too short/degenerate for the feature extractor, execution provider error (CUDA/CoreML/DirectML init or runtime failure), or corrupted model graph loaded earlier.
Common situations: Very short recordings (a fraction of a second) after VAD trimming; GPU provider issues on driver update; mixing model files between versions of the app.
Related errors
- Canary transcription failed
- Cohere transcription failed
- GigaAM transcription failed
- Moonshine streaming transcription failed
- Moonshine transcription failed
AI-assisted analysis of cjpais/Handy@ba10ce1943 (2026-08-17).
Data as JSON: /api/errors/ab6bcbb50e426cce.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/src/managers/transcription.rs:1363
.map(|t| {
// Whisper's audio-based LID (auto mode only;
// `None` when a language hint was passed).
model_detected_language = t.language;
t.text
})
.map_err(|e| {
anyhow::anyhow!("transcribe-cpp transcription failed: {}", e)
})
}
LoadedEngine::Parakeet(parakeet_engine) => {
let params = ParakeetParams {
timestamp_granularity: Some(TimestampGranularity::Segment),
..Default::default()
};
parakeet_engine
.transcribe_with(&audio, ¶ms)
.map(|r| r.text)
.map_err(|e| anyhow::anyhow!("Parakeet transcription failed: {}", e))
}
LoadedEngine::Moonshine(moonshine_engine) => moonshine_engine
.transcribe(&audio, &TranscribeOptions::default())
.map(|r| r.text)
.map_err(|e| anyhow::anyhow!("Moonshine transcription failed: {}", e)),
LoadedEngine::MoonshineStreaming(streaming_engine) => streaming_engine
.transcribe(&audio, &TranscribeOptions::default())
.map(|r| r.text)
.map_err(|e| {
anyhow::anyhow!("Moonshine streaming transcription failed: {}", e)
}),
LoadedEngine::SenseVoice(sense_voice_engine) => {
let language = match normalize_cjk_language(&validated_language) {
"zh" => Some("zh".to_string()),
"en" => Some("en".to_string()),
"ja" => Some("ja".to_string()),
"ko" => Some("ko".to_string()),
"yue" => Some("yue".to_string()),View on GitHub (pinned to ba10ce1943)