Zackriya-Solutions/meetily · error

Download timeout - No data received for 30 seconds

Error message

Download timeout - No data received for 30 seconds

What it means

The per-chunk 30-second timeout expired with zero bytes from the stream: the connection is open but stalled. Unlike the parakeet variant, model status is set to Error (with this message) so the UI can show a retry button; the partial file remains and the next attempt resumes via the Range header.

Source

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

            let chunk = match next_result {
                // Timeout - no data received for 30 seconds
                Err(_) => {
                    log::warn!("Download timeout for {}: no data received for 30 seconds", model_name);
                    let _ = writer.flush().await;

                    // Cleanup: Remove from active downloads
                    let mut active = self.active_downloads.write().await;
                    active.remove(model_name);

                    // Set model status to Error (NOT NotDownloaded) so UI can show retry button
                    {
                        let mut models = self.available_models.write().await;
                        if let Some(model_info) = models.get_mut(model_name) {
                            model_info.status = ModelStatus::Error("Download timeout - No data received for 30 seconds".to_string());
                        }
                    }

                    return Err(anyhow!("Download timeout - No data received for 30 seconds"));
                },
                // Stream ended
                Ok(None) => break,
                // Got chunk result
                Ok(Some(chunk_result)) => {
                    match chunk_result {
                        Ok(c) => c,
                        // Detect error type for better user feedback
                        Err(e) => {
                            log::error!("Download error for {}: {:?}", model_name, e);
                            let _ = writer.flush().await;

                            // Cleanup: Remove from active downloads
                            let mut active = self.active_downloads.write().await;
                            active.remove(model_name);

                            // Categorize error for user-friendly message
                            let error_msg = if e.is_timeout() {

View on GitHub (pinned to 0281737d87)

Solutions

  1. Retry the download — resume continues from the preserved partial file
  2. If it stalls at the same offset repeatedly, delete the partial file and retry fresh
  3. Bypass or diagnose interfering proxies/VPNs (curl the same URL)
  4. For persistently slow links, increase the 30 s chunk timeout rather than retrying in a loop
Defensive patterns

Strategy: retry

Try / catch

let mut attempt = 0;
loop {
    match manager.download_model_detailed(name, cb).await {
        Err(e) if e.to_string().contains("Download timeout") && attempt < 3 => {
            attempt += 1;
            tokio::time::sleep(Duration::from_secs(2u64.pow(attempt))).await; // resumes from partial
        }
        other => break other,
    }
}

Prevention

When it happens

Trigger: CDN stalls the body mid-transfer; proxy/captive portal accepting the connection but never streaming; VPN rekey or Wi-Fi roam freezing the socket; server throttling that pauses after headers.

Common situations: Corporate proxies rate-limiting large GGUF downloads; network switch mid-download; slow origin after long pauses.

Understand the failure class

Related errors


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