ds_api/raw/request/
message.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Serialize, Deserialize, Default, Clone)]
7pub struct Message {
8 pub role: Role,
10
11 #[serde(skip_serializing_if = "Option::is_none")]
13 pub content: Option<String>,
14
15 #[serde(skip_serializing_if = "Option::is_none")]
17 pub name: Option<String>,
18
19 #[serde(skip_serializing_if = "Option::is_none")]
21 pub tool_call_id: Option<String>,
22
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub tool_calls: Option<Vec<ToolCall>>,
26
27 #[serde(skip_serializing_if = "Option::is_none")]
29 pub reasoning_content: Option<String>,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub prefix: Option<bool>,
34}
35
36pub const AUTO_SUMMARY_TAG: &str = "[auto-summary]";
41
42impl Message {
43 pub fn new(role: Role, message: &str) -> Self {
44 Self {
45 role,
46 content: Some(message.to_string()),
47 name: None,
48 tool_call_id: None,
49 tool_calls: None,
50 reasoning_content: None,
51 prefix: None,
52 }
53 }
54
55 pub fn user(message: &str) -> Self {
56 Self::new(Role::User, message)
57 }
58
59 pub fn assistant(message: &str) -> Self {
60 Self::new(Role::Assistant, message)
61 }
62
63 pub fn system(message: &str) -> Self {
64 Self::new(Role::System, message)
65 }
66
67 #[inline]
75 pub fn is_auto_summary(&self) -> bool {
76 matches!(self.role, Role::System) && self.name.as_deref() == Some(AUTO_SUMMARY_TAG)
77 }
78
79 pub(crate) fn auto_summary(text: impl Into<String>) -> Self {
81 let mut msg = Self::new(Role::System, &text.into());
82 msg.name = Some(AUTO_SUMMARY_TAG.to_string());
83 msg
84 }
85}
86
87#[derive(Debug, Serialize, Deserialize, Clone, Default)]
89#[serde(rename_all = "lowercase")]
90pub enum Role {
91 System,
92 #[default]
93 User,
94 Assistant,
95 Tool,
96}
97
98#[derive(Debug, Serialize, Deserialize, Clone)]
100pub struct ToolCall {
101 pub id: String,
102 pub r#type: ToolType,
103 pub function: FunctionCall,
104}
105
106#[derive(Debug, Serialize, Deserialize, Clone)]
107#[serde(rename_all = "lowercase")]
108pub enum ToolType {
109 Function,
110}
111
112#[derive(Debug, Serialize, Deserialize, Clone)]
113pub struct FunctionCall {
114 pub name: String,
115 pub arguments: String, }