use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::genai_types::{Content, Part};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ToolUse {
pub name: String,
#[serde(default)]
pub args: Value,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct IntermediateData {
#[serde(default)]
pub tool_uses: Vec<ToolUse>,
#[serde(default)]
pub intermediate_responses: Vec<(String, Vec<Part>)>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Invocation {
pub user_content: Content,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub final_response: Option<Content>,
#[serde(default)]
pub intermediate_data: IntermediateData,
#[serde(default)]
pub invocation_id: String,
#[serde(default)]
pub creation_timestamp: f64,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct SessionInput {
#[serde(default)]
pub app_name: String,
#[serde(default)]
pub user_id: String,
#[serde(default)]
pub state: IndexMap<String, Value>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EvalCase {
#[serde(rename = "eval_id", alias = "id")]
pub id: String,
pub conversation: Vec<Invocation>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub session_input: Option<SessionInput>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default)]
pub creation_timestamp: f64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EvalSet {
#[serde(rename = "eval_set_id", alias = "id")]
pub id: String,
#[serde(default)]
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub eval_cases: Vec<EvalCase>,
#[serde(default)]
pub creation_timestamp: f64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
pub enum EvalStatus {
Passed,
Failed,
Error,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EvalScore {
pub score: f64,
pub status: EvalStatus,
#[serde(default)]
pub details: Value,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EvalResult {
pub eval_set_id: String,
pub eval_case_id: String,
pub scores: indexmap::IndexMap<String, EvalScore>,
pub overall_status: EvalStatus,
}