63
63
Field ,
64
64
TypeAdapter ,
65
65
ValidationInfo ,
66
+ field_serializer ,
66
67
field_validator ,
67
68
model_validator ,
68
69
)
@@ -2078,11 +2079,6 @@ class ResponsesResponse(OpenAIBaseModel):
2078
2079
model : str
2079
2080
object : Literal ["response" ] = "response"
2080
2081
output : list [ResponseOutputItem ]
2081
- # These are populated when enable_response_messages is set to True
2082
- # TODO: Currently an issue where content of harmony messages
2083
- # is not available when these are serialized. Metadata is available
2084
- input_messages : Optional [list [ChatCompletionMessageParam ]] = None
2085
- output_messages : Optional [list [ChatCompletionMessageParam ]] = None
2086
2082
parallel_tool_calls : bool
2087
2083
temperature : float
2088
2084
tool_choice : ToolChoice
@@ -2102,6 +2098,49 @@ class ResponsesResponse(OpenAIBaseModel):
2102
2098
usage : Optional [ResponseUsage ] = None
2103
2099
user : Optional [str ] = None
2104
2100
2101
+ # --8<-- [start:responses-extra-params]
2102
+ # These are populated when enable_response_messages is set to True
2103
+ # NOTE: custom serialization is needed
2104
+ # see serialize_input_messages and serialize_output_messages
2105
+ input_messages : Optional [list [ChatCompletionMessageParam ]] = None
2106
+ output_messages : Optional [list [ChatCompletionMessageParam ]] = None
2107
+ # --8<-- [end:responses-extra-params]
2108
+
2109
+ # NOTE: openAI harmony doesn't serialize TextContent properly,
2110
+ # TODO: this fixes for TextContent, but need to verify for tools etc
2111
+ # https://github.com/openai/harmony/issues/78
2112
+ @field_serializer ("output_messages" , when_used = "json" )
2113
+ def serialize_output_messages (self , msgs , _info ):
2114
+ if msgs :
2115
+ serialized = []
2116
+ for m in msgs :
2117
+ if isinstance (m , dict ):
2118
+ serialized .append (m )
2119
+ elif hasattr (m , "__dict__" ):
2120
+ serialized .append (m .to_dict ())
2121
+ else :
2122
+ # fallback to pyandic dump
2123
+ serialized .append (m .model_dump_json ())
2124
+ return serialized
2125
+ return None
2126
+
2127
+ # NOTE: openAI harmony doesn't serialize TextContent properly, this fixes it
2128
+ # https://github.com/openai/harmony/issues/78
2129
+ @field_serializer ("input_messages" , when_used = "json" )
2130
+ def serialize_input_messages (self , msgs , _info ):
2131
+ if msgs :
2132
+ serialized = []
2133
+ for m in msgs :
2134
+ if isinstance (m , dict ):
2135
+ serialized .append (m )
2136
+ elif hasattr (m , "__dict__" ):
2137
+ serialized .append (m .to_dict ())
2138
+ else :
2139
+ # fallback to pyandic dump
2140
+ serialized .append (m .model_dump_json ())
2141
+ return serialized
2142
+ return None
2143
+
2105
2144
@classmethod
2106
2145
def from_request (
2107
2146
cls ,
0 commit comments