mini_langchain/
message.rs

1
2use serde::{Serialize, Deserialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5#[serde(rename_all = "lowercase")]
6pub enum MessageRole {
7    System,           // System message
8    User,             // User input
9    Assistant,        // AI response
10    ToolResponce,     // Tool execution response
11    Tool,             // User-defined function
12    Developer,       // Developer message, compatible with OpenAI
13}
14
15/// Message type (minimal)
16#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct Message {
18    pub role: MessageRole,
19    pub content: String,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub name: Option<String>,  // Name used for tool calls
22}
23
24
25impl Message {
26    pub fn system(content: impl Into<String>) -> Self {
27        Self {
28            role: MessageRole::System,
29            content: content.into(),
30            name: None,
31        }
32    }
33    
34    pub fn user(content: impl Into<String>) -> Self {
35        Self {
36            role: MessageRole::User,
37            content: content.into(),
38            name: None,
39        }
40    }
41    
42    pub fn assistant(content: impl Into<String>) -> Self {
43        Self {
44            role: MessageRole::Assistant,
45            content: content.into(),
46            name: None,
47        }
48    }
49    
50    pub fn tool(name: impl Into<String>, content: impl Into<String>) -> Self {
51        Self {
52            role: MessageRole::Tool,
53            content: content.into(),
54            name: Some(name.into()),
55        }
56    }
57    pub fn tool_res(name: impl Into<String>, content: impl Into<String>) -> Self {
58        Self {
59            role: MessageRole::Tool,
60            content: content.into(),
61            name: Some(name.into()),
62        }
63    }
64
65    pub fn developer(content: impl Into<String>) -> Self {
66        Self {
67            role: MessageRole::Developer,
68            content: content.into(),
69            name: None,
70        }
71    }   
72}