Incomplete responses are not handled by `parse_response` when using Structured Output
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 62/100
Research direction
Start in src/openai/lib/_parsing/_responses.py at parse_response and reproduce the incomplete ResponseOutputMessage shown in the issue. Check how existing response parsing handles message status and identify the expected behavior for incomplete structured-output items. Done means the reproduction no longer raises a validation error for an incomplete output, with coverage for that case.
Written by the indexing model from the issue text.
Description
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
I'm using Structured Outputs and have a max token length of 2000 for my finetuned model. When I generate a response, response.output has a length of 8 and the last output is incomplete. When response.output contains an incomplete output, parse_response doesn't handle this and instead raises a ValidationError.
It seems like there should either be a way to constrain the length of response.output or ignore incomplete outputs in parsing, for example:
if output.type == "message" and output.status != "incomplete":
instead of https://github.com/openai/openai-python/blob/main/src/openai/lib/_parsing/_responses.py#L63
To Reproduce
To repro, ensure that response.output contains an incomplete output and then call parse_response with a structured output.
raw_response.output[-1] = ResponseOutputMessage(id='xxx', content=[ResponseOutputText(annotations=[], text='{"a": {"b": 5.0, , "c": {"d": 4.0,', type='output_text', logprobs=[])], role='assistant', status='incomplete', type='message')
parse_response(
text_format=ExpectedResponse,
response=raw_response,
)
Code snippets
client = OpenAI()
resp = client.responses.parse(
model=model,
instructions=prompt,
input=input_text.to_list(),
temperature=temperature,
max_output_tokens=max_tokens
text_format=ExpectedResponse,
)
yields
File "/.venv/lib/python3.13/site-packages/openai/_base_client.py", line 1124, in _process_response
return api_response.parse()
~~~~~~~~~~~~~~~~~~^^
File "/venv/lib/python3.13/site-packages/openai/_response.py", line 325, in parse
parsed = self._options.post_parser(parsed)
File "/.venv/lib/python3.13/site-packages/openai/resources/responses/responses.py", line 936, in parser
return parse_response(
input_tools=tools,
text_format=text_format,
response=raw_response,
)
File "/.venv/lib/python3.13/site-packages/openai/lib/_parsing/_responses.py", line 75, in parse_response
"parsed": parse_text(item.text, text_format=text_format),
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.venv/lib/python3.13/site-packages/openai/lib/_parsing/_responses.py", line 137, in parse_text
return cast(TextFormatT, model_parse_json(text_format, text))
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "/.venv/lib/python3.13/site-packages/openai/_compat.py", line 169, in model_parse_json
return model.model_validate_json(data)
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/.venv/lib/python3.13/site-packages/pydantic/main.py", line 746, in model_validate_json
return cls.__pydantic_validator__.validate_json(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
json_data, strict=strict, context=context, by_alias=by_alias, by_name=by_name
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
pydantic_core._pydantic_core.ValidationError: 1 validation error for ExpectedResponse
Invalid JSON: EOF while parsing an object at line 1 column 234 [type=json_invalid, input_value='{"example_key":...n": {"clarity": 6', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/json_invalid
OS
macOS
Python version
python v3.13
Library version
openai v1.86.0
- Dominant language
- Python
- Stars
- 31.7k
- Forks
- 5.8k
- Avg merge
- 1d 6h
- Merged PRs (30d)
- 96
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from openai/openai-python
-
v4
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
openai/openai-python#3837 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
openai/openai-python#3755 · 2 comments ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
openai/openai-python#3556 · 3 comments ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
openai/openai-python#3402 · 2 comments ·
-
upstream
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
openai/openai-python#3294 · 2 comments ·
All issues in openai/openai-python
Similar issues
-
triage/confirmed
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
agentscope-ai/agentscope#2775 ·
-
comp/desktop P3 type/bug
Difficulty 1/5 Under an hour Newbie friendliness 92/100
NousResearch/hermes-agent#118866 ·
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 90/100
apache/cloudstack#14222 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 82/100