{"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":424,"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(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\n        unloaded\n    }\n","sourceCodeStart":406,"sourceCodeEnd":442,"githubUrl":"https://github.com/Zackriya-Solutions/meetily/blob/0281737d87d26352fb0adc78c8c0975f691b23d1/frontend/src-tauri/src/parakeet_engine/parakeet_engine.rs#L406-L442","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":"0281737d87d26352fb0adc78c8c0975f691b23d1","analyzedAt":"2026-08-16T20:57:52.567Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}