diff --git a/src/plugins/ai/backend.rs b/src/plugins/ai/backend.rs index 1b1f3ba..fc5c11b 100644 --- a/src/plugins/ai/backend.rs +++ b/src/plugins/ai/backend.rs @@ -334,10 +334,11 @@ fn parse_llama_output(raw: &str) -> String { break; } - // 清理进度动画字符 |/-\ 和转义序列 \b - // llama-cli 的进度动画用 \b(退格)刷新,stdout 捕获后变成字面 \b + // 清理进度动画字符 |/-\ 和退格符 + // llama-cli 的进度动画用退格符 \u{8} 刷新,stdout 捕获后保留为字面退格或 \b 转义 let cleaned: String = trimmed - .replace("\\b", "") + .replace("\\b", "") // 字面 \b 转义序列 + .replace("\u{8}", "") // 真正的退格符 .chars() .filter(|c| !"|\\-/".contains(*c)) .collect::(); @@ -358,19 +359,22 @@ mod tests { #[test] fn test_parse_llama_output() { - // 进度动画和回复在同一行,用 \b 分隔 - let raw = " build : b1-fdb1db8\n\ + // 进度动画和回复在同一行,用真正的退格符 \u{8} 分隔 + let bs = "\u{8}"; // backspace + let raw = format!( + " build : b1-fdb1db8\n\ model : model_store/llm/qwen2.5-0.5b-q4_k_m.gguf\n\ \n\ > hello\n\ \n\ -\\b-\\b\\\\\\b|\\b/\\b-\\b\\\\\\b|\\b/\\b 汪!\n\ +{bs}-{bs}|{bs}/{bs}-{bs}|{bs}/{bs} 汪!\n\ \n\ [ Prompt: 31.1 t/s | Generation: 26.3 t/s ]\n\ \n\ -Exiting...\n"; +Exiting...\n" + ); - let reply = parse_llama_output(raw); + let reply = parse_llama_output(&raw); assert_eq!(reply, "汪!"); } }