async_openai/types/chat/
impls.rs

1use std::fmt::Display;
2
3use crate::types::chat::{
4    ChatCompletionFunctionCall, ChatCompletionNamedToolChoice,
5    ChatCompletionRequestAssistantMessage, ChatCompletionRequestAssistantMessageContent,
6    ChatCompletionRequestDeveloperMessage, ChatCompletionRequestDeveloperMessageContent,
7    ChatCompletionRequestFunctionMessage, ChatCompletionRequestMessage,
8    ChatCompletionRequestMessageContentPartAudio, ChatCompletionRequestMessageContentPartImage,
9    ChatCompletionRequestMessageContentPartText, ChatCompletionRequestSystemMessage,
10    ChatCompletionRequestSystemMessageContent, ChatCompletionRequestToolMessage,
11    ChatCompletionRequestToolMessageContent, ChatCompletionRequestUserMessage,
12    ChatCompletionRequestUserMessageContent, ChatCompletionRequestUserMessageContentPart,
13    FunctionName, ImageUrl, Role,
14};
15
16impl From<ChatCompletionRequestUserMessage> for ChatCompletionRequestMessage {
17    fn from(value: ChatCompletionRequestUserMessage) -> Self {
18        Self::User(value)
19    }
20}
21
22impl From<ChatCompletionRequestSystemMessage> for ChatCompletionRequestMessage {
23    fn from(value: ChatCompletionRequestSystemMessage) -> Self {
24        Self::System(value)
25    }
26}
27
28impl From<ChatCompletionRequestDeveloperMessage> for ChatCompletionRequestMessage {
29    fn from(value: ChatCompletionRequestDeveloperMessage) -> Self {
30        Self::Developer(value)
31    }
32}
33
34impl From<ChatCompletionRequestAssistantMessage> for ChatCompletionRequestMessage {
35    fn from(value: ChatCompletionRequestAssistantMessage) -> Self {
36        Self::Assistant(value)
37    }
38}
39
40impl From<ChatCompletionRequestFunctionMessage> for ChatCompletionRequestMessage {
41    fn from(value: ChatCompletionRequestFunctionMessage) -> Self {
42        Self::Function(value)
43    }
44}
45
46impl From<ChatCompletionRequestToolMessage> for ChatCompletionRequestMessage {
47    fn from(value: ChatCompletionRequestToolMessage) -> Self {
48        Self::Tool(value)
49    }
50}
51
52impl From<ChatCompletionRequestUserMessageContent> for ChatCompletionRequestUserMessage {
53    fn from(value: ChatCompletionRequestUserMessageContent) -> Self {
54        Self {
55            content: value,
56            name: None,
57        }
58    }
59}
60
61impl From<ChatCompletionRequestSystemMessageContent> for ChatCompletionRequestSystemMessage {
62    fn from(value: ChatCompletionRequestSystemMessageContent) -> Self {
63        Self {
64            content: value,
65            name: None,
66        }
67    }
68}
69
70impl From<ChatCompletionRequestDeveloperMessageContent> for ChatCompletionRequestDeveloperMessage {
71    fn from(value: ChatCompletionRequestDeveloperMessageContent) -> Self {
72        Self {
73            content: value,
74            name: None,
75        }
76    }
77}
78
79impl From<ChatCompletionRequestAssistantMessageContent> for ChatCompletionRequestAssistantMessage {
80    fn from(value: ChatCompletionRequestAssistantMessageContent) -> Self {
81        Self {
82            content: Some(value),
83            ..Default::default()
84        }
85    }
86}
87
88impl From<&str> for ChatCompletionRequestUserMessageContent {
89    fn from(value: &str) -> Self {
90        ChatCompletionRequestUserMessageContent::Text(value.into())
91    }
92}
93
94impl From<String> for ChatCompletionRequestUserMessageContent {
95    fn from(value: String) -> Self {
96        ChatCompletionRequestUserMessageContent::Text(value)
97    }
98}
99
100impl From<&str> for ChatCompletionRequestSystemMessageContent {
101    fn from(value: &str) -> Self {
102        ChatCompletionRequestSystemMessageContent::Text(value.into())
103    }
104}
105
106impl From<String> for ChatCompletionRequestSystemMessageContent {
107    fn from(value: String) -> Self {
108        ChatCompletionRequestSystemMessageContent::Text(value)
109    }
110}
111
112impl From<&str> for ChatCompletionRequestDeveloperMessageContent {
113    fn from(value: &str) -> Self {
114        ChatCompletionRequestDeveloperMessageContent::Text(value.into())
115    }
116}
117
118impl From<String> for ChatCompletionRequestDeveloperMessageContent {
119    fn from(value: String) -> Self {
120        ChatCompletionRequestDeveloperMessageContent::Text(value)
121    }
122}
123
124impl From<&str> for ChatCompletionRequestAssistantMessageContent {
125    fn from(value: &str) -> Self {
126        ChatCompletionRequestAssistantMessageContent::Text(value.into())
127    }
128}
129
130impl From<String> for ChatCompletionRequestAssistantMessageContent {
131    fn from(value: String) -> Self {
132        ChatCompletionRequestAssistantMessageContent::Text(value)
133    }
134}
135
136impl From<&str> for ChatCompletionRequestToolMessageContent {
137    fn from(value: &str) -> Self {
138        ChatCompletionRequestToolMessageContent::Text(value.into())
139    }
140}
141
142impl From<String> for ChatCompletionRequestToolMessageContent {
143    fn from(value: String) -> Self {
144        ChatCompletionRequestToolMessageContent::Text(value)
145    }
146}
147
148impl From<&str> for ChatCompletionRequestUserMessage {
149    fn from(value: &str) -> Self {
150        ChatCompletionRequestUserMessageContent::Text(value.into()).into()
151    }
152}
153
154impl From<String> for ChatCompletionRequestUserMessage {
155    fn from(value: String) -> Self {
156        value.as_str().into()
157    }
158}
159
160impl From<&str> for ChatCompletionRequestSystemMessage {
161    fn from(value: &str) -> Self {
162        ChatCompletionRequestSystemMessageContent::Text(value.into()).into()
163    }
164}
165
166impl From<&str> for ChatCompletionRequestDeveloperMessage {
167    fn from(value: &str) -> Self {
168        ChatCompletionRequestDeveloperMessageContent::Text(value.into()).into()
169    }
170}
171
172impl From<String> for ChatCompletionRequestSystemMessage {
173    fn from(value: String) -> Self {
174        value.as_str().into()
175    }
176}
177
178impl From<String> for ChatCompletionRequestDeveloperMessage {
179    fn from(value: String) -> Self {
180        value.as_str().into()
181    }
182}
183
184impl From<&str> for ChatCompletionRequestAssistantMessage {
185    fn from(value: &str) -> Self {
186        ChatCompletionRequestAssistantMessageContent::Text(value.into()).into()
187    }
188}
189
190impl From<String> for ChatCompletionRequestAssistantMessage {
191    fn from(value: String) -> Self {
192        value.as_str().into()
193    }
194}
195
196impl From<Vec<ChatCompletionRequestUserMessageContentPart>>
197    for ChatCompletionRequestUserMessageContent
198{
199    fn from(value: Vec<ChatCompletionRequestUserMessageContentPart>) -> Self {
200        ChatCompletionRequestUserMessageContent::Array(value)
201    }
202}
203
204impl From<ChatCompletionRequestMessageContentPartText>
205    for ChatCompletionRequestUserMessageContentPart
206{
207    fn from(value: ChatCompletionRequestMessageContentPartText) -> Self {
208        ChatCompletionRequestUserMessageContentPart::Text(value)
209    }
210}
211
212impl From<ChatCompletionRequestMessageContentPartImage>
213    for ChatCompletionRequestUserMessageContentPart
214{
215    fn from(value: ChatCompletionRequestMessageContentPartImage) -> Self {
216        ChatCompletionRequestUserMessageContentPart::ImageUrl(value)
217    }
218}
219
220impl From<ChatCompletionRequestMessageContentPartAudio>
221    for ChatCompletionRequestUserMessageContentPart
222{
223    fn from(value: ChatCompletionRequestMessageContentPartAudio) -> Self {
224        ChatCompletionRequestUserMessageContentPart::InputAudio(value)
225    }
226}
227
228impl From<&str> for ChatCompletionRequestMessageContentPartText {
229    fn from(value: &str) -> Self {
230        ChatCompletionRequestMessageContentPartText { text: value.into() }
231    }
232}
233
234impl From<String> for ChatCompletionRequestMessageContentPartText {
235    fn from(value: String) -> Self {
236        ChatCompletionRequestMessageContentPartText { text: value }
237    }
238}
239
240impl From<&str> for ChatCompletionFunctionCall {
241    fn from(value: &str) -> Self {
242        match value {
243            "auto" => Self::Auto,
244            "none" => Self::None,
245            _ => Self::Function { name: value.into() },
246        }
247    }
248}
249
250impl From<&str> for FunctionName {
251    fn from(value: &str) -> Self {
252        Self { name: value.into() }
253    }
254}
255
256impl From<String> for FunctionName {
257    fn from(value: String) -> Self {
258        Self { name: value }
259    }
260}
261
262impl From<&str> for ChatCompletionNamedToolChoice {
263    fn from(value: &str) -> Self {
264        Self {
265            function: value.into(),
266        }
267    }
268}
269
270impl From<String> for ChatCompletionNamedToolChoice {
271    fn from(value: String) -> Self {
272        Self {
273            function: value.into(),
274        }
275    }
276}
277
278impl Default for ChatCompletionRequestDeveloperMessageContent {
279    fn default() -> Self {
280        ChatCompletionRequestDeveloperMessageContent::Text("".into())
281    }
282}
283
284impl Default for ChatCompletionRequestSystemMessageContent {
285    fn default() -> Self {
286        ChatCompletionRequestSystemMessageContent::Text("".into())
287    }
288}
289
290impl Default for ChatCompletionRequestToolMessageContent {
291    fn default() -> Self {
292        ChatCompletionRequestToolMessageContent::Text("".into())
293    }
294}
295
296impl Default for ChatCompletionRequestUserMessageContent {
297    fn default() -> Self {
298        ChatCompletionRequestUserMessageContent::Text("".into())
299    }
300}
301
302impl From<&str> for ImageUrl {
303    fn from(value: &str) -> Self {
304        Self {
305            url: value.into(),
306            detail: Default::default(),
307        }
308    }
309}
310
311impl From<String> for ImageUrl {
312    fn from(value: String) -> Self {
313        Self {
314            url: value,
315            detail: Default::default(),
316        }
317    }
318}
319
320impl Display for Role {
321    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
322        write!(
323            f,
324            "{}",
325            match self {
326                Role::User => "user",
327                Role::System => "system",
328                Role::Assistant => "assistant",
329                Role::Function => "function",
330                Role::Tool => "tool",
331            }
332        )
333    }
334}