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