GPT-4.1 sometimes says “One moment…” / “Hang tight…” but never calls a tool

Hi all,

I’m running into a strange behavior with the gpt-4.1-2025-04-14 model and wanted to check if others have seen this too.

We use both the Chat Completions API and the Responses API, with ~10 different tools configured. Most of the time tool invocation works fine. However, in some cases, the model produces text that indicates it’s about to call a tool (e.g., “One moment please!”, “Hang tight…”, “I’ll take care of that for you”), but no tool call is actually emitted in the response.

Here’s an example of what we receive:

I’ll now look for a way to automatically restore your M drive. If I can, I’ll do it for you; otherwise, I’ll guide you through a quick fix. One moment please!

But at this point, no tool call appears in the API response. It just ends there as plain text with finish_reason: stop.

Some observations:

  • Seems to happen more frequently with certain inputs.

  • Occurs intermittently — not every request.

  • Happens in both APIs (chat.completions and responses).

  • I can also reproduce this directly in the OpenAI Playground, so it’s not just my integration.

  • Tools are otherwise working correctly when the model does decide to invoke them.

Questions for the community:

  • Has anyone else encountered this behavior with GPT-4.1 / 4o?

  • Any known workarounds (e.g., forcing tool_choice: required, adjusting prompt style, etc.)?

  • Could this be a bug in tool invocation for GPT-4.1?

Thanks in advance for any insights!

Facing the same issue, works fine most of the time but in very few cases says, checking but doesnt do a tool call at all.

This is a big problem we also face.

This can be improved a bit, as long as functions are not actually breaking sometimes.

  • Use tool language somewhere that mirrors how you would prompt to inspire such a preamble to be written on models that normally don’t do it. Best following is in the function description itself.

By understanding how the functions are placed in AI context, you can modify the first function and give a description that can be interpreted by AI as global to functions.

"tools": [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "# Tools - IMPORTANT: You must automatically send to a function tool recipient *in the same response* if you announce you will use one!.\n\n"`get_weather` - Retrieve current weather for a city. ", ...

Could you share your workaround in How to increase reliability? Let's compile best practices?

You can test what works for you to improve reliability and call it your own; I only provide an example of the type of language AI will respond to.

Thanks for your response. I’ll try that and provide an update here.