Switching to gpt5.4-nano results in 0% cache hit rate

While running a test of 20 back-to-back identical prompts, with ~1450 token system prompt prefix, I am consistently getting > 90% cache hit rate when using gpt-5.4-mini. Simply switching the model to gpt-5.4-nano and running the same test always returns a 0% hit rate even after multiple runs.

I am not aware of any difference between the prompt caching capabilities of these models so I do not understand why switching to 5.4-nano would result in a 0% cache hit rate.

Hey, thanks for the detailed repro. Could you run the same test again and share 2–3 x-request-id values from the GPT-5.4 Nano responses? Ideally, these should be from requests made within the last three days. One GPT-5.4 Mini request from the same test would be really useful as a comparison too. Those IDs will let us trace the exact requests, investigate the cache behavior more deeply, and give our engineering team concrete examples to review if needed. Please don’t share an API key or any sensitive prompt content. Thank you!

Thanks for following up on this three-month issue.

Where reproduction yourself takes under a minute, and my reproduction was one minute ago.

Here is what receiving no cache discount looks like on gpt-5.4-nano calls 30 seconds apart - now with the default backport of 24h policy against prior “in-memory” models:

Note the usage report in the assistant header bar - more than enough input to store, no cached tokens in the usage report

(ignore the poor quality of the excessively instructed “improve language” task not treating input messages as discrete input->output cases, I guess…).

x-request-id: req_055e2a935d02408fa37fb0ffa1e2d383

Full API response object
{
  "id": "resp_0ddcbb620d1c0713016a54fa4e0b508199bb8ad393a931a89f",
  "object": "response",
  "created_at": 1783953998,
  "status": "completed",
  "background": false,
  "billing": {
    "payer": "openai"
  },
  "completed_at": 1783953999,
  "error": null,
  "frequency_penalty": 0,
  "incomplete_details": null,
  "instructions": null,
  "max_output_tokens": 16384,
  "max_tool_calls": null,
  "model": "gpt-5.4-nano-2026-03-17",
  "moderation": null,
  "output": [
    {
      "id": "msg_0ddcbb620d1c0713016a54fa4e7cd481998cc061b16181474e",
      "type": "message",
      "status": "completed",
      "content": [
        {
          "type": "output_text",
          "annotations": [],
          "logprobs": [],
          "text": "Please run the same test again. Please share 2–3 `x-request-id` values from GPT-5.4 Nano responses. Ideally, those requests should be from the last three days.\n\nAlso, please share one GPT-5.4 Mini `x-request-id` from the same test as a comparison. These `x-request-id` values will help us trace the exact requests. They will also help us investigate cache behavior more deeply. Finally, they will give our engineering team concrete examples to review if needed."
        }
      ],
      "phase": "final_answer",
      "role": "assistant"
    }
  ],
  "parallel_tool_calls": true,
  "presence_penalty": 0,
  "previous_response_id": null,
  "prompt_cache_key": "myplayground",
  "prompt_cache_retention": "24h",
  "reasoning": {
    "context": "current_turn",
    "effort": "low",
    "mode": "standard",
    "summary": null
  },
  "safety_identifier": null,
  "service_tier": "default",
  "store": false,
  "temperature": 1,
  "text": {
    "format": {
      "type": "text"
    },
    "verbosity": "low"
  },
  "tool_choice": "auto",
  "tool_usage": {
    "image_gen": {
      "input_tokens": 0,
      "input_tokens_details": {
        "image_tokens": 0,
        "text_tokens": 0
      },
      "output_tokens": 0,
      "output_tokens_details": {
        "image_tokens": 0,
        "text_tokens": 0
      },
      "total_tokens": 0
    },
    "web_search": {
      "num_requests": 0
    }
  },
  "tools": [],
  "top_logprobs": 0,
  "top_p": 0.98,
  "truncation": "disabled",
  "usage": {
    "input_tokens": 1650,
    "input_tokens_details": {
      "cache_write_tokens": 0,
      "cached_tokens": 0
    },
    "output_tokens": 109,
    "output_tokens_details": {
      "reasoning_tokens": 0
    },
    "total_tokens": 1759
  },
  "user": null,
  "metadata": {}

}


The request for information is for a comparative “mini” call, and its request ID?

Cache discount delivery. Although an under-performing 1280/1544. The uncached/unstored 264 tokens being 2x greater than the granularity expected before.

x-request-id: req_040d258d86434dcaadb344d2f3bb5330

Thanks for the additional details. We have flagged this with our engineering team and will provide an update soon.

I’m having this problem too. I’m getting 0% cache hits with GPT-5.4-nano, but the same prompts give cache hits with GPT-5.4-mini.

I reproduced this today, July 22, 2026, using the standard OpenAI API endpoint and Python SDK 2.33.0.

Test configuration:

  • Endpoint: v1/chat/completions
  • Same API project/key for both models
  • Synthetic prompt only—no production prompt, user data, or sensitive content
  • 1,828 prompt tokens
  • Three fully identical requests per model, approximately three seconds apart
  • Same prompt_cache_key across each model’s three calls
  • temperature: 0
  • max_completion_tokens: 8
  • prompt_cache_retention omitted, using the default behavior

GPT-5.4 Nano

All three identical requests returned prompt_tokens_details.cached_tokens: 0.

  1. First request/cold miss:
    req_5f67f4b4268346f38704996955f996f0
    — 1,828 prompt tokens, 0 cached tokens

  2. Identical follow-up:
    req_9d595b8c883e4b89a7e536ba9054d2af
    — 1,828 prompt tokens, 0 cached tokens

  3. Identical follow-up:
    req_9906338d43844a68bcb4a2da05836ce1
    — 1,828 prompt tokens, 0 cached tokens

GPT-5.4 Mini control

The identical test worked as expected with Mini: the first call was a miss, while calls two and three each reported 1,280 cached tokens.

Mini cache-hit request:
req_32eb98f9ab6f4a9da1e400fa500a39b1
— 1,828 prompt tokens, 1,280 cached tokens

I also ran a separate shared-prefix test with approximately 1,800 stable synthetic tokens followed by different short suffixes. Nano again returned 0, 0, 0 cached tokens, while Mini returned 0, 1280, 1280.

Since the account, API endpoint, SDK, prompt length, cache-key strategy, and synthetic prompt structure were held constant, this appears specific to GPT-5.4 Nano or its model-specific cache/reporting path. I’m happy to provide additional recent request IDs if useful.

Hey, thanks for flagging this and for sharing the detailed comparisons! We checked with the team, and this is expected for GPT‑5.4 Nano. Its prompt caching works at a different granularity than GPT‑5.4 Mini, so prompts over the general 1,024-token minimum can still show cached_tokens: 0 until there’s a longer identical prefix. If your workload depends on caching shorter repeated prefixes, GPT‑5.4 Mini is the better fit. We’ll also update our prompt caching documentation to make this difference clearer. Thanks again for bringing this to our attention!