Responses API with code_interpreter returns empty output_text in v2.20.0 (regression from v2.19.0)
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
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_calloutput item showsstatus="completed"butoutputs=null - No
messageoutput item is present inresponse.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
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus openai/openai-python
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
openai/openai-python#4156 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
openai/openai-python#4022 · 23 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
fix(auth): SubjectTokenProviderError drops response and duplicates error message in workload identity providersEvtl. vergeben @mohmedmm hat das vor 31 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
openai/openai-python#4017 · 5 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Define + export `ServiceTiers` string literalEvtl. vergeben @SparshGarg999 hat das vor 80 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
openai/openai-python#3556 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Empty OPENAI_BASE_URL prevents fallback to default API endpointEvtl. vergeben @Sehastrajit-S hat das vor 46 Tagen übernommen. Offenbug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
openai/openai-python#2927 · 7 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in openai/openai-python
Ähnliche Issues
-
question
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
conda-forge/vc-feedstock#132 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
limitlessprojects/Go-Hybrid#3342 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
UKGovernmentBEIS/inspect_ai#6268 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
LSSTDESC/rail_sompz#42 ·
-
All tests fail with 'EXITED with status 3' on pytest 9.2.0 (TestReport._id is not marshallable)Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
pytest-dev/pytest-forked#113 ·