zed-industries/zed · error · anyhow::Error

LanguageModelCompletionError::from_provider_response(provide

Error message

LanguageModelCompletionError::from_provider_response(provider_name, None, error.code.or(error.error_type), error.message, None, category)

What it means

Error-path mapping inside the OpenAI streaming response handler: the SSE stream produced an error payload (or error frame), and the code converts it into LanguageModelCompletionError::from_provider_response with the provider name, error code/type, message, and a category. This is a translation of a provider-reported stream error into Zed's unified language-model completion error, not a local failure; provider_name and possibly the rate-limit category are attached so callers can display or retry appropriately.

Source

Thrown at crates/open_ai/src/open_ai.rs:1117

    Ok(events
        .filter_map(move |event| {
            let provider_name = provider_name.clone();
            async move {
                let value = match event {
                    Ok(ChatCompletionStreamEvent::Data(value)) => value,
                    Ok(ChatCompletionStreamEvent::Done) => return None,
                    Err(error) => return Some(Err(anyhow!(error))),
                };
                match serde_json::from_str::<ResponseStreamResult>(value.get()) {
                    Ok(ResponseStreamResult::Ok(response)) => Some(Ok(response)),
                    Ok(ResponseStreamResult::Err { error }) => {
                        let category = completion::response_error_category(
                            error.code.as_deref(),
                            error.error_type.as_deref(),
                            None,
                            &error.message,
                        );
                        Some(Err(anyhow!(
                            language_model_core::LanguageModelCompletionError::from_provider_response(
                                provider_name,
                                None,
                                error.code.or(error.error_type),
                                error.message,
                                None,
                                category,
                            )
                        )))
                    }
                    Err(error) => {
                        log::error!(
                            "Failed to parse OpenAI response into ResponseStreamResult: `{}`\n\
                            Response: `{}`",
                            error,
                            value,
                        );
                        Some(Err(anyhow!(error)))

View on GitHub (pinned to 5a9b9558db)

Solutions

  1. Read the embedded provider message and error code to determine the cause (auth failure, quota exhaustion, overloaded provider, malformed request)
  2. Map the category: for rate-limit or overloaded categories, retry the request with backoff or offer model fallback
  3. Verify the API key and that the request payload (model name, parameters) is accepted by the OpenAI-compatible endpoint
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at crates/open_ai/src/open_ai.rs:1117 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of zed-industries/zed@5a9b9558db (2026-09-05). Data as JSON: /api/errors/475f6dda747ed7e9. Report an issue: GitHub.