{"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":971,"sourceCode":"        if !self.models_dir.exists() {\n            fs::create_dir_all(&self.models_dir).await\n                .map_err(|e| anyhow!(\"Failed to create models directory: {}\", e))?;\n        }\n        \n        // Update model status to downloading\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        log::info!(\"Creating HTTP client and starting request...\");\n        let client = Client::new();\n        \n        log::info!(\"Sending GET request to: {}\", model_url);\n        let response = client.get(model_url).send().await\n            .map_err(|e| anyhow!(\"Failed to start download: {}\", e))?;\n        \n        log::info!(\"Received response with status: {}\", response.status());\n        if !response.status().is_success() {\n            // Remove from active downloads on error\n            let mut active = self.active_downloads.write().await;\n            active.remove(model_name);\n            return Err(anyhow!(\"Download failed with status: {}\", response.status()));\n        }\n        \n        let total_size = response.content_length().unwrap_or(0);\n        log::info!(\"Response successful, content length: {} bytes ({:.1} MB)\", total_size, total_size as f64 / (1024.0 * 1024.0));\n        \n        if total_size == 0 {\n            log::warn!(\"Content length is 0 or unknown - download may not show accurate progress\");\n        }\n        \n        let mut file = fs::File::create(&file_path).await\n            .map_err(|e| anyhow!(\"Failed to create file: {}\", e))?;","sourceCodeStart":953,"sourceCodeEnd":989,"githubUrl":"https://github.com/Zackriya-Solutions/meetily/blob/0281737d87d26352fb0adc78c8c0975f691b23d1/frontend/src-tauri/src/whisper_engine/whisper_engine.rs#L953-L989","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-failure","analyzedSha":"0281737d87d26352fb0adc78c8c0975f691b23d1","analyzedAt":"2026-08-16T20:57:52.567Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}