Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
sylvesterkaczmarek
left a comment
There was a problem hiding this comment.
Went through the ambiguous type: "message" branch. The builder defaults fix the missing discriminator, and the tie-break is consistent: structured user/system/developer messages without phase go to Message, while string/assistant/phase shapes stay EasyInputMessage. Since the ambiguous wire shape is identical either way, pinning one canonical branch in tests seems reasonable. No blocker from me.
|
@dpiet-oai, gentle follow-up: the current response-message round-trip fix has received positive code-review feedback; could you take a look when convenient? Thank you! |
Closes #584.
ResponseInputItem.Message.Builderleft its documented constanttypeunset, so serializing a user-built message omitted the union discriminator and deserializing it produced_unknown.EasyInputMessage.Builderhad the same missing default.This change:
type: "message"phasedeserialize to the narrowerResponseInputItem.MessagevariantEasyInputMessagepreference for string content, assistant roles, phase-bearing messages, missing roles, and unknown/future rolesThe tie-break is necessary because a structured
EasyInputMessageandMessagewith auser,system, ordeveloperrole and nophaseare wire-identical. The new test documentsMessageas the canonical branch for that shape rather than leaving the choice implicit.Validation
./gradlew :openai-java-core:test --tests com.openai.models.responses.ResponseInputItemTest --tests com.openai.models.responses.EasyInputMessageTest :openai-java-core:lintKotlin --console=plainResponseInputItemTest: 73 tests, 0 failuresEasyInputMessageTest: 2 tests, 0 failuresmain: 1,735 / 2,000 custom lines, with budget isolation and budget checks both passinggit diff --checkSecurity review note
This touches Jackson polymorphic deserialization. The added dispatch condition only examines the already-parsed
type,role,contentshape, andphasepresence; it adds no I/O, recursion, payload limit, or credential/logging behavior. Exact known input roles are required before changing the existing ordering, so malformed, missing, and future roles retain the currentEasyInputMessage-first path.AI assistance: I used Codex to help investigate the generated union behavior, draft the implementation and tests, and run validation. I reviewed the resulting code, the ambiguity tradeoff, and the test output.