use std::collections::HashMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "snake_case")]
pub struct YamlAgentDefinition {
pub name: String,
#[serde(default)]
pub description: Option<String>,
pub model: ModelConfig,
#[serde(default)]
pub instructions: Option<String>,
#[serde(default)]
pub tools: Vec<ToolReference>,
#[serde(default)]
pub sub_agents: Vec<SubAgentReference>,
#[serde(default)]
pub config: HashMap<String, serde_json::Value>,
#[serde(flatten)]
pub metadata: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "snake_case")]
pub struct ModelConfig {
pub provider: String,
pub model_id: String,
#[serde(default)]
pub temperature: Option<f64>,
#[serde(default)]
pub max_tokens: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(untagged)]
pub enum ToolReference {
Named {
name: String,
},
Mcp {
mcp: McpToolReference,
},
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct McpToolReference {
pub endpoint: String,
#[serde(default)]
pub args: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct SubAgentReference {
#[serde(rename = "ref")]
pub reference: String,
}