abu_agent/middleware/
privacy.rs1use abu_base::chat::AssistantMessage;
2use regex::Regex;
3use std::convert::Infallible;
4
5use super::{LlmOutMiddleware, MiddlewareFlow};
6
7pub struct PrivacyScrubberMiddleware {
8 phone_regex: Regex,
9 email_regex: Regex,
10}
11
12impl PrivacyScrubberMiddleware {
13 pub fn new() -> Self {
14 Self {
15 phone_regex: Regex::new(r"1[3-9]\d{9}").unwrap(),
17 email_regex: Regex::new(r"[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+").unwrap(),
18 }
19 }
20}
21
22#[async_trait::async_trait]
23impl LlmOutMiddleware for PrivacyScrubberMiddleware {
24 type Error = Infallible;
25
26 async fn intercept(&self, ai_message: &mut AssistantMessage) -> Result<MiddlewareFlow, Self::Error> {
27 let scrubbed = self.phone_regex.replace_all(&ai_message.content, "***-****-****");
28 let scrubbed = self.email_regex.replace_all(&scrubbed, "[EMAIL PROTECTED]");
29
30 ai_message.content = scrubbed.to_string();
31
32 Ok(MiddlewareFlow::Continue)
33 }
34}