diff --git a/crates/zesdex-cms/src/domain/conversation.rs b/crates/zesdex-cms/src/domain/conversation.rs index 35e430a..fe17286 100644 --- a/crates/zesdex-cms/src/domain/conversation.rs +++ b/crates/zesdex-cms/src/domain/conversation.rs @@ -14,77 +14,7 @@ use serde::{Deserialize, Serialize}; -/// A single message role / content pair. -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub enum Role { - #[serde(rename = "user")] - User, - #[serde(rename = "assistant")] - Assistant, - #[serde(rename = "system")] - System, - #[serde(rename = "tool")] - Tool, -} - -/// A single message in a conversation. -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ChatMessage { - pub role: Role, - pub content: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub tool_calls: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - pub tool_call_id: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub name: Option, -} - -impl ChatMessage { - /// Build a user-role message with the given text content. - pub fn user(content: impl Into) -> Self { - Self { - role: Role::User, - content: Some(content.into()), - tool_calls: None, - tool_call_id: None, - name: None, - } - } - - /// Build an assistant-role message with an optional text response. - pub fn assistant(content: Option) -> Self { - Self { - role: Role::Assistant, - content, - tool_calls: None, - tool_call_id: None, - name: None, - } - } - - /// Build a system-role message with the given instruction text. - pub fn system(content: impl Into) -> Self { - Self { - role: Role::System, - content: Some(content.into()), - tool_calls: None, - tool_call_id: None, - name: None, - } - } - - /// Build a tool-role result message referencing a prior tool call. - pub fn tool(tool_call_id: String, content: String) -> Self { - Self { - role: Role::Tool, - content: Some(content), - tool_calls: None, - tool_call_id: Some(tool_call_id), - name: None, - } - } -} +pub use zesdex_entities::seaorm::common::message::{ChatMessage, Role}; /// A single conversation's message history and generation settings. #[derive(Debug, Clone, Serialize, Deserialize)] @@ -143,3 +73,15 @@ impl Conversation { self.messages.is_empty() } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn chat_message_is_the_canonical_entities_type() { + let canonical = zesdex_entities::seaorm::common::message::ChatMessage::user("hi"); + let via_cms: ChatMessage = canonical; + assert_eq!(via_cms.content.as_deref(), Some("hi")); + } +}