{"record":{"id":"d23372e64c82cb21","repo":"Zackriya-Solutions/meetily","slug":"failed-to-start-download-d23372","errorCode":null,"errorMessage":"Failed to start download: {}","messagePattern":"Failed to start download: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"frontend/src-tauri/src/whisper_engine/whisper_engine.rs","lineNumber":1151,"sourceCode":"                .map_err(|e| anyhow!(\"Failed to create models directory: {}\", e))?;\n        }\n\n        {\n            let mut models = self.available_models.write().await;\n            if let Some(model_info) = models.get_mut(model_name) {\n                model_info.status = ModelStatus::Downloading { progress: 0 };\n            }\n        }\n\n        let client = Client::builder()\n            .user_agent(concat!(\"Meetily/\", env!(\"CARGO_PKG_VERSION\")))\n            .build()\n            .map_err(|e| anyhow!(\"Failed to create download client: {}\", e))?;\n        let response = tokio::select! {\n            biased;\n            _ = active_download.cancellation.cancelled() => return Err(DownloadCancelled.into()),\n            response = client.get(model_url).send() => response\n                .map_err(|e| anyhow!(\"Failed to start download: {}\", e))?,\n        };\n\n        if !response.status().is_success() {\n            return Err(anyhow!(\"Download failed with status: {}\", response.status()));\n        }\n\n        let total_size = response.content_length().unwrap_or(0);\n        let mut file = fs::File::create(file_path)\n            .await\n            .map_err(|e| anyhow!(\"Failed to create file: {}\", e))?;\n\n        use futures_util::StreamExt;\n        let mut stream = response.bytes_stream();\n        let mut downloaded = 0u64;\n        let mut last_progress_report = 0u8;\n        let mut last_report_time = std::time::Instant::now();\n\n        if let Some(ref callback) = progress_callback {","sourceCodeStart":1133,"sourceCodeEnd":1169,"githubUrl":"https://github.com/Zackriya-Solutions/meetily/blob/a2cb62e827da7ef59f65064c97233efb2313878e/frontend/src-tauri/src/whisper_engine/whisper_engine.rs#L1133-L1169","documentation":"reqwest's client.get(model_url).send() failed at the transport layer: DNS resolution failure, TCP connect refused, TLS handshake error, or no route to host. This is distinct from a non-2xx response (that is error 193) — here no HTTP response was received at all. The request targets huggingface.co, so any blocker on that host triggers it.","triggerScenarios":"Machine offline; DNS cannot resolve huggingface.co; corporate firewall or proxy blocking the CONNECT; TLS-intercepting proxy with an untrusted CA; IPv6-only misconfiguration.","commonSituations":"Firewalled enterprise networks; reqwest picking up a broken HTTP(S)_PROXY environment variable; captive portals; VPN split-tunnel rules excluding huggingface.co.","solutions":["Verify basic connectivity: curl -I https://huggingface.co from the same machine and user","If behind a proxy, set HTTP_PROXY/HTTPS_PROXY correctly (reqwest honors them) or fix the broken proxy env var","For TLS-intercepting proxies, add the proxy CA to the system trust store","Retry after transient DNS/connection drops — the call is idempotent from byte 0"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// Rust: fail fast with a clear signal instead of a raw send() error\nif reqwest::get(\"https://huggingface.co\").await.is_err() {\n    return Err(anyhow!(\"No network route to huggingface.co — check connectivity/proxy\"));\n}","typeGuard":null,"tryCatchPattern":"let mut backoff = 1;\nloop {\n  match engine.download_model(name, cb.clone()).await {\n    Ok(_) => break,\n    Err(e) if String::from(&e).contains(\"Failed to start download\") && backoff <= 4 => {\n      tokio::time::sleep(Duration::from_secs(backoff)).await;\n      backoff *= 2;\n    }\n    Err(e) => return Err(e),\n  }\n}","preventionTips":["Verify reachability of huggingface.co before large workflows (CI, onboarding)","Keep HTTP_PROXY/HTTPS_PROXY env vars correct — reqwest reads them silently","Add trust-store entries for TLS-intercepting proxies instead of disabling verification"],"tags":["network","download","reqwest","rust","whisper"],"backgroundTag":"network-connectivity-error","analyzedSha":"a2cb62e827da7ef59f65064c97233efb2313878e","analyzedAt":"2026-09-12T11:12:14.152Z","contentChangedAt":"2026-09-12T11:12:14.152Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}