From b272858edbe36af0b2eca119ff5b132de8dadce9 Mon Sep 17 00:00:00 2001 From: asepharyana Date: Thu, 16 Jul 2026 16:43:03 +0700 Subject: [PATCH] fix(cms): satukan ChatMessage/Role Conversation dengan tipe kanonik zesdex-entities Co-Authored-By: Claude Sonnet 5 --- crates/zesdex-cms/src/domain/conversation.rs | 84 +++----------------- 1 file changed, 13 insertions(+), 71 deletions(-) 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")); + } +}