synaptic-eval 0.4.0

Evaluation: ExactMatch, JsonValidity, Regex, EmbeddingDistance, LLMJudge evaluators
Documentation
use synaptic_eval::{evaluate, Dataset, ExactMatchEvaluator};

#[tokio::test]
async fn evaluate_dataset() {
    let dataset = Dataset::from_pairs(vec![("q1", "Paris"), ("q2", "Berlin"), ("q3", "Tokyo")]);

    let predictions = vec![
        "Paris".to_string(),
        "London".to_string(),
        "Tokyo".to_string(),
    ];

    let evaluator = ExactMatchEvaluator::new();
    let report = evaluate(&evaluator, &dataset, &predictions).await.unwrap();

    assert_eq!(report.total, 3);
    assert_eq!(report.passed, 2);
    assert!((report.accuracy - 2.0 / 3.0).abs() < 0.001);
    assert_eq!(report.results.len(), 3);
    assert!(report.results[0].passed);
    assert!(!report.results[1].passed);
    assert!(report.results[2].passed);
}

#[tokio::test]
async fn empty_dataset() {
    let dataset = Dataset::new(vec![]);
    let predictions: Vec<String> = vec![];

    let evaluator = ExactMatchEvaluator::new();
    let report = evaluate(&evaluator, &dataset, &predictions).await.unwrap();

    assert_eq!(report.total, 0);
    assert_eq!(report.passed, 0);
    assert_eq!(report.accuracy, 0.0);
    assert!(report.results.is_empty());
}