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