pub mod pattern_matcher;
pub mod sanitizer;
pub mod scheduler;
pub use pattern_matcher::PatternMatcher;
pub use sanitizer::{Sanitizer, PiiMatch, PiiType};
pub use scheduler::{DetectionScheduler, ThreatPriority};
use aimds_core::{DetectionResult, PromptInput, Result};
pub struct DetectionService {
pattern_matcher: PatternMatcher,
sanitizer: Sanitizer,
scheduler: DetectionScheduler,
}
impl DetectionService {
pub fn new() -> Result<Self> {
Ok(Self {
pattern_matcher: PatternMatcher::new()?,
sanitizer: Sanitizer::new(),
scheduler: DetectionScheduler::new()?,
})
}
pub async fn detect(&self, input: &PromptInput) -> Result<DetectionResult> {
self.scheduler.schedule_detection(input.id).await?;
let detection = self.pattern_matcher.match_patterns(&input.content).await?;
let _sanitized = self.sanitizer.sanitize(&input.content).await?;
Ok(detection)
}
}
impl Default for DetectionService {
fn default() -> Self {
Self::new().expect("Failed to create detection service")
}
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_detection_service() {
let service = DetectionService::new().unwrap();
let input = PromptInput::new("Test prompt".to_string());
let result = service.detect(&input).await;
assert!(result.is_ok());
}
}