use serde::{Deserialize, Serialize}; use serde_json::Value; #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum Role { User, Assistant, System, } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum AgentContent { Text(String), Json(Value), } impl AgentContent { pub fn content_type(&self) -> &'static str { match self { Self::Text(_) => "str", Self::Json(_) => "json", } } pub fn as_text(&self) -> Option<&str> { match self { Self::Text(text) => Some(text), Self::Json(_) => None, } } } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct AgentMessage { pub role: Role, pub content: AgentContent, } #[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum RunStatus { Queued, InProgress, Completed, Failed, }