{"record":{"id":"74f28d3133b944f5","repo":"Zackriya-Solutions/meetily","slug":"parakeet-model-is-not-downloaded","errorCode":null,"errorMessage":"Parakeet model {} is not downloaded","messagePattern":"Parakeet model (.+?) is not downloaded","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"frontend/src-tauri/src/parakeet_engine/parakeet_engine.rs","lineNumber":415,"sourceCode":"\n                // Load model based on quantization type\n                let quantized = model_info.quantization == QuantizationType::Int8;\n                let model = ParakeetModel::new(&model_info.path, quantized)\n                    .map_err(|e| anyhow!(\"Failed to load Parakeet model {}: {}\", model_name, e))?;\n\n                // Update current model and model name\n                *self.current_model.write().await = Some(model);\n                *self.current_model_name.write().await = Some(model_name.to_string());\n\n                log::info!(\n                    \"Successfully loaded Parakeet model: {} ({})\",\n                    model_name,\n                    if quantized { \"Int8 quantized\" } else { \"FP32\" }\n                );\n                Ok(())\n            }\n            ModelStatus::Missing => {\n                Err(anyhow!(\"Parakeet model {} is not downloaded\", model_name))\n            }\n            ModelStatus::Downloading { .. } => {\n                Err(anyhow!(\"Parakeet model {} is currently downloading\", model_name))\n            }\n            ModelStatus::Error(ref err) => {\n                Err(anyhow!(\"Parakeet model {} has error: {}\", model_name, err))\n            }\n            ModelStatus::Corrupted { .. } => {\n                Err(anyhow!(\"Parakeet model {} is corrupted and cannot be loaded\", model_name))\n            }\n        }\n    }\n\n    /// Unload the current model\n    pub async fn unload_model(&self) -> bool {\n        let mut model_guard = self.current_model.write().await;\n        let unloaded = model_guard.take().is_some();\n        if unloaded {","sourceCodeStart":397,"sourceCodeEnd":433,"githubUrl":"https://github.com/Zackriya-Solutions/meetily/blob/0281737d87d26352fb0adc78c8c0975f691b23d1/frontend/src-tauri/src/parakeet_engine/parakeet_engine.rs#L397-L433","documentation":"Returned by load_model when the model's tracked status is ModelStatus::Missing. discover_models computes this status from the filesystem: the directory models_dir/<name> must exist and contain the required files for the quantization type, otherwise the entry is Missing. It means the name is a known catalog model (parakeet-tdt-0.6b-v3-int8 or parakeet-tdt-0.6b-v2-int8) but no complete local copy exists.","triggerScenarios":"Invoking parakeet_load_model / engine.load_model on a fresh install before parakeet_download_model completes; after delete_model succeeded (status reset to Missing); after a download timeout or stream error reset the status to Missing; after the models directory was removed manually while the app or a stale in-memory map still lists the model.","commonSituations":"First-run UI flow lets the user pick a model that was never downloaded; user cleared Application Support to free space; a previous download failed mid-stream (the error paths in download_model_detailed set status back to Missing) and the UI did not re-trigger the download.","solutions":["Call parakeet_download_model (engine.download_model) for the model and wait for the download-complete event before loading","Verify with parakeet_get_available_models that status is now \"Available\", then retry parakeet_load_model","If status is stuck at Missing although files exist on disk, restart the app so discover_models re-scans the models directory"],"exampleFix":"// before\nawait invoke('parakeet_load_model', { modelName: 'parakeet-tdt-0.6b-v3-int8' });\n\n// after\nconst models = await invoke<any[]>('parakeet_get_available_models');\nconst m = models.find(x => x.name === 'parakeet-tdt-0.6b-v3-int8');\nif (m?.status !== 'Available') {\n  await invoke('parakeet_download_model', { modelName: m.name });\n  // wait for the parakeet download-complete event before continuing\n}\nawait invoke('parakeet_load_model', { modelName: m.name });","handlingStrategy":"validation","validationCode":"// Only attempt load when discovery reports the model on disk\nlet infos = engine.discover_models().await?;\nmatch infos.iter().find(|m| m.name == name) {\n    Some(m) if matches!(m.status, ModelStatus::Available) => engine.load_model(name).await?,\n    Some(_) => { /* trigger download flow first */ }\n    None => { /* unknown model name */ }\n}","typeGuard":"// TS side: ModelStatus unit variants serialize as plain strings\nfunction isModelAvailable(info: { status: unknown }): boolean {\n  return info.status === 'Available';\n}","tryCatchPattern":"try {\n  await invoke('parakeet_load_model', { modelName });\n} catch (e) {\n  if (String(e).includes('is not downloaded')) {\n    // start download flow, then retry load on completion event\n  } else {\n    throw e;\n  }\n}","preventionTips":["Drive the model picker from parakeet_get_available_models and disable 'Load' unless status is Available","Kick off model download on first run instead of waiting for the user to hit Load","After delete_model or a failed download, always re-check status before loading"],"tags":["parakeet","model-management","download","tauri"],"backgroundTag":"model-not-downloaded","analyzedSha":"0281737d87d26352fb0adc78c8c0975f691b23d1","analyzedAt":"2026-08-16T20:57:52.567Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}