openai / openai/openai-python

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

Open
#2,870 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
31.6k
Forks
5.7k
Avg merge
1d 6h
Merged PRs (30d)
96

Description

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.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by running the provided Python reproduction against openai-python v2.20.0 and comparing its Responses API response deserialization with v2.19.0. Trace how the completed response is parsed, then verify that code_interpreter usage preserves the final message and restores the expected response.output_text value.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.