Zackriya-Solutions/meetily · error · anyhow::Error

Failed to load Whisper model '{}': {}

Error message

Failed to load Whisper model '{}': {}

What it means

WhisperEngine::load_model(target_model) failed while preparing the engine for retranscription. discover_models() runs first but its failure is only warned about; the hard error comes from load_model. The inner '{}' typically means the GGML model file is missing from the models directory, corrupt or truncated (partial download), unreadable for this whisper-rs build, or too large for available memory.

Source

Thrown at frontend/src-tauri/src/audio/retranscription.rs:567

                info!(
                    "Loading Whisper model '{}' (current: {:?})",
                    target_model, current_model
                );

                // Discover available models first (populates the internal cache)
                info!("Discovering available Whisper models...");
                if let Err(discover_err) = e.discover_models().await {
                    warn!("Error during model discovery (continuing anyway): {}", discover_err);
                }

                match e.load_model(&target_model).await {
                    Ok(_) => {
                        info!("Whisper model '{}' loaded successfully", target_model);
                        Ok(e)
                    }
                    Err(load_err) => {
                        error!("Failed to load Whisper model '{}': {}", target_model, load_err);
                        Err(anyhow!("Failed to load Whisper model '{}': {}", target_model, load_err))
                    }
                }
            } else {
                info!("Whisper model '{}' already loaded", target_model);
                Ok(e)
            }
        }
        None => Err(anyhow!("Whisper engine not initialized")),
    }
}

/// Get the configured Whisper model name from the database
async fn get_configured_whisper_model<R: Runtime>(app: &AppHandle<R>) -> Result<String> {
    debug!("Getting configured Whisper model from database...");

    let app_state = app
        .try_state::<AppState>()
        .ok_or_else(|| {

View on GitHub (pinned to 0281737d87)

Solutions

  1. Verify the model file exists in the models directory (dev: frontend/models; macOS: ~/Library/Application Support/Meetily/models).
  2. Read the inner error: 'no such file' means missing, 'failed to read' usually means corrupt - re-download the model from Settings.
  3. If the inner error is out-of-memory, choose a smaller model (base/small).
  4. Retry with the default model to confirm the engine itself works, isolating the problem to that model file.
Defensive patterns

Strategy: validation

Validate before calling

// Confirm the model file exists before invoking retranscription
let models_dir = get_models_directory();
let ok = models_dir.map(|d| d.join(format!("{model}.bin")).exists()).unwrap_or(false);
if !ok { return Err(anyhow!("model {model} not downloaded - fetch it in Settings first")); }

Try / catch

// Frontend: branch on the load failure and offer the model download UI
try { await invoke('start_retranscription', {...}); }
catch (e) {
  if (String(e).includes('Failed to load Whisper model')) promptDownloadModel(modelName);
}

Prevention

When it happens

Trigger: Requesting a model by name (retranscription dialog or transcript_settings row) that was never downloaded; models directory missing or moved; model file half-downloaded; loading large-v3 on a low-memory machine.

Common situations: User selects large-v3 in the UI without downloading it; app data directory moved between machines; whisper-rs version update rejecting old GGML files; disk full during model download earlier.

Related errors


AI-assisted analysis of Zackriya-Solutions/meetily@0281737d87 (2026-08-16). Data as JSON: /api/errors/4b33eba1afaf4ed6. Report an issue: GitHub.