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

Parakeet model '{}' not found

Error message

Parakeet model '{}' not found

What it means

Returned by delete_model when the name is not a key in the available_models map. The catalog is built by discover_models from a fixed config list (parakeet-tdt-0.6b-v3-int8, parakeet-tdt-0.6b-v2-int8), so any other string - including FP32 names, v1 names, or typos - is unknown even if a similarly named directory exists on disk.

Source

Thrown at frontend/src-tauri/src/parakeet_engine/parakeet_engine.rs:492

        Ok(result.text)
    }

    /// Get the models directory path
    pub async fn get_models_directory(&self) -> PathBuf {
        self.models_dir.clone()
    }

    /// Delete a corrupted model
    pub async fn delete_model(&self, model_name: &str) -> Result<String> {
        log::info!("Attempting to delete Parakeet model: {}", model_name);

        // Get model info to find the directory path
        let model_info = {
            let models = self.available_models.read().await;
            models.get(model_name).cloned()
        };

        let model_info = model_info.ok_or_else(|| anyhow!("Parakeet model '{}' not found", model_name))?;

        log::info!("Parakeet model '{}' has status: {:?}", model_name, model_info.status);

        // Allow deletion of corrupted or available models
        match &model_info.status {
            ModelStatus::Corrupted { .. } | ModelStatus::Available => {
                // Delete the entire model directory
                if model_info.path.exists() {
                    fs::remove_dir_all(&model_info.path).await
                        .map_err(|e| anyhow!("Failed to delete directory '{}': {}", model_info.path.display(), e))?;
                    log::info!("Successfully deleted Parakeet model directory: {}", model_info.path.display());
                } else {
                    log::warn!("Directory '{}' does not exist, nothing to delete", model_info.path.display());
                }

                // Update model status to Missing
                {
                    let mut models = self.available_models.write().await;

View on GitHub (pinned to 0281737d87)

Solutions

  1. List valid names first with parakeet_get_available_models (or engine.discover_models) and pass exactly one of those name strings
  2. Update hardcoded model ids in the frontend to the current catalog (parakeet-tdt-0.6b-v3-int8 / parakeet-tdt-0.6b-v2-int8)
  3. If a directory with a rogue name exists under the models dir, remove it manually via open_parakeet_models_folder - delete_model will never see it

Example fix

// before
engine.delete_model("parakeet-tdt-0.6b-v3").await?;

// after - resolve the exact catalog name before deleting
let models = engine.discover_models().await?;
let target = models.iter().find(|m| m.name == requested)
    .ok_or_else(|| anyhow!("unknown model {requested}; valid: {:?}",
        models.iter().map(|m| m.name.clone()).collect::<Vec<_>>()))?;
engine.delete_model(&target.name).await?;
Defensive patterns

Strategy: validation

Validate before calling

// Resolve against the live catalog before deleting
let names: Vec<String> = engine.discover_models().await?
    .into_iter().map(|m| m.name).collect();
if !names.contains(&name) {
    anyhow::bail!("'{name}' is not a Parakeet catalog model; valid: {names:?}");
}

Type guard

function isKnownParakeetModel(name: string, catalog: { name: string }[]): boolean {
  return catalog.some(m => m.name === name);
}

Try / catch

try {
  await invoke('parakeet_delete_corrupted_model', { modelName });
} catch (e) {
  if (String(e).includes('not found')) {
    // refresh the model list; the id is stale or mistyped - never retry unchanged
  } else {
    throw e;
  }
}

Prevention

When it happens

Trigger: Calling parakeet_delete_corrupted_model / engine.delete_model with a mistyped name or an unsupported variant (e.g. "parakeet-tdt-0.6b-v3" without the int8 suffix, or "parakeet-tdt-0.6b-v2-fp32"); passing a Whisper model name to the Parakeet API; a stale frontend hardcoding an old model identifier after a catalog change.

Common situations: Frontend model list out of sync with the Rust catalog after an app update; copy-paste of model ids from HuggingFace repo names instead of the app's catalog ids; mixing up whisper and parakeet command surfaces.

Related errors


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