Hi again ![]()
We’ve noticed an issue when using 5.4. The Responses API returns a 500 Internal Server Error when a request includes all three of:
tool_search(client-mode)web_search(built-in)- A
functiontool withdefer_loading: truenamed"web"
Renaming the function tool to anything other than "web" (e.g. "web_browsing") resolves the issue (our current workaround!). The collision appears to be between the function tool name "web" and the web_search built-in tool’s internal namespace.
Reproduction Steps
Tested with gpt-5.4 via the OpenAI Ruby gem (ruby-openai v8.3.0). The bug is deterministic.
require "openai"
client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"])
# Client-mode tool_search (required when using defer_loading)
tool_search = {
type: "tool_search",
execution: "client",
description: "Search for and load tools needed for the current task.",
parameters: {
type: "object",
properties: { goal: { type: "string" } },
required: ["goal"],
additionalProperties: false
}
}
web_search = { type: "web_search" }
# A deferred function tool named "web" — this name causes the collision
web_tool = {
type: "function",
name: "web",
description: "Browse the web to find information",
parameters: {
type: "object",
properties: { url: { type: "string" } },
required: ["url"]
},
defer_loading: true
}
regular_tools = %w[get_time save_note send_message].map do |name|
{
type: "function",
name: name,
description: "Perform #{name.tr('_', ' ')} operation",
parameters: { type: "object", properties: {} }
}
end
# This returns 500:
response = client.responses.create(parameters: {
model: "gpt-5.4",
input: [{ role: "user", content: "Hello" }],
tools: regular_tools + [tool_search, web_tool, web_search],
tool_choice: "auto",
store: false
})
Isolation Matrix
tool_search |
Deferred "web" |
web_search |
Result |
|---|---|---|---|
| no | no | yes | OK |
| yes | yes | no | OK |
| yes | yes | yes | 500 Server Error |
| yes | "web_browsing" |
yes | OK |
The 500 requires all three components. Renaming the function tool from "web" to anything else resolves it, confirming a naming collision rather than a general incompatibility.
Expected Behaviour
The API should either:
- Accept a function tool named
"web"without conflicting with theweb_searchbuilt-in, or - Return a 400 validation error explaining the naming conflict
A 500 Internal Server Error should not occur for a valid tool configuration.
Environment
- Model:
gpt-5.4(also reproducible ongpt-5.2) - API: Responses API (
/v1/responses) - Client:
ruby-openaigem v8.3.0 - Date observed: 2026-03-06
- Reproducible: 100% deterministic
- Sample failing request ID:
req_7c913ace1827465dab2ff47b02e14585
Thanks!