Zackriya-Solutions/meetily · error

Failed to start download: {}

Error message

Failed to start download: {}

What it means

client.get(download_url).send() failed before any response arrived: DNS resolution failure, connection refused/timeout, or TLS handshake error while contacting the model host (typically HuggingFace). The URL comes from the model definition, so an unreachable URL also lands here.

Source

Thrown at frontend/src-tauri/src/summary/summary_engine/model_manager.rs:495

            .connect_timeout(Duration::from_secs(30))
            .build()
            .map_err(|e| anyhow!("Failed to create HTTP client: {}", e))?;

        // Build request with Range header if resuming
        let mut request = client.get(&model_def.download_url);
        if existing_size > 0 {
            log::info!(
                "Resuming download from byte {} ({:.1} MB)",
                existing_size,
                existing_size as f64 / (1024.0 * 1024.0)
            );
            request = request.header("Range", format!("bytes={}-", existing_size));
        }

        let response = request
            .send()
            .await
            .map_err(|e| anyhow!("Failed to start download: {}", e))?;

        // Check response status - 200 OK (full download) or 206 Partial Content (resume)
        let (total_size, resuming) = if response.status() == reqwest::StatusCode::PARTIAL_CONTENT {
            // Server supports resume - total size = existing + remaining
            let remaining = response.content_length().unwrap_or(0);
            log::info!("Server supports resume, {} MB remaining", remaining / (1024 * 1024));
            (existing_size + remaining, true)
        } else if response.status().is_success() {
            // Server doesn't support resume or fresh download
            if existing_size > 0 {
                log::warn!("Server doesn't support resume, starting fresh download");
            }
            (response.content_length().unwrap_or(0), false)
        } else {
            let mut active = self.active_downloads.write().await;
            active.remove(model_name);
            return Err(anyhow!("Download failed with status: {}", response.status()));
        };

View on GitHub (pinned to 0281737d87)

Solutions

  1. Verify connectivity to the exact download_url from the same machine (curl -I)
  2. Fix DNS/proxy configuration or system CA store, then retry
  3. Retry once the network is restored — partial files resume automatically
  4. Distinguish from HTTP-status errors: if the host answers with 404/403 that is a different failure (download_url is stale)
Defensive patterns

Strategy: retry

Validate before calling

// Cheap reachability probe before the long download
let probe = reqwest::Client::new().head(&model_def.download_url).send().await;
match probe {
    Ok(r) if r.status().is_success() || r.status().as_u16() == 206 => { /* proceed */ }
    Ok(r) => return Err(anyhow!("host answered {} — URL may be stale", r.status())),
    Err(e) => return Err(anyhow!("host unreachable: {}", e)),
}

Try / catch

let mut attempt = 0;
loop {
    match manager.download_model_detailed(name, cb).await {
        Err(e) if e.to_string().starts_with("Failed to start download") && attempt < 3 => {
            attempt += 1;
            tokio::time::sleep(Duration::from_secs(2u64.pow(attempt))).await;
        }
        other => break other,
    }
}

Prevention

When it happens

Trigger: Machine offline; DNS cannot resolve huggingface.co; firewall blocking outbound HTTPS; the model's download_url changed or the host is down; proxy rejecting the CONNECT.

Common situations: App started in airplane mode; restrictive corporate network; HuggingFace outage; authenticated proxies in enterprise environments.

Related errors


AI-assisted analysis of Zackriya-Solutions/meetily@0281737d87 (2026-08-16). Data as JSON: /api/errors/c721f304a49eb1ac. Report an issue: GitHub.