use async_trait::async_trait;
use serde::{Deserialize, Serialize};
#[cfg(feature = "tau2")]
pub mod tau2;
#[cfg(feature = "bfcl")]
pub mod bfcl;
#[async_trait]
pub trait TaskQualityAdapter: Send + Sync {
fn name(&self) -> &str;
async fn run(&self, model: &str) -> crate::Result<TaskQualityResult>;
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct TaskQualityResult {
pub adapter_name: String,
pub model: String,
pub total_cases: usize,
pub passed_cases: usize,
pub accuracy: f64,
pub cases: Vec<CaseResult>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct CaseResult {
pub case_id: String,
pub passed: bool,
pub score: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub details: Option<String>,
}