`prompt_cache_options.ttl` is typed `Literal["30m"]` but the API accepts and returns `"12h"`; `cache_write_tokens_details` is untyped

Offen Anfängerfreundlich
#4,156 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
78/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
python

Rechercherichtung

Lies src/openai/types/responses/response_create_params.py und src/openai/types/responses/response.py für die TTL-Typen von Anfrage und Antwort und suche dann nach InputTokensDetails und den zugehörigen Tests. Aktualisiere die Typen und den Docstring so, dass sie den dokumentierten Werten 30m und 12h entsprechen, und füge die typisierten Details zu Cache-Schreibtokens hinzu. Fertig ist die Änderung, wenn die Typprüfung die gemeldeten Anfrage- und Antwortfelder akzeptiert und Tests beide TTLs sowie die Token-Detailfelder abdecken.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Confirm this is an issue with the Python library and not an underlying OpenAI API
  • This is an issue with the Python library
Describe the bug

The prompt caching guide documents prompt_cache_options.ttl as "30m" or "12h" for the Responses API (12-hour caching, changelog 2026-10-20), and the API accepts "12h". The SDK types do not:

  1. Request: PromptCacheOptions.ttl in src/openai/types/responses/response_create_params.py is Literal["30m"], so mypy and pyright reject a request that succeeds at runtime. The docstring also still says 30m "is currently the only supported value".
  2. Response: Response.prompt_cache_options.ttl in src/openai/types/responses/response.py is also Literal["30m"], but the API returns "12h".
  3. Usage: the API returns usage.input_tokens_details.cache_write_tokens_details (ttl_30m_tokens, ttl_12h_tokens), but InputTokensDetails has no such field, so it is only reachable as an untyped dict.

Draft PR #4144 adds "12h" to prompt_cache_breakpoint.ttl, but as of its current head it leaves the request-level PromptCacheOptions.ttl as Literal["30m"] and does not add cache_write_tokens_details.

Expected

  • PromptCacheOptions.ttl: Literal["30m", "12h"] (request and response)
  • a typed cache_write_tokens_details with ttl_30m_tokens / ttl_12h_tokens
To Reproduce
  1. Run the snippet below. The request succeeds and the response echoes ttl='12h'.
  2. Type-check it with pyright:
    repro.py:7:26 - error: Argument of type "dict[str, str]" cannot be assigned to parameter "prompt_cache_options" of type "PromptCacheOptions | Omit" in function "create"
        Type "dict[str, str]" is not assignable to type "PromptCacheOptions | Omit"
          "dict[str, str]" is not assignable to "PromptCacheOptions"
          "dict[str, str]" is not assignable to "Omit" (reportArgumentType)
    repro.py:15:36 - error: Cannot access attribute "cache_write_tokens_details" for class "InputTokensDetails"
        Attribute "cache_write_tokens_details" is unknown (reportAttributeAccessIssue)
    
    mypy 2.4.0 reports error: No overload variant of "create" of "Responses" matches argument types "str", "bool", "dict[str, str]", "list[dict[str, str]]" [call-overload] on the same call.
  3. Change "12h" to "30m": the first error goes away. The cache_write_tokens_details error remains ("InputTokensDetails" has no attribute "cache_write_tokens_details"; maybe "cache_write_tokens"? [attr-defined]).
Code snippets
from openai import OpenAI

client = OpenAI()
r = client.responses.create(
    model="gpt-6-luna",
    store=False,
    prompt_cache_options={"ttl": "12h"},
    input=[
        {"role": "developer", "content": "<prefix of 1,024+ tokens>"},
        {"role": "user", "content": "hi"},
    ],
)
print(r.prompt_cache_options)
# PromptCacheOptions(mode='implicit', ttl='12h', comparison_response_id=None)
assert r.usage is not None
print(r.usage.input_tokens_details.cache_write_tokens_details)
# {'ttl_12h_tokens': 3465, 'ttl_30m_tokens': 0}  <- plain dict
OS

macOS 15.7.9

Python version

Python v3.12.11

Library version

openai v3.36.1

Vorherrschende Sprache
Python
Sterne
32k
Forks
7.3k
Ø Merge
16 Std. 38 Min.
Gemergte PRs (30 T.)
170

Entwicklungsumgebung

In Codespaces öffnen

Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus openai/openai-python

Alle Issues in openai/openai-python

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.