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
- Use OpenAI's Responses API path for custom tools
- 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.