use std::collections::HashMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Task {
pub id: String,
pub input: String,
#[serde(default)]
pub metadata: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Trajectory {
pub task_id: String,
pub output: String,
#[serde(default)]
pub steps: Vec<serde_json::Value>,
#[serde(default)]
pub conversation: Vec<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Feedback {
pub success: bool,
pub score: f64,
pub detail: String,
#[serde(default)]
pub raw: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Observation {
pub task: Task,
pub trajectory: Trajectory,
pub feedback: Feedback,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EvoSkillMeta {
pub name: String,
pub description: String,
pub path: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StepResult {
pub mutated: bool,
pub summary: String,
#[serde(default)]
pub metadata: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CycleRecord {
pub cycle: u32,
pub score: f64,
pub mutated: bool,
#[serde(default)]
pub engine_name: String,
#[serde(default)]
pub summary: String,
#[serde(default)]
pub observation_batch: String,
#[serde(default)]
pub metadata: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct EvolutionResult {
pub cycles_completed: u32,
pub final_score: f64,
#[serde(default)]
pub score_history: Vec<f64>,
#[serde(default)]
pub converged: bool,
#[serde(default)]
pub details: HashMap<String, serde_json::Value>,
}