fix(cms): satukan ChatMessage/Role Conversation dengan tipe kanonik zesdex-entities
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
3f79b283e2
commit
b272858edb
@@ -14,77 +14,7 @@
|
|||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
/// A single message role / content pair.
|
pub use zesdex_entities::seaorm::common::message::{ChatMessage, Role};
|
||||||
#[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<String>,
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
pub tool_calls: Option<Vec<serde_json::Value>>,
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
pub tool_call_id: Option<String>,
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
pub name: Option<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ChatMessage {
|
|
||||||
/// Build a user-role message with the given text content.
|
|
||||||
pub fn user(content: impl Into<String>) -> 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<String>) -> 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<String>) -> 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,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A single conversation's message history and generation settings.
|
/// A single conversation's message history and generation settings.
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
@@ -143,3 +73,15 @@ impl Conversation {
|
|||||||
self.messages.is_empty()
|
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"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user