use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ChatRole {
System,
User,
Assistant,
Tool,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub struct ChatMessage {
pub role: ChatRole,
pub content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
impl ChatMessage {
pub fn system(content: impl Into<String>) -> Self {
Self::new(ChatRole::System, content)
}
pub fn user(content: impl Into<String>) -> Self {
Self::new(ChatRole::User, content)
}
pub fn assistant(content: impl Into<String>) -> Self {
Self::new(ChatRole::Assistant, content)
}
pub fn tool(name: impl Into<String>, content: impl Into<String>) -> Self {
Self {
role: ChatRole::Tool,
content: content.into(),
name: Some(name.into()),
}
}
pub fn new(role: ChatRole, content: impl Into<String>) -> Self {
Self {
role,
content: content.into(),
name: None,
}
}
}