use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct GraderInputItemOutputText {
pub text: String,
#[serde(rename = "type")]
pub type_: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct GraderInputItemInputImage {
pub image_url: String,
#[serde(rename = "type")]
pub type_: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub detail: Option<String>,
}
pub type GraderInputItem = serde_json::Value;
pub type GraderInputs = Vec<GraderInputItem>;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct InputContentOutputText {
pub text: String,
#[serde(rename = "type")]
pub type_: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct InputContentInputImage {
pub image_url: String,
#[serde(rename = "type")]
pub type_: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub detail: Option<String>,
}
pub type InputContent = serde_json::Value;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum InputRole {
#[serde(rename = "user")]
User,
#[serde(rename = "assistant")]
Assistant,
#[serde(rename = "system")]
System,
#[serde(rename = "developer")]
Developer,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct Input {
pub content: InputContent,
pub role: InputRole,
#[serde(rename = "type", skip_serializing_if = "Option::is_none", default)]
pub type_: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct LabelModelGrader {
pub input: Vec<Input>,
pub labels: Vec<String>,
pub model: String,
pub name: String,
pub passing_labels: Vec<String>,
#[serde(rename = "type")]
pub type_: String,
}
pub type Graders = serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct MultiGrader {
pub calculate_output: String,
pub graders: Graders,
pub name: String,
#[serde(rename = "type")]
pub type_: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct PythonGrader {
pub name: String,
pub source: String,
#[serde(rename = "type")]
pub type_: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub image_tag: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct SamplingParams {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub max_completions_tokens: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub reasoning_effort: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub seed: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub temperature: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub top_p: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct ScoreModelGrader {
pub input: Vec<Input>,
pub model: String,
pub name: String,
#[serde(rename = "type")]
pub type_: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub range: Option<Vec<f64>>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub sampling_params: Option<SamplingParams>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum StringCheckGraderOperation {
#[serde(rename = "eq")]
Eq,
#[serde(rename = "ne")]
Ne,
#[serde(rename = "like")]
Like,
#[serde(rename = "ilike")]
Ilike,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct StringCheckGrader {
pub input: String,
pub name: String,
pub operation: StringCheckGraderOperation,
pub reference: String,
#[serde(rename = "type")]
pub type_: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum TextSimilarityGraderEvaluationMetric {
#[serde(rename = "cosine")]
Cosine,
#[serde(rename = "fuzzy_match")]
FuzzyMatch,
#[serde(rename = "bleu")]
Bleu,
#[serde(rename = "gleu")]
Gleu,
#[serde(rename = "meteor")]
Meteor,
#[serde(rename = "rouge_1")]
Rouge1,
#[serde(rename = "rouge_2")]
Rouge2,
#[serde(rename = "rouge_3")]
Rouge3,
#[serde(rename = "rouge_4")]
Rouge4,
#[serde(rename = "rouge_5")]
Rouge5,
#[serde(rename = "rouge_l")]
RougeL,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct TextSimilarityGrader {
pub evaluation_metric: TextSimilarityGraderEvaluationMetric,
pub input: String,
pub name: String,
pub reference: String,
#[serde(rename = "type")]
pub type_: String,
}