From 3ddcc5a1d16bcebcdbcede0d2424dd864dc8e243 Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Mon, 13 Apr 2026 21:35:41 -0300 Subject: [PATCH] fix: simplify MinimaxHandler without regex --- src/llm/llm_models/minimax.rs | 52 +++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/src/llm/llm_models/minimax.rs b/src/llm/llm_models/minimax.rs index 02745648..8026e070 100644 --- a/src/llm/llm_models/minimax.rs +++ b/src/llm/llm_models/minimax.rs @@ -1,25 +1,47 @@ use super::ModelHandler; -use regex::Regex; -use std::sync::LazyLock; - -static THINK_REGEX: LazyLock> = - LazyLock::new(|| Regex::new(r"(?s)(分析).*?(/分析)")); -static THINK_REGEX2: LazyLock> = - LazyLock::new(|| Regex::new(r"(?s).*?")); -static THINK_REGEX3: LazyLock> = - LazyLock::new(|| Regex::new(r"(?s)【分析】.*?【/分析】")); pub fn strip_think_tags(content: &str) -> String { let mut result = content.to_string(); - if let Ok(re) = &*THINK_REGEX { - result = re.replace_all(&result, "").to_string(); + + // Chinese: (分析)...(/分析) + while let Some(start_idx) = result.find("(分析)") { + if let Some(end_idx) = result[start_idx..].find("(/分析)") { + result = format!( + "{}{}", + &result[..start_idx], + &result[start_idx + end_idx + 4..] + ); + } else { + break; + } } - if let Ok(re) = &*THINK_REGEX2 { - result = re.replace_all(&result, "").to_string(); + + // English: ... + while let Some(start_idx) = result.find("") { + if let Some(end_idx) = result[start_idx..].find("") { + result = format!( + "{}{}", + &result[..start_idx], + &result[start_idx + end_idx + 8..] + ); + } else { + break; + } } - if let Ok(re) = &*THINK_REGEX3 { - result = re.replace_all(&result, "").to_string(); + + // Chinese alternative: 【分析】...【/分析】 + while let Some(start_idx) = result.find("【分析】") { + if let Some(end_idx) = result[start_idx..].find("【/分析】") { + result = format!( + "{}{}", + &result[..start_idx], + &result[start_idx + end_idx + 5..] + ); + } else { + break; + } } + result }