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
58#[derive(Debug, Serialize, Deserialize, Clone, Default)]
60#[serde(rename_all = "lowercase")]
61pub enum Role {
62 System,
63 #[default]
64 User,
65 Assistant,
66 Tool,
67}
68
69#[derive(Debug, Serialize, Deserialize, Clone)]
71pub struct ToolCall {
72 pub id: String,
73 pub r#type: ToolType,
74 pub function: FunctionCall,
75}
76
77#[derive(Debug, Serialize, Deserialize, Clone)]
78#[serde(rename_all = "lowercase")]
79pub enum ToolType {
80 Function,
81}
82
83#[derive(Debug, Serialize, Deserialize, Clone)]
84pub struct FunctionCall {
85 pub name: String,
86 pub arguments: String, }