88using System . Runtime . CompilerServices ;
99using System . Text ;
1010using System . Text . Json ;
11+ using Elastic . Documentation . Api . Core ;
1112using Elastic . Documentation . Api . Core . AskAi ;
1213using Microsoft . Extensions . Logging ;
1314
@@ -144,6 +145,7 @@ private async Task ProcessStreamAsync(PipeReader reader, PipeWriter writer, Acti
144145 {
145146 using var activity = StreamTransformerActivitySource . StartActivity ( "transform_stream" ) ;
146147 var result = new StreamProcessingResult ( ) ;
148+ List < MessagePart > outputMessageParts = [ ] ;
147149 await foreach ( var sseEvent in ParseSseEventsAsync ( reader , cancellationToken ) )
148150 {
149151 AskAiEvent ? transformedEvent = null ;
@@ -181,8 +183,6 @@ private async Task ProcessStreamAsync(PipeReader reader, PipeWriter writer, Acti
181183 if ( transformedEvent == null )
182184 continue ;
183185
184- List < object > outputMessageParts = [ ] ;
185-
186186 switch ( transformedEvent )
187187 {
188188 case AskAiEvent . ConversationStart conversationStart :
@@ -195,8 +195,7 @@ private async Task ProcessStreamAsync(PipeReader reader, PipeWriter writer, Acti
195195 case AskAiEvent . Reasoning reasoning :
196196 {
197197 _ = activity ? . AddEvent ( new ActivityEvent ( "conversation_start" ) ) ;
198- outputMessageParts . Add ( ( type : "reasoning" , content : reasoning . Message ) ) ;
199-
198+ outputMessageParts . Add ( new MessagePart ( "reasoning" , reasoning . Message ?? string . Empty ) ) ;
200199 break ;
201200 }
202201 case AskAiEvent . Chunk :
@@ -234,14 +233,10 @@ private async Task ProcessStreamAsync(PipeReader reader, PipeWriter writer, Acti
234233 }
235234 case AskAiEvent . ChunkComplete chunkComplete :
236235 {
237- var parts = outputMessageParts . Prepend ( ( type : "text" , content : chunkComplete . FullContent ) ) . ToArray ( ) ;
238- var outputMessages = new
239- {
240- role = "assistant" ,
241- parts ,
242- finish_reason = "stop"
243- } ;
244- _ = activity ? . SetTag ( "gen_ai.output.messages" , JsonSerializer . Serialize ( outputMessages ) ) ;
236+ var parts = outputMessageParts . Prepend ( new MessagePart ( "text" , chunkComplete . FullContent ) ) . ToArray ( ) ;
237+ var outputMessages = new OutputMessage ( "assistant" , parts , "stop" ) ;
238+ _ = activity ? . SetTag ( "gen_ai.output.messages" , JsonSerializer . Serialize ( outputMessages , ApiJsonContext . Default . OutputMessage ) ) ;
239+ _ = activity ? . AddEvent ( new ActivityEvent ( "message_chunk_complete" ) ) ;
245240 break ;
246241 }
247242 case AskAiEvent . ConversationEnd :
0 commit comments