Responses API with code_interpreter returns empty output_text in v2.20.0 (regression from v2.19.0)

Offen
#2,870 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

  • #2925 von @roli-lpci — ohne Merge geschlossen

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
45/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
python
Bereich
api

Rechercherichtung

Beginnen Sie damit, die bereitgestellte Python-Reproduktion mit openai-python v2.20.0 auszuführen und die Deserialisierung der Responses API-Antwort mit v2.19.0 zu vergleichen. Verfolgen Sie, wie die abgeschlossene Antwort geparst wird, und überprüfen Sie anschließend, dass die Nutzung von code_interpreter die abschließende Nachricht beibehält und den erwarteten Wert von response.output_text wiederherstellt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Bug report

Describe the bug

When using the Responses API with code_interpreter tool and file uploads, response.output_text is always empty in v2.20.0, even though the response status is "completed" and the code_interpreter successfully executes code. The same code works correctly on v2.19.0 and v2.18.0.

To reproduce

Minimal reproduction script:

import json
import os
from openai import OpenAI

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

# Upload a tiny JSON file
data = {"items": [{"name": "A", "value": 10}, {"name": "B", "value": 20}]}
uploaded = client.files.create(
    file=("test_data.json", json.dumps(data).encode()),
    purpose="assistants",
)

try:
    response = client.responses.create(
        model="o4-mini",
        reasoning={"effort": "low"},
        tools=[
            {
                "type": "code_interpreter",
                "container": {"type": "auto", "file_ids": [uploaded.id]},
            },
        ],
        instructions="You are a helpful data analyst. Always reply with a final text answer.",
        input="Read test_data.json and return the sum of the 'value' column. Reply with just the number.",
        max_output_tokens=256,
        timeout=120,
    )

    print(f"Status: {response.status}")
    print(f"output_text: {response.output_text!r}")
    print(f"Output items: {len(response.output)}")
    for i, item in enumerate(response.output):
        print(f"  [{i}] type={item.type}")
finally:
    client.files.delete(uploaded.id)
Expected behavior

response.output_text should contain the model's text answer (e.g. "30"), as it does on v2.19.0.

Actual behavior (v2.20.0)
  • response.status → "completed"
  • response.output_text → "" (empty string)
  • The code_interpreter_call output item shows status="completed" but outputs=null
  • No message output item is present in response.output

Typical output on v2.20.0:

Status: completed
output_text: ''
Output items: 2
  [0] type=reasoning
  [1] type=code_interpreter_call  (status=completed, outputs=null)
Working behavior (v2.19.0 and v2.18.0)
Status: completed
output_text: '30'
Output items: 6
  [0] type=reasoning
  [1] type=code_interpreter_call  (status=completed)
  [2] type=reasoning
  [3] type=code_interpreter_call  (status=completed)
  [4] type=reasoning
  [5] type=message  (status=completed)
Version comparison matrix
openai version o4-mini + effort=low gpt-4.1-mini (no reasoning)
2.18.0 ✅ PASS ✅ PASS
2.19.0 ✅ PASS ✅ PASS
2.20.0 ❌ FAIL (empty output_text) ❌ FAIL (empty output_text)
Environment
  • OS: Ubuntu Linux
  • Python: 3.12
  • openai (broken): 2.20.0
  • openai (working): 2.19.0, 2.18.0
Additional context

The issue affects both reasoning models (o4-mini) and non-reasoning models (gpt-4.1-mini), so it is not specific to reasoning effort settings. The regression appears to be in how the SDK handles the response deserialization — the API-side code_interpreter executes correctly, but the final message output item with the text response is missing from the parsed response on v2.20.0.

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.