cjpais/Handy · error · anyhow::Error

Failed to load SenseVoice model

Error message

Failed to load SenseVoice model {}: {}

What it means

Thrown when SenseVoiceModel::load fails to load the SenseVoice ONNX model with Int8 quantization from model_path. The underlying error is chained and a "loading_failed" model-state event is emitted to the frontend before returning the anyhow error.

Solutions

  1. Re-download the SenseVoice model
  2. Verify the Int8 quantized files exist and match expected sizes before loading
  3. Inspect the chained ONNX error; if quantization ops fail, update the app / transcribe-rs so the onnxruntime version matches the model
  4. Switch to another engine's model to confirm the issue is model-file-specific
Defensive patterns

Strategy: try-catch

Try / catch

match manager.load_model(&model_id, None) {
    Err(e) if e.to_string().contains("SenseVoice") => { /* re-download model, retry once */ }
    other => other,
}

Prevention

When it happens

Trigger: load_model reaches EngineType::SenseVoice and SenseVoiceModel::load(&model_path, &Quantization::Int8) errors: missing or truncated Int8 quantized ONNX files, directory layout mismatch, or ONNX Runtime session/provider failure.

Common situations: Download interrupted mid-file; only a non-Int8 variant present on disk; transcribe-rs update renamed expected files; quantized opset unsupported by the bundled onnxruntime version.

Related errors


AI-assisted analysis of cjpais/Handy@ba10ce1943 (2026-08-17). Data as JSON: /api/errors/02e23274e196bcfe. Report an issue: GitHub.

Appendix: source

Thrown at src-tauri/src/managers/transcription.rs:680

            EngineType::MoonshineStreaming => {
                let engine = StreamingModel::load(&model_path, 0, &Quantization::default())
                    .map_err(|e| {
                        let error_msg = format!(
                            "Failed to load moonshine streaming model {}: {}",
                            model_id, e
                        );
                        emit_loading_failed(&error_msg);
                        anyhow::anyhow!(error_msg)
                    })?;
                LoadedEngine::MoonshineStreaming(engine)
            }
            EngineType::SenseVoice => {
                let engine =
                    SenseVoiceModel::load(&model_path, &Quantization::Int8).map_err(|e| {
                        let error_msg =
                            format!("Failed to load SenseVoice model {}: {}", model_id, e);
                        emit_loading_failed(&error_msg);
                        anyhow::anyhow!(error_msg)
                    })?;
                LoadedEngine::SenseVoice(engine)
            }
            EngineType::GigaAM => {
                let engine = GigaAMModel::load(&model_path, &Quantization::Int8).map_err(|e| {
                    let error_msg = format!("Failed to load gigaam model {}: {}", model_id, e);
                    emit_loading_failed(&error_msg);
                    anyhow::anyhow!(error_msg)
                })?;
                LoadedEngine::GigaAM(engine)
            }
            EngineType::Canary => {
                let engine = CanaryModel::load(&model_path, &Quantization::Int8).map_err(|e| {
                    let error_msg = format!("Failed to load canary model {}: {}", model_id, e);
                    emit_loading_failed(&error_msg);
                    anyhow::anyhow!(error_msg)
                })?;
                LoadedEngine::Canary(engine)

View on GitHub (pinned to ba10ce1943)