openai_struct/models/
chat_completion_request_message.rs1#[allow(unused_imports)]
12use serde_json::Value;
13use crate::{
14 ChatCompletionRequestAssistantMessage,
15 ChatCompletionRequestDeveloperMessage,
16 ChatCompletionRequestFunctionMessage,
17 ChatCompletionRequestSystemMessage,
18 ChatCompletionRequestToolMessage,
19 ChatCompletionRequestUserMessage,
20};
21
22#[derive(Debug, PartialEq, Serialize, Deserialize)]
23#[serde(tag = "role")]
24pub enum ChatCompletionRequestMessage {
25 #[serde(rename = "developer")]
26 Developer(ChatCompletionRequestDeveloperMessage),
27 #[serde(rename = "system")]
28 System(ChatCompletionRequestSystemMessage),
29 #[serde(rename = "user")]
30 User(ChatCompletionRequestUserMessage),
31 #[serde(rename = "assistant")]
32 Assistant(ChatCompletionRequestAssistantMessage),
33 #[serde(rename = "tool")]
34 Tool(ChatCompletionRequestToolMessage),
35 #[serde(rename = "function")]
36 Function(ChatCompletionRequestFunctionMessage),
37}
38
39#[test]
40fn test_serde_chat_completion_request_message() {
41 use serde_json::Value;
42
43 let tmp = ChatCompletionRequestMessage::User(
44 ChatCompletionRequestUserMessage {
45 content: Value::String("once upon a time".to_string()),
46 name: None,
47 }
48 );
49
50 let serialized = serde_json::to_string(&tmp).unwrap();
52 assert_eq!(
53 serialized,
54 r#"{"role":"user","content":"once upon a time","name":null}"#
55 );
56
57 let deserialized: ChatCompletionRequestMessage = serde_json::from_str(&serialized).unwrap();
59 assert_eq!(tmp, deserialized);
60
61 let emm: ChatCompletionRequestMessage = serde_json::from_str(
63 r#"{"content":"once upon a time","name":null,"role":"user"}"#
64 ).unwrap();
65 assert_eq!(tmp, emm);
66}