Zackriya-Solutions/meetily · error

Sidecar error: {}

Error message

Sidecar error: {}

What it means

The sidecar replied with a top-level Error message instead of a Response — the request was rejected before generation started. This is transport/protocol level: a model the sidecar has not loaded, a request shape the sidecar version does not understand, or a request racing against graceful shutdown of the manager.

Source

Thrown at frontend/src-tauri/src/summary/summary_engine/client.rs:244

        if token.is_cancelled() {
            return Err(anyhow!("Generation cancelled"));
        }
    }

    // Parse response
    let response: Response = serde_json::from_str(&response_json)
        .with_context(|| format!("Failed to parse response: {}", response_json))?;

    match response {
        Response::Response { text, error } => {
            if let Some(err_msg) = error {
                Err(anyhow!("Generation failed: {}", err_msg))
            } else {
                log::info!("Generation completed: {} chars", text.len());
                Ok(text)
            }
        }
        Response::Error { message } => Err(anyhow!("Sidecar error: {}", message)),
    }
}

/// Shutdown the global sidecar (graceful cleanup)
/// Detaches the current manager and spawns a background task to drain active requests
pub async fn shutdown_sidecar_gracefully() -> Result<()> {
    let manager_opt = {
        let mut global_manager = SIDECAR_MANAGER.lock().await;
        global_manager.take()
    };

    if let Some(manager) = manager_opt {
        log::info!("Detaching sidecar manager for graceful shutdown");

        // Spawn background task to wait for active requests and then kill
        tokio::spawn(async move {
            if let Err(e) = manager.shutdown_gracefully().await {
                log::error!("Error during graceful shutdown: {}", e);

View on GitHub (pinned to 0281737d87)

Solutions

  1. Retry once after confirming the model is fully downloaded and the sidecar initialized with it
  2. Restart the app (or force sidecar re-init) so manager and sidecar versions match
  3. Check sidecar logs in the terminal/Developer console for the exact rejection reason
  4. Check app lifecycle state before issuing generation to avoid firing during shutdown
Defensive patterns

Strategy: fallback

Try / catch

match generate_builtin(...).await {
    Err(e) if e.to_string().starts_with("Sidecar error") => {
        // Request rejected pre-inference: reset sidecar, or fall back to an external provider
        shutdown_sidecar_gracefully().await.ok();
        generate_builtin(...).await // re-initializes a fresh sidecar
    }
    other => other,
}

Prevention

When it happens

Trigger: Sending a model name the sidecar has not loaded; version skew between the manager and the sidecar binary after an app update; issuing a request during shutdown_sidecar_gracefully while active requests are being drained; the sidecar restarting underneath the manager.

Common situations: App update replaced the sidecar binary while an old manager instance persists; user closes the window as generation fires; race between download completion and sidecar model registration.

Related errors


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