@@ -1391,6 +1391,53 @@ mod extra_llm_tests2 {
13911391 assert_eq ! ( message. reasoning_content. as_deref( ) , Some ( "done" ) ) ;
13921392 }
13931393
1394+ #[ tokio:: test]
1395+ async fn test_openai_stream_reasoning_delta_does_not_pollute_final_text ( ) {
1396+ let sse = vec ! [
1397+ "data: {\" choices\" :[{\" delta\" :{\" reasoning\" :\" I should answer the greeting.\" },\" finish_reason\" :null}],\" usage\" :null}\n \n " . to_string( ) ,
1398+ "data: {\" choices\" :[{\" delta\" :{\" content\" :\" 你好\" },\" finish_reason\" :null}],\" usage\" :null}\n \n " . to_string( ) ,
1399+ "data: {\" choices\" :[{\" delta\" :{},\" finish_reason\" :\" stop\" }],\" usage\" :{\" prompt_tokens\" :1,\" completion_tokens\" :1,\" total_tokens\" :2}}\n \n " . to_string( ) ,
1400+ "data: [DONE]\n \n " . to_string( ) ,
1401+ ] ;
1402+
1403+ let client = OpenAiClient :: new ( "key" . to_string ( ) , "glm-5.2" . to_string ( ) )
1404+ . with_http_client ( Arc :: new ( MockStreamingHttpClient { chunks : sse } ) ) ;
1405+
1406+ let mut rx = client
1407+ . complete_streaming (
1408+ & [ Message :: user ( "你好" ) ] ,
1409+ None ,
1410+ & [ ] ,
1411+ CancellationToken :: new ( ) ,
1412+ )
1413+ . await
1414+ . unwrap ( ) ;
1415+
1416+ let mut text_deltas = String :: new ( ) ;
1417+ let mut reasoning_deltas = String :: new ( ) ;
1418+ let mut final_response = None ;
1419+ while let Some ( event) = rx. recv ( ) . await {
1420+ match event {
1421+ StreamEvent :: TextDelta ( delta) => text_deltas. push_str ( & delta) ,
1422+ StreamEvent :: ReasoningDelta ( delta) => reasoning_deltas. push_str ( & delta) ,
1423+ StreamEvent :: Done ( response) => {
1424+ final_response = Some ( response) ;
1425+ break ;
1426+ }
1427+ _ => { }
1428+ }
1429+ }
1430+
1431+ let response = final_response. expect ( "expected final response" ) ;
1432+ assert_eq ! ( text_deltas, "你好" ) ;
1433+ assert_eq ! ( reasoning_deltas, "I should answer the greeting." ) ;
1434+ assert_eq ! ( response. text( ) , "你好" ) ;
1435+ assert_eq ! (
1436+ response. message. reasoning_content. as_deref( ) ,
1437+ Some ( "I should answer the greeting." )
1438+ ) ;
1439+ }
1440+
13941441 // ========================================================================
13951442 // LlmConfig and create_client_with_config
13961443 // ========================================================================
0 commit comments