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

OpenAI Chat Completions does not support custom tools; use R

Error message

OpenAI Chat Completions does not support custom tools; use Responses API instead

What it means

Capability guard in into_open_ai: the request includes a tool with LanguageModelRequestToolInput::Custom, which the Chat Completions API cannot express, so conversion refuses up front rather than sending a request OpenAI would reject.

Source

Thrown at crates/open_ai/src/completion.rs:65

    MaxCompletionTokens,
    MaxTokens,
}

pub fn into_open_ai(
    request: LanguageModelRequest,
    model_id: &str,
    supports_parallel_tool_calls: bool,
    supports_prompt_cache_key: bool,
    max_output_tokens: Option<u64>,
    max_tokens_parameter: ChatCompletionMaxTokensParameter,
    reasoning_effort: Option<ReasoningEffort>,
    interleaved_reasoning: bool,
) -> Result<crate::Request> {
    if request
        .tools
        .iter()
        .any(|tool| matches!(tool.input, LanguageModelRequestToolInput::Custom { .. }))
    {
        return Err(anyhow!(
            "OpenAI Chat Completions does not support custom tools; use Responses API instead"
        ));
    }

    let stream = !model_id.starts_with("o1-");
    let service_tier = service_tier_for(request.speed);

    let mut messages = Vec::new();
    let mut current_reasoning: Option<String> = None;
    for message in request.messages {
        let reasoning_details = interleaved_reasoning
            .then(|| message.reasoning_details.clone())
            .flatten();
        for content in message.content {
            match content {
                MessageContent::Thinking { text, .. } if interleaved_reasoning => {
                    current_reasoning.get_or_insert_default().push_str(&text);

View on GitHub (pinned to 5a9b9558db)

Solutions

  1. Use OpenAI's Responses API path for custom tools
  2. Disable custom tools for Chat Completions models
Defensive patterns

Strategy: validation

When it happens

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

Common situations: See trigger scenarios.


AI-assisted analysis of zed-industries/zed@5a9b9558db (2026-08-20). Data as JSON: /api/errors/19ec1edee47a3dd7. Report an issue: GitHub.