fix: register discriminator for ChatCompletionNewParamsResponseFormatUnion #550
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem:
In the current OpenAI Go SDK, the inline union ChatCompletionNewParamsResponseFormatUnion has a deserialization bug:
The union contains three inline structs: OfText, OfJSONSchema, and OfJSONObject, each of which has a type field.
During JSON deserialization, Go’s encoding/json maps the JSON data to the first matching inline struct (OfText), causing OfJSONSchema and OfJSONObject to be ignored.
As a result, when a user sends response_format of type "json_schema" or "json_object", the SDK fails to parse it correctly.
Solution:
Register a union discriminator so that apijson knows how to dispatch JSON to the correct inline struct based on the type field.
Add the following code in the init() function:
Effect:
JSON is automatically deserialized to the correct union struct based on type.
Fixes the issue where response_format of "json_schema" or "json_object" could not be parsed.
Eliminates the need for users to manually patch response_format handling.
Compatibility:
Backward compatible: text type behavior remains unchanged.
Does not affect other union types.