Zackriya-Solutions/meetily · error
{}: {}
Error message
{}: {} What it means
Thrown from the chunk loop of ModelManager::download_model when the reqwest byte stream itself yields an error mid-transfer. The manager classifies the reqwest error into a user-facing prefix ('Connection timeout - Check your internet', 'Connection failed - Check your internet', 'Stream interrupted - Network unstable', or generic 'Download error'), sets the model status to ModelStatus::Error so the UI shows a retry button, and returns the prefix concatenated with the underlying error.
Source
Thrown at frontend/src-tauri/src/summary/summary_engine/model_manager.rs:644
let error_msg = if e.is_timeout() {
"Connection timeout - Check your internet"
} else if e.is_connect() {
"Connection failed - Check your internet"
} else if e.is_body() {
"Stream interrupted - Network unstable"
} else {
"Download error"
};
// 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(error_msg.to_string());
}
}
return Err(anyhow!("{}: {}", error_msg, e));
}
}
}
};
let chunk_len = chunk.len() as u64;
writer
.write_all(&chunk)
.await
.map_err(|e| anyhow!("Error writing to file: {}", e))?;
downloaded += chunk_len;
bytes_since_last_report += chunk_len;
// Calculate progress
let progress_percent = if total_size > 0 {
let exact_percent = (downloaded as f64 / total_size as f64) * 100.0;
exact_percent.min(100.0) as u8
} else {View on GitHub (pinned to 0281737d87)
Solutions
- Check connectivity and retry from the UI - status is ModelStatus::Error, so the retry button is shown and the partial file is kept for resume
- If behind a proxy/VPN/TLS-intercepting firewall, exclude the model host or bypass it for the download
- Verify the model URL is reachable: curl -sIL <model url> should return 200 and a large content-length
- If it keeps failing at the same offset, delete the partial file and restart the download from scratch
Defensive patterns
Strategy: retry
Validate before calling
// Rust caller: pre-flight the model URL before download_model
let resp = client.head(&model_def.url).send().await?;
if !resp.status().is_success() {
// fix network/URL before starting a multi-GB download
return Err(anyhow!("model host returned {}", resp.status()));
} Try / catch
// TypeScript (Tauri invoke)
try {
await invoke('download_summary_model', { modelName });
} catch (e) {
const msg = String(e);
if (msg.startsWith('CANCELLED:')) return; // user cancel, not a failure
if (/Connection|Stream interrupted|Download error/.test(msg)) {
scheduleRetryWithBackoff(modelName); // partial file resumes
} else throw e;
} Prevention
- Run downloads on a stable network; avoid VPN switching or sleep/resume mid-download
- Keep the partial file on failure so retry resumes instead of restarting
- Show the categorized prefix ('Connection timeout - Check your internet', etc.) to users instead of the raw reqwest error
When it happens
Trigger: Calling download_model for a summary (GGUF) model and the HTTP connection to the model host fails mid-body: reqwest error where is_timeout() (connect/read timeout), is_connect() (DNS/TCP/TLS failure), or is_body() (connection reset during transfer) is true. The separate 30-second per-chunk stall timeout has its own message, so this fires only on an actual stream error, not mere slowness.
Common situations: Unstable Wi-Fi or VPN dropping during a multi-GB model download, corporate proxies/firewalls resetting long-lived connections to the model host (e.g. huggingface.co), DNS failure at connect time, laptop sleep/resume interrupting an in-flight download.
Related errors
- Failed to start download for {}: {}
- Retry failed for {}: {}
- File validation failed: {}
- Invalid model file: magic number {:?} doesn't match GGUF/GGM
- Failed to start download: {}
AI-assisted analysis of Zackriya-Solutions/meetily@0281737d87 (2026-08-16).
Data as JSON: /api/errors/9feb32df30b58419.
Report an issue: GitHub.