{"record":{"id":"11585f570b6b8938","repo":"Zackriya-Solutions/meetily","slug":"failed-to-start-download-for","errorCode":null,"errorMessage":"Failed to start download for {}: {}","messagePattern":"Failed to start download for (.+?): (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"frontend/src-tauri/src/parakeet_engine/parakeet_engine.rs","lineNumber":751,"sourceCode":"                    filename,\n                    existing_size as f64 / 1_048_576.0,\n                    expected_size as f64 / 1_048_576.0\n                );\n                continue;\n            }\n\n            log::info!(\"Downloading file {}/{}: {} (resuming from {} bytes)\", index + 1, total_files, filename, existing_size);\n\n            // Build request with optional Range header for resume\n            let mut request = client.get(&file_url);\n            if existing_size > 0 {\n                request = request.header(\"Range\", format!(\"bytes={}-\", existing_size));\n                log::info!(\"Resuming download from byte {}\", existing_size);\n            }\n\n            let mut response = request.send().await\n                .map_err(|e| {\n                    anyhow!(\"Failed to start download for {}: {}\", filename, e)\n                })?;\n\n            // Handle response status\n            let (file_total_size, resuming) = if response.status() == reqwest::StatusCode::PARTIAL_CONTENT {\n                // Server supports resume, get remaining size\n                let remaining = response.content_length().unwrap_or(0);\n                log::info!(\"Server supports resume, remaining: {} bytes\", remaining);\n                (existing_size + remaining, true)\n            } else if response.status().is_success() {\n                // Fresh download or server doesn't support resume\n                if existing_size > 0 {\n                    log::warn!(\"Server doesn't support resume for {}, starting fresh download\", filename);\n                }\n                (response.content_length().unwrap_or(0), false)\n            } else if response.status() == reqwest::StatusCode::RANGE_NOT_SATISFIABLE {\n                // 416: Range not satisfiable - file complete or invalid range\n                log::warn!(\"Server returned 416 Range Not Satisfiable for {}\", filename);\n","sourceCodeStart":733,"sourceCodeEnd":769,"githubUrl":"https://github.com/Zackriya-Solutions/meetily/blob/0281737d87d26352fb0adc78c8c0975f691b23d1/frontend/src-tauri/src/parakeet_engine/parakeet_engine.rs#L733-L769","documentation":"Returned by download_model_detailed when the initial client.get(file_url).send() fails at the transport level (no HTTP status was received). file_url points at huggingface.co/istupakov/parakeet-tdt-0.6b-v2-onnx/resolve/main/<file> for v2 models or meetily.towardsgeneralintelligence.com/models/parakeet-tdt-0.6b-v3-onnx/<file> for v3, so this is DNS resolution, connection, TLS, or proxy failure for those hosts.","triggerScenarios":"Machine offline or DNS cannot resolve huggingface.co / meetily.towardsgeneralintelligence.com; firewall or corporate proxy blocks the host; TLS interception with an untrusted CA breaks the handshake; the 30-second connect_timeout expires on a saturated link.","commonSituations":"Airplane mode/VPN dropped mid-flow; corporate egress filtering blocks file-hosting/CDN domains; captive portal intercepting the first request; regional network issues reaching HuggingFace CDN.","solutions":["Verify basic connectivity to the exact host: curl -I https://huggingface.co/... or https://meetily.towardsgeneralintelligence.com/... from the same machine","Check VPN/proxy/firewall settings and whitelist the download host","Fix DNS or switch networks, then retry - the engine removes the active-download entry and resumes partial files on the next attempt","If HuggingFace is unreachable long-term, prefer the v3 model which is served from the meetily mirror instead"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// Cheap preflight before a long download: can we reach the host at all?\n// (v2 -> huggingface.co, v3 -> meetily.towardsgeneralintelligence.com)\nlet host = if name.contains(\"-v2-\") { \"https://huggingface.co\" } else { \"https://meetily.towardsgeneralintelligence.com\" };\nif reqwest::get(host).await.is_err() {\n    anyhow::bail!(\"cannot reach {host} - check network/proxy before downloading\");\n}","typeGuard":null,"tryCatchPattern":"// Retry with backoff - transport failures are usually transient; the engine resumes partial files\nlet mut attempt = 0;\nloop {\n    match engine.download_model(name, None).await {\n        Ok(()) => break,\n        Err(e) if e.to_string().contains(\"Failed to start download\") && attempt < 3 => {\n            attempt += 1;\n            tokio::time::sleep(std::time::Duration::from_secs(5 * attempt as u64)).await;\n        }\n        Err(e) => return Err(e),\n    }\n}","preventionTips":["Confirm the machine is online and DNS resolves the download host before large downloads","Whitelist huggingface.co and meetily.towardsgeneralintelligence.com on firewalls/proxies","Prefer the v3 model if HuggingFace is unreachable in your region (it uses the meetily mirror)"],"tags":["parakeet","network","reqwest","download","firewall"],"backgroundTag":"network-request-failed","analyzedSha":"0281737d87d26352fb0adc78c8c0975f691b23d1","analyzedAt":"2026-08-16T20:57:52.567Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}