Skip to content

Commit 67df6cb

Browse files
committed
Merge a3s-cli-v0.5.12 into main
# Conflicts: # core/src/llm/openai.rs
2 parents 1c9dd95 + 64f086b commit 67df6cb

1 file changed

Lines changed: 47 additions & 0 deletions

File tree

core/src/llm/tests.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)