{"record":{"id":"fba99020bb4b13b1","repo":"Zackriya-Solutions/meetily","slug":"parakeet-model-is-corrupted-and-cannot-be-loade","errorCode":null,"errorMessage":"Parakeet model {} is corrupted and cannot be loaded","messagePattern":"Parakeet model (.+?) is corrupted and cannot be loaded","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"frontend/src-tauri/src/parakeet_engine/parakeet_engine.rs","lineNumber":508,"sourceCode":"\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(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        #[cfg(test)]\n        if let Some(hook) = self.load_test_hook().await {\n            hook.unload_attempted.notify_one();\n        }\n        let _lifecycle_guard = self.model_lifecycle_lock.lock().await;\n        self.unload_model_locked().await\n    }\n\n    async fn unload_model_locked(&self) -> bool {\n        let unloaded = self.current_model.write().await.take().is_some();\n        if unloaded {\n            log::info!(\"Parakeet model unloaded\");","sourceCodeStart":490,"sourceCodeEnd":526,"githubUrl":"https://github.com/Zackriya-Solutions/meetily/blob/a2cb62e827da7ef59f65064c97233efb2313878e/frontend/src-tauri/src/parakeet_engine/parakeet_engine.rs#L490-L526","documentation":"Returned by load_model when the model's status is ModelStatus::Corrupted, which carries file_size and expected_min_size. discover_models flags a model Corrupted when its files exist but are smaller than the expected minimum (a truncated download), so loading is refused before ONNX Runtime ever opens the graph.","triggerScenarios":"An interrupted or cancelled download (cancel_download keeps partial files for resume) left a short encoder/decoder ONNX file that then fails the size check; a partially copied models directory from another machine; disk-full during download producing undersized files.","commonSituations":"User cancelled a download and later tried to load the model; app crashed mid-download and the resume path never completed; manual copy of the models folder missed the tail of a large file.","solutions":["Call delete_model(model_name) - deletion is explicitly allowed for Corrupted models - then download_model again","Or invoke the parakeet_delete_corrupted_model Tauri command from the UI and re-download from the models screen","Verify free disk space is at least the model size (~670 MB for v3 int8) before re-downloading"],"exampleFix":"// before\nengine.load_model(name).await?;\n\n// after - corrupted models must be deleted and re-downloaded\nmatch engine.discover_models().await?.into_iter().find(|m| m.name == name) {\n    Some(m) if matches!(m.status, ModelStatus::Corrupted { .. }) => {\n        engine.delete_model(&name).await?;\n        engine.download_model(&name, None).await?;\n    }\n    _ => {}\n}\nengine.load_model(&name).await?;","handlingStrategy":"fallback","validationCode":"let infos = engine.discover_models().await?;\nif let Some(m) = infos.iter().find(|m| m.name == name) {\n    if let ModelStatus::Corrupted { file_size, expected_min_size } = &m.status {\n        log::warn!(\"corrupt: {file_size} < {expected_min_size} bytes; rebuilding\");\n        engine.delete_model(name).await?;\n        engine.download_model(name, None).await?;\n    }\n}","typeGuard":"fn is_corrupted(info: &ModelInfo) -> bool {\n    matches!(info.status, ModelStatus::Corrupted { .. })\n}\n\n// TS side: { Corrupted: { file_size, expected_min_size } }\nfunction isCorrupted(status: unknown): boolean {\n  return typeof status === 'object' && status !== null && 'Corrupted' in status;\n}","tryCatchPattern":"match engine.load_model(name).await {\n    Err(e) if e.to_string().contains(\"corrupted\") => {\n        engine.delete_model(name).await?; // allowed for Corrupted\n        engine.download_model(name, None).await?;\n        engine.load_model(name).await?;\n    }\n    other => other?,\n}","preventionTips":["Treat a cancelled download as incomplete: always resume or delete before offering Load","Expose parakeet_delete_corrupted_model in the UI next to the corruption error","Check free disk space before downloading so files are not truncated by ENOSPC"],"tags":["parakeet","corrupted-file","download","model-management"],"backgroundTag":"corrupted-download","analyzedSha":"a2cb62e827da7ef59f65064c97233efb2313878e","analyzedAt":"2026-08-16T20:57:52.567Z","contentChangedAt":"2026-08-16T20:57:52.567Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}