Skip to main content

synaptic_eval/
json_validity.rs

1use async_trait::async_trait;
2use synaptic_core::SynapticError;
3
4use crate::evaluator::{EvalResult, Evaluator};
5
6/// Evaluator that checks whether the prediction is valid JSON.
7pub struct JsonValidityEvaluator;
8
9impl JsonValidityEvaluator {
10    pub fn new() -> Self {
11        Self
12    }
13}
14
15impl Default for JsonValidityEvaluator {
16    fn default() -> Self {
17        Self::new()
18    }
19}
20
21#[async_trait]
22impl Evaluator for JsonValidityEvaluator {
23    async fn evaluate(
24        &self,
25        prediction: &str,
26        _reference: &str,
27        _input: &str,
28    ) -> Result<EvalResult, SynapticError> {
29        match serde_json::from_str::<serde_json::Value>(prediction) {
30            Ok(_) => Ok(EvalResult::pass()),
31            Err(e) => Ok(EvalResult::fail().with_reasoning(format!("Invalid JSON: {}", e))),
32        }
33    }
34}