use serde::{Deserialize, Serialize};
use crate::types::evals::EvalItem;
use crate::types::graders::ReasoningEffort;
#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum GraderStringCheckOperation {
Eq,
Ne,
Like,
Ilike,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct GraderStringCheck {
pub name: String,
pub input: String,
pub reference: String,
pub operation: GraderStringCheckOperation,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct GraderTextSimilarity {
pub name: String,
pub input: String,
pub reference: String,
pub evaluation_metric: GraderTextSimilarityEvaluationMetric,
}
#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum GraderTextSimilarityEvaluationMetric {
Cosine,
FuzzyMatch,
Bleu,
Gleu,
Meteor,
Rouge1,
Rouge2,
Rouge3,
Rouge4,
Rouge5,
RougeL,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct GraderPython {
pub name: String,
pub source: String,
pub image_tag: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct GraderScoreModel {
pub name: String,
pub model: String,
pub input: Vec<EvalItem>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sampling_params: Option<GraderScoreModelSamplingParams>,
#[serde(skip_serializing_if = "Option::is_none")]
pub range: Option<Vec<f64>>,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct GraderScoreModelSamplingParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub seed: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub top_p: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub temperature: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_completion_tokens: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_effort: Option<ReasoningEffort>,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct GraderLabelModel {
pub name: String,
pub model: String,
pub input: Vec<EvalItem>,
pub labels: Vec<String>,
pub passing_labels: Vec<String>,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum Graders {
StringCheck(GraderStringCheck),
TextSimilarity(GraderTextSimilarity),
Python(GraderPython),
ScoreModel(GraderScoreModel),
LabelModel(GraderLabelModel),
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct GraderMulti {
pub name: String,
pub graders: Graders,
pub calculate_output: String,
}