@@ -223,4 +223,75 @@ public void UnknownCommandSerializationWorks()
223223 RealtimeUpdate deserializedUpdate = ModelReaderWriter . Read < RealtimeUpdate > ( serializedUnknownCommand ) ;
224224 Assert . That ( deserializedUpdate , Is . Not . Null ) ;
225225 }
226+
227+ [ Test ]
228+ public void ResponseFinishedUpdateCreatedItemsRoundTrip ( )
229+ {
230+ // Create sample items to include in the response
231+ RealtimeItem userMessageItem = RealtimeItem . CreateUserMessage ( [ "Hello, world!" ] ) ;
232+ userMessageItem . Id = "item_123" ;
233+
234+ RealtimeItem functionCallItem = RealtimeItem . CreateFunctionCall ( "test_function" , "call_456" , "{\" param\" :\" value\" }" ) ;
235+ functionCallItem . Id = "item_456" ;
236+
237+ RealtimeItem functionOutputItem = RealtimeItem . CreateFunctionCallOutput ( "call_456" , "Function result" ) ;
238+ functionOutputItem . Id = "item_789" ;
239+
240+ BinaryData serializedResponse = BinaryData . FromString ( $$ """
241+ {
242+ "type": "response.done",
243+ "event_id": "event_123",
244+ "response": {
245+ "id": "response_abc",
246+ "object": "realtime.response",
247+ "status": "completed",
248+ "status_details": null,
249+ "output": [
250+ {{ ModelReaderWriter . Write ( userMessageItem ) }} ,
251+ {{ ModelReaderWriter . Write ( functionCallItem ) }} ,
252+ {{ ModelReaderWriter . Write ( functionOutputItem ) }}
253+ ],
254+ "usage": {
255+ "total_tokens": 100,
256+ "input_tokens": 50,
257+ "output_tokens": 50
258+ }
259+ }
260+ }
261+ """ ) ;
262+
263+ // Deserialize the response
264+ ResponseFinishedUpdate deserializedUpdate = ModelReaderWriter . Read < ResponseFinishedUpdate > ( serializedResponse ) ;
265+
266+ // Validate CreatedItems property
267+ Assert . That ( deserializedUpdate , Is . Not . Null ) ;
268+ Assert . That ( deserializedUpdate . CreatedItems , Is . Not . Null ) ;
269+ Assert . That ( deserializedUpdate . CreatedItems , Has . Count . EqualTo ( 3 ) ) ;
270+
271+ // Validate first item (user message)
272+ Assert . That ( deserializedUpdate . CreatedItems [ 0 ] . Id , Is . EqualTo ( "item_123" ) ) ;
273+ Assert . That ( deserializedUpdate . CreatedItems [ 0 ] . MessageRole , Is . EqualTo ( ConversationMessageRole . User ) ) ;
274+ Assert . That ( deserializedUpdate . CreatedItems [ 0 ] . MessageContentParts , Has . Count . EqualTo ( 1 ) ) ;
275+ Assert . That ( deserializedUpdate . CreatedItems [ 0 ] . MessageContentParts [ 0 ] . Text , Is . EqualTo ( "Hello, world!" ) ) ;
276+
277+ // Validate second item (function call)
278+ Assert . That ( deserializedUpdate . CreatedItems [ 1 ] . Id , Is . EqualTo ( "item_456" ) ) ;
279+ Assert . That ( deserializedUpdate . CreatedItems [ 1 ] . FunctionName , Is . EqualTo ( "test_function" ) ) ;
280+ Assert . That ( deserializedUpdate . CreatedItems [ 1 ] . FunctionCallId , Is . EqualTo ( "call_456" ) ) ;
281+ Assert . That ( deserializedUpdate . CreatedItems [ 1 ] . FunctionArguments , Is . EqualTo ( "{\" param\" :\" value\" }" ) ) ;
282+
283+ // Validate third item (function output) - just verify it was deserialized
284+ Assert . That ( deserializedUpdate . CreatedItems [ 2 ] . Id , Is . EqualTo ( "item_789" ) ) ;
285+
286+ // Serialize back and validate round-trip
287+ BinaryData reserializedResponse = ModelReaderWriter . Write ( deserializedUpdate ) ;
288+ var reserializedString = reserializedResponse . ToString ( ) ;
289+ Assert . That ( reserializedString , Does . Contain ( @"""object"":""realtime.response""" ) ) ;
290+
291+ JsonNode reserializedNode = JsonNode . Parse ( reserializedString ) ;
292+ Assert . That ( reserializedNode [ "response" ] ? [ "output" ] ? . AsArray ( ) ? . Count , Is . EqualTo ( 3 ) ) ;
293+ Assert . That ( reserializedNode [ "response" ] ? [ "output" ] ? [ 0 ] ? [ "id" ] ? . GetValue < string > ( ) , Is . EqualTo ( "item_123" ) ) ;
294+ Assert . That ( reserializedNode [ "response" ] ? [ "output" ] ? [ 1 ] ? [ "id" ] ? . GetValue < string > ( ) , Is . EqualTo ( "item_456" ) ) ;
295+ Assert . That ( reserializedNode [ "response" ] ? [ "output" ] ? [ 2 ] ? [ "id" ] ? . GetValue < string > ( ) , Is . EqualTo ( "item_789" ) ) ;
296+ }
226297}
0 commit comments