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
36impl Message {
37 pub fn new(role: Role, message: &str) -> Self {
38 Self {
39 role,
40 content: Some(message.to_string()),
41 name: None,
42 tool_call_id: None,
43 tool_calls: None,
44 reasoning_content: None,
45 prefix: None,
46 }
47 }
48
49 pub fn user(message: &str) -> Self {
50 Self::new(Role::User, message)
51 }
52
53 pub fn assistant(message: &str) -> Self {
54 Self::new(Role::Assistant, message)
55 }
56
57 pub fn system(message: &str) -> Self {
58 Self::new(Role::System, message)
59 }
60}
61
62#[derive(Debug, Serialize, Deserialize, Clone, Default)]
64#[serde(rename_all = "lowercase")]
65pub enum Role {
66 System,
67 #[default]
68 User,
69 Assistant,
70 Tool,
71}
72
73#[derive(Debug, Serialize, Deserialize, Clone)]
75pub struct ToolCall {
76 pub id: String,
77 pub r#type: ToolType,
78 pub function: FunctionCall,
79}
80
81#[derive(Debug, Serialize, Deserialize, Clone)]
82#[serde(rename_all = "lowercase")]
83pub enum ToolType {
84 Function,
85}
86
87#[derive(Debug, Serialize, Deserialize, Clone)]
88pub struct FunctionCall {
89 pub name: String,
90 pub arguments: String, }