{"record":{"id":"8dcaba01cb500edc","repo":"Zackriya-Solutions/meetily","slug":"parakeet-model-has-error","errorCode":null,"errorMessage":"Parakeet model {} has error: {}","messagePattern":"Parakeet model (.+?) has error: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"frontend/src-tauri/src/parakeet_engine/parakeet_engine.rs","lineNumber":421,"sourceCode":"                // 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 {\n            log::info!(\"Parakeet model unloaded\");\n        }\n\n        let mut model_name_guard = self.current_model_name.write().await;\n        model_name_guard.take();\n","sourceCodeStart":403,"sourceCodeEnd":439,"githubUrl":"https://github.com/Zackriya-Solutions/meetily/blob/0281737d87d26352fb0adc78c8c0975f691b23d1/frontend/src-tauri/src/parakeet_engine/parakeet_engine.rs#L403-L439","documentation":"Returned by load_model when the model's status is ModelStatus::Error(ref err); the embedded string is the message recorded when the model previously entered an error state. This is a sticky status carried in available_models, so the load is rejected until the state is cleared by a successful download, a delete, or a fresh discovery pass.","triggerScenarios":"A prior download attempt for this model failed in a path that set ModelStatus::Error (for example the post-download verification or a hard failure during fetch), and load_model is called afterwards; the app was not restarted since, so the in-memory status map still holds Error.","commonSituations":"Flaky network killed a download mid-session; the download succeeded partially and a later validation marked the model errored; the user retried 'Load' instead of 'Download' after seeing a download error in the UI.","solutions":["Re-run parakeet_retry_download / download_model for the model - a fresh successful pass overwrites the Error status","If retry keeps failing, call parakeet_delete_corrupted_model / delete_model (only works for Corrupted/Available, so first reset via a retry or app restart) or delete the model folder manually and download again","Restart the app to force discover_models to recompute status from disk if the folder actually looks complete"],"exampleFix":"// before\nengine.load_model(name).await?;\n\n// after - clear an Error status by re-downloading before loading\nlet info = engine.discover_models().await?.into_iter().find(|m| m.name == name);\nif matches!(info.map(|m| m.status), Some(ModelStatus::Error(_))) {\n    engine.download_model(&name, None).await?;\n}\nengine.load_model(&name).await?;","handlingStrategy":"retry","validationCode":"let infos = engine.discover_models().await?;\nif let Some(m) = infos.iter().find(|m| m.name == name) {\n    if let ModelStatus::Error(ref msg) = m.status {\n        log::warn!(\"model {name} in Error state: {msg}; re-downloading\");\n        engine.download_model(&name, None).await?;\n    }\n}","typeGuard":"fn is_error_status(info: &ModelInfo) -> bool {\n    matches!(info.status, ModelStatus::Error(_))\n}","tryCatchPattern":"match engine.load_model(name).await {\n    Err(e) if e.to_string().contains(\"has error\") => {\n        // clear the state with a fresh download, then retry once\n        engine.download_model(name, None).await?;\n        engine.load_model(name).await?;\n    }\n    other => other?,\n}","preventionTips":["After any download failure, show a retry affordance instead of leaving the model in Error with no path forward","On startup, re-run discover_models so stale Error states reconcile with the filesystem","Log the embedded error string - it names the original failure that set the state"],"tags":["parakeet","model-management","state-machine","download"],"backgroundTag":"model-download-failed","analyzedSha":"0281737d87d26352fb0adc78c8c0975f691b23d1","analyzedAt":"2026-08-16T20:57:52.567Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}