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

Model {} is not downloaded

Error message

Model {} is not downloaded

What it means

load_model matched the name in available_models but its ModelStatus is Missing: the catalog entry exists, however no model file was found on disk. The engine refuses to load and expects the model to be downloaded first (neighboring statuses produce their own messages for Downloading/Error/Corrupted).

Source

Thrown at frontend/src-tauri/src/whisper_engine/whisper_engine.rs:331

                    WhisperContext::new_with_params(&model_info.path.to_string_lossy(), context_param)
                        .map_err(|e| anyhow!("Failed to load model {}: {}", model_name, e))?
                    // Suppressor dropped here, stderr restored
                };

                // Update current context and model
                *self.current_context.write().await = Some(ctx);
                *self.current_model.write().await = Some(model_name.to_string());

                // Enhanced acceleration status reporting
                let acceleration_status = acceleration.status_label();

                log::info!("Successfully loaded model: {} with {} (Performance Tier: {:?}, Beam Size: {}, Threads: {:?})",
                          model_name, acceleration_status, hardware_profile.performance_tier,
                          adaptive_config.beam_size, adaptive_config.max_threads);
                Ok(())
            },
            ModelStatus::Missing => {
                Err(anyhow!("Model {} is not downloaded", model_name))
            },
            ModelStatus::Downloading { .. } => {
                Err(anyhow!("Model {} is currently downloading", model_name))
            },
            ModelStatus::Error(ref err) => {
                Err(anyhow!("Model {} has error: {}", model_name, err))
            },
            ModelStatus::Corrupted { .. } => {
                Err(anyhow!("Model {} is corrupted and cannot be loaded", model_name))
            }
        }
    }

    pub async fn unload_model(&self) -> bool  {
        let mut ctx_guard = self.current_context.write().await;
        let unloaded = ctx_guard.take().is_some();
        if unloaded {
            log::info!("📉Whisper model unloaded");

View on GitHub (pinned to 0281737d87)

Solutions

  1. Download the model first via the model manager / UI download flow, then load it
  2. If the file was placed manually, put it at the exact expected path and filename inside the models directory and refresh the model list
  3. Re-select an available model in settings if the previously used one is gone

Example fix

// before - load blindly, fails with 'Model base is not downloaded'
engine.load_model("base").await?;

// after - check status and download when missing
use whisper_engine::ModelStatus;
let models = engine.list_models().await?;
let m = models.iter().find(|m| m.name == "base").unwrap();
match m.status {
    ModelStatus::Available => engine.load_model("base").await?,
    ModelStatus::Missing => { engine.download_model("base").await?; engine.load_model("base").await? }
    other => return Err(anyhow!("Model base not loadable: {:?}", other)),
}
Defensive patterns

Strategy: validation

Validate before calling

use whisper_engine::ModelStatus;
let models = engine.list_models().await?;
match models.iter().find(|m| m.name == model_name) {
    Some(m) if matches!(m.status, ModelStatus::Available) => engine.load_model(model_name).await?,
    Some(_) => engine.download_model(model_name).await?, // Missing/NotDownloaded -> fetch first
    None => return Err(anyhow!("model {:?} unknown", model_name)),
}

Type guard

async fn is_model_ready(engine: &WhisperEngine, name: &str) -> bool {
    engine.available_models.read().await
        .get(name)
        .map(|m| matches!(m.status, ModelStatus::Available))
        .unwrap_or(false)
}

Try / catch

try { engine.load_model(name).await? }
catch (e) if e.to_string().contains("is not downloaded") {
    engine.download_model(name).await?;
    engine.load_model(name).await?;
}

Prevention

When it happens

Trigger: Calling load_model for a model whose file is absent from the models directory: fresh install before any download, the model file was deleted or moved externally, or the download has not finished (that state raises the separate 'currently downloading' error).

Common situations: First launch with no models downloaded; user or a cleanup tool emptied the models folder; settings persist a previously downloaded model name whose file was removed.

Related errors


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