batch_mode_batch_schema/
batch_message.rs1crate::ix!();
3
4#[derive(Debug,Serialize,Deserialize)]
5pub struct BatchMessage {
6 role: MessageRole,
7 content: BatchMessageContent,
8 refusal: Option<String>,
9}
10
11impl BatchMessage {
12
13 pub fn role(&self) -> &MessageRole {
14 &self.role
15 }
16
17 pub fn content(&self) -> &BatchMessageContent {
18 &self.content
19 }
20
21 pub fn refusal(&self) -> Option<&String> {
22 self.refusal.as_ref()
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use super::*;
29 use serde_json::json;
30
31 #[test]
33 fn test_batch_message_deserialization() {
34 let json = r#"{
36 "role": "assistant",
37 "content": "Hello, world!",
38 "refusal": null
39 }"#;
40 let message: BatchMessage = serde_json::from_str(json).unwrap();
41 assert_eq!(message.role(), &MessageRole::Assistant);
42 assert_eq!(message.content(), "Hello, world!");
43 assert_eq!(message.refusal(), None);
44
45 let json = r#"{
47 "role": "assistant",
48 "content": "I'm sorry, but I cannot assist with that request.",
49 "refusal": "Policy refusal"
50 }"#;
51 let message: BatchMessage = serde_json::from_str(json).unwrap();
52 assert_eq!(message.refusal(), Some(&"Policy refusal".to_string()));
53
54 let json = r#"{
56 "role": "unknown_role",
57 "content": "Content with unknown role",
58 "refusal": null
59 }"#;
60 let message: BatchMessage = serde_json::from_str(json).unwrap();
61 assert_eq!(
62 message.role(),
63 &MessageRole::Unknown("unknown_role".to_string())
64 );
65
66 let json = r#"{
68 "role": "assistant",
69 "content": "Content without refusal"
70 }"#;
71 let message: BatchMessage = serde_json::from_str(json).unwrap();
72 assert_eq!(message.refusal(), None);
73
74 let json = r#"{
76 "role": "assistant",
77 "content": "",
78 "refusal": null
79 }"#;
80 let message: BatchMessage = serde_json::from_str(json).unwrap();
81 assert_eq!(message.content(), "");
82
83 let json = r#"{
85 "role": 123,
86 "content": "Invalid role",
87 "refusal": null
88 }"#;
89 let result: Result<BatchMessage, _> = serde_json::from_str(json);
90 assert!(result.is_err());
91
92 let json = r#"{
94 "role": "assistant",
95 "refusal": null
96 }"#;
97 let result: Result<BatchMessage, _> = serde_json::from_str(json);
98 assert!(result.is_err());
99 }
100}