@@ -245,6 +245,9 @@ impl ResultStreamExt<anyhow::Error> for crate::BoxStream<ChatCompletionMessage,
245245 . rev ( )
246246 . find_map ( |message| message. thought_signature . clone ( ) ) ;
247247
248+ // Get phase from the last message that has one
249+ let phase = messages. iter ( ) . rev ( ) . find_map ( |message| message. phase ) ;
250+
248251 // Check for empty completion - map to retryable error for retry
249252 if content. trim ( ) . is_empty ( )
250253 && tool_calls. is_empty ( )
@@ -263,6 +266,7 @@ impl ResultStreamExt<anyhow::Error> for crate::BoxStream<ChatCompletionMessage,
263266 reasoning_details : ( !total_reasoning_details. is_empty ( ) )
264267 . then_some ( total_reasoning_details) ,
265268 finish_reason,
269+ phase,
266270 } )
267271 }
268272}
@@ -315,6 +319,7 @@ mod tests {
315319 reasoning : None ,
316320 reasoning_details : None ,
317321 finish_reason : None ,
322+ phase : None ,
318323 } ;
319324
320325 assert_eq ! ( actual, expected) ;
@@ -368,6 +373,7 @@ mod tests {
368373 reasoning : None ,
369374 reasoning_details : None ,
370375 finish_reason : None ,
376+ phase : None ,
371377 } ;
372378
373379 assert_eq ! ( actual, expected) ;
@@ -419,6 +425,7 @@ mod tests {
419425 reasoning : None ,
420426 reasoning_details : None ,
421427 finish_reason : None ,
428+ phase : None ,
422429 } ;
423430
424431 assert_eq ! ( actual, expected) ;
@@ -471,6 +478,7 @@ mod tests {
471478 reasoning : None ,
472479 reasoning_details : None ,
473480 finish_reason : None ,
481+ phase : None ,
474482 } ;
475483
476484 assert_eq ! ( actual, expected) ;
@@ -525,6 +533,7 @@ mod tests {
525533 reasoning : None ,
526534 reasoning_details : None ,
527535 finish_reason : Some ( FinishReason :: Stop ) ,
536+ phase : None ,
528537 } ;
529538
530539 assert_eq ! ( actual, expected) ;
@@ -652,6 +661,7 @@ mod tests {
652661 reasoning : None ,
653662 reasoning_details : None ,
654663 finish_reason : None ,
664+ phase : None ,
655665 } ;
656666
657667 assert_eq ! ( actual, expected) ;
@@ -718,6 +728,7 @@ mod tests {
718728 reasoning : Some ( "First reasoning: thinking deeply about this..." . to_string ( ) ) ,
719729 reasoning_details : None ,
720730 finish_reason : None ,
731+ phase : None ,
721732 } ;
722733
723734 assert_eq ! ( actual, expected) ;
@@ -773,6 +784,7 @@ mod tests {
773784 reasoning : None ,
774785 reasoning_details : Some ( expected_reasoning_details) ,
775786 finish_reason : None ,
787+ phase : None ,
776788 } ;
777789
778790 assert_eq ! ( actual, expected) ;
@@ -803,6 +815,7 @@ mod tests {
803815 reasoning : None , // Empty reasoning should be None
804816 reasoning_details : None ,
805817 finish_reason : None ,
818+ phase : None ,
806819 } ;
807820
808821 assert_eq ! ( actual, expected) ;
@@ -891,6 +904,7 @@ mod tests {
891904 reasoning : None ,
892905 reasoning_details : None ,
893906 finish_reason : None ,
907+ phase : None ,
894908 } ;
895909
896910 assert_eq ! ( actual, expected) ;
@@ -933,6 +947,7 @@ mod tests {
933947 reasoning : None ,
934948 reasoning_details : None ,
935949 finish_reason : None ,
950+ phase : None ,
936951 } ;
937952
938953 assert_eq ! ( actual, expected) ;
@@ -973,6 +988,7 @@ mod tests {
973988 reasoning_details : None ,
974989 finish_reason : Some ( FinishReason :: Stop ) , /* Should be from the last message with a
975990 * finish reason */
991+ phase : None ,
976992 } ;
977993
978994 assert_eq ! ( actual, expected) ;
@@ -1002,6 +1018,7 @@ mod tests {
10021018 reasoning : None ,
10031019 reasoning_details : None ,
10041020 finish_reason : Some ( FinishReason :: ToolCalls ) ,
1021+ phase : None ,
10051022 } ;
10061023
10071024 assert_eq ! ( actual, expected) ;
@@ -1030,6 +1047,7 @@ mod tests {
10301047 reasoning : None ,
10311048 reasoning_details : None ,
10321049 finish_reason : None ,
1050+ phase : None ,
10331051 } ;
10341052
10351053 assert_eq ! ( actual, expected) ;
@@ -1121,6 +1139,7 @@ mod tests {
11211139 reasoning : None ,
11221140 reasoning_details : None ,
11231141 finish_reason : Some ( FinishReason :: Stop ) ,
1142+ phase : None ,
11241143 } ;
11251144
11261145 assert_eq ! ( actual, expected) ;
@@ -1155,6 +1174,7 @@ mod tests {
11551174 reasoning : None ,
11561175 reasoning_details : None ,
11571176 finish_reason : None ,
1177+ phase : None ,
11581178 } ;
11591179
11601180 assert_eq ! ( actual, expected) ;
0 commit comments