synaptic_eval/
regex_match.rs1use async_trait::async_trait;
2use regex::Regex;
3use synaptic_core::SynapticError;
4
5use crate::evaluator::{EvalResult, Evaluator};
6
7pub struct RegexMatchEvaluator {
9 pattern: Regex,
10}
11
12impl RegexMatchEvaluator {
13 pub fn new(pattern: &str) -> Result<Self, SynapticError> {
17 let pattern = Regex::new(pattern)
18 .map_err(|e| SynapticError::Validation(format!("Invalid regex pattern: {}", e)))?;
19 Ok(Self { pattern })
20 }
21}
22
23#[async_trait]
24impl Evaluator for RegexMatchEvaluator {
25 async fn evaluate(
26 &self,
27 prediction: &str,
28 _reference: &str,
29 _input: &str,
30 ) -> Result<EvalResult, SynapticError> {
31 if self.pattern.is_match(prediction) {
32 Ok(EvalResult::pass())
33 } else {
34 Ok(EvalResult::fail().with_reasoning(format!(
35 "Prediction {:?} does not match pattern {:?}",
36 prediction,
37 self.pattern.as_str()
38 )))
39 }
40 }
41}