GPT-5.4 Release, weird tool behaviour

I’m currently building an application using the Responses API.
I’m using GPT-5.2
Since the GPT-5.4 release, I’ve been experiencing issues when enabling our internal function tools alongside the built-in tools ("type": "shell", "type": "apply_patch", and "type": "web_search").

Before GPT-5.4, everything worked as expected:

  • The model would correctly invoke functional tools when needed.

  • It would also use apply_patch and shell appropriately when the task required them.

However, after the release, the model appears to ignore the built-in tools whenever custom function tools are present in the tools array.

Observed Behaviors

  1. Shell tool ignored when function tools are present
    When functional tools such as "create_file_with_fs" are included in the tools array, the shell tool is not used.

    • The shell commands array comes back empty.

    • If I remove the custom function tools, shell works as intended again.

  2. Refusal to use shell tool
    When I explicitly ask the model to “Run a simple shell command”, it responds by saying it cannot run shell commands.
    Instead, it attempts to call unrelated function tools.

  3. apply_patch tool not invoked
    A similar issue occurs with the apply_patch tool:

    • When function tools are present, the model does not invoke apply_patch.

    • Instead, it returns the patch as plain text.

    • If I explicitly instruct it to use apply_patch, it responds with:

      “I do not have such a tool.”

It seems that when custom function tools are included in the tools array, GPT-5.4 deprioritizes or completely ignores the built-in tools (shell, apply_patch, web_search). This behavior differs from previous versions, where both tool types coexisted without issue.

Has anyone else experienced this?
Is there a change in tool prioritization or invocation logic in GPT-5.4 that could explain this behavior?

Any insights would be greatly appreciated.

This is an example of my tools array:

"tools": [
        {
            "type": "web_search"
        },
        {
            "environment": {
                "type": "local"
            },
            "type": "shell"
        },
        {
            "type": "apply_patch"
        },
        {
            "name": "create_file_with_fs",
            "description": "Updated description",
            "parameters": {
                "type": "object",
                "properties": {
                    "reason": {
                        "type": "string",
                        "description": "Brief description of why this operation is being performed (e.g., 'Creating config file', 'Backing up data', 'Updating dependencies')"
                    },
                    "content": {
                        "type": "string",
                        "description": "The content to write to the file. For text files: Plain text, code, JSON, HTML, or any string content. For binary files: Base64-encoded string when using encoding='base64'. Examples: - Text: 'Hello World' with encoding='utf8' - Image: 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB...' with encoding='base64' - Binary data: Use base64 encoding for images, documents, executables, etc."
                    },
                    "encoding": {
                        "type": "string",
                        "description": "The file encoding to use when writing the file. - 'utf8': For text files (default) - code, JSON, HTML, plain text - 'base64': For binary files - images, PDFs, executables, media files - 'ascii': For simple text files with ASCII characters only - 'binary': For raw binary data (advanced use) - 'hex': For hexadecimal encoded data (advanced use)"
                    },
                    "filePath": {
                        "type": "string",
                        "description": "The absolute path where the file should be created. Must be a complete path including drive letter on Windows (e.g., 'C:\\Users\\username\\Documents\\file.txt') or full path on Unix systems (e.g., '/home/username/documents/file.txt'). Include the filename and extension."
                    },
                    "createDirectories": {
                        "type": "boolean",
                        "description": "Whether to automatically create parent directories if they don't exist. When true, will create the full directory path recursively (similar to mkdir -p)."
                    }
                },
                "required": [
                    "filePath",
                    "content",
                    "reason",
                    "createDirectories",
                    "encoding"
                ],
                "additionalProperties": false
            },
            "strict": true,
            "type": "function"
        }
}
10 Likes

Similar here. The model refuse to use built in tool “apply_patch” for some reasons saying that’s not registered.

1 Like

Let me add that web_search actually works with functional tools, apply_patch and shell do not. In the meantime, I switched to functional tools to apply patches and execute shell commands.

Need an update for this fix @nikunj @OpenAI_Support

2 Likes

Upload File Parts is broken, too.

Same here @OpenAI_Support

I’m also seeing this today intermittently. It worked great all day last Friday (3 days ago).

As of today, the bug seems fixed: i.e. built-in shell tools works even when mixed with custom function tools

We’ve fixed the bug yesterday.

2 Likes

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.