Skip to content

Handle bare dict types in construct_type#3383

Open
Muhtasim-Munif-Fahim wants to merge 4 commits into
openai:mainfrom
Muhtasim-Munif-Fahim:codex/openai-python-bare-dict-construct-type
Open

Handle bare dict types in construct_type#3383
Muhtasim-Munif-Fahim wants to merge 4 commits into
openai:mainfrom
Muhtasim-Munif-Fahim:codex/openai-python-bare-dict-construct-type

Conversation

@Muhtasim-Munif-Fahim

Copy link
Copy Markdown

Fixes #3341.

Summary

  • treat bare dict as a passthrough in construct_type
  • preserve recursive construction for parameterized dict types
  • add regression coverage for both bare and typed dictionary inputs

Testing

  • $env:PYTHONPATH='src'; python -m pytest tests/test_models.py -k "bare_dictionary_passthrough or raw_dictionary" -q

@Muhtasim-Munif-Fahim Muhtasim-Munif-Fahim requested a review from a team as a code owner June 8, 2026 11:34
Copilot AI review requested due to automatic review settings June 8, 2026 11:34

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

This PR improves handling of “bare” dict type annotations in transform/construct logic and adds support for an Error.message field in realtime response status models, with corresponding tests.

Changes:

  • Treat dict (without type parameters) as a passthrough in _transform_recursive, _async_transform_recursive, and construct_type.
  • Add message to realtime Error models (beta + non-beta) and validate via a new test.
  • Add regression tests covering bare-dict behavior in transform and model construction.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tests/test_transform.py Adds async+sync coverage for TypedDict fields annotated as bare dict.
tests/test_models.py Adds coverage for construct_type(..., type_=dict) passthrough and typed dict construction.
tests/lib/test_realtime_response_status.py New test validating Error.message deserialization for beta and non-beta realtime status models.
src/openai/types/realtime/realtime_response_status.py Adds optional message field to realtime Error model.
src/openai/types/beta/realtime/realtime_response_status.py Adds optional message field to beta realtime Error model.
src/openai/_utils/_transform.py Avoids get_args(...)[1] crash for bare dict annotations by early returning.
src/openai/_models.py Avoids unpacking crash for bare dict in construct_type by early returning.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 351 to 356
if origin == dict and is_mapping(data):
items_type = get_args(stripped_type)[1]
args = get_args(stripped_type)
if len(args) < 2:
return data
items_type = args[1]
return {key: _transform_recursive(value, annotation=items_type) for key, value in data.items()}
Comment on lines +6 to +7
from openai.types.beta.realtime import RealtimeResponseStatus as BetaRealtimeResponseStatus
from openai.types.realtime import RealtimeResponseStatus as RealtimeResponseStatus
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

BUG: construct_type() crashes with ValueError on bare dict annotation (no type args)

3 participants