1mod private
9{
10 use serde::{ Serialize, Deserialize };
12 use serde_json::Value;
13 use former::Former;
14 use crate::components::tools::FunctionTool;
15
16 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq, Former ) ]
21 pub struct ChatCompletionRequestMessage
22 {
23 pub role : String,
25 #[ serde( skip_serializing_if = "Option::is_none" ) ]
27 pub content : Option< ChatCompletionRequestMessageContent >,
28 #[ serde( skip_serializing_if = "Option::is_none" ) ]
30 pub name : Option< String >,
31 #[ serde( skip_serializing_if = "Option::is_none" ) ]
33 pub tool_calls : Option< Vec< ChatCompletionMessageToolCall > >,
34 #[ serde( skip_serializing_if = "Option::is_none" ) ]
36 pub tool_call_id : Option< String >,
37 }
38
39 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
45 #[ serde( untagged ) ]
46 pub enum ChatCompletionRequestMessageContent
47 {
48 Text( String ),
50 Parts( Vec< ChatCompletionRequestMessageContentPart > ),
52 }
53
54 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
60 #[ serde( tag = "type" ) ]
61 pub enum ChatCompletionRequestMessageContentPart
62 {
63 #[ serde( rename = "text" ) ]
65 Text
66 {
67 text : String
69 },
70 #[ serde( rename = "image_url" ) ]
72 ImageUrl
73 {
74 image_url : ChatCompletionRequestMessageContentImageUrl
76 },
77 }
78
79 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq, Former ) ]
84 pub struct ChatCompletionRequestMessageContentImageUrl
85 {
86 pub url : String,
88 #[ serde( skip_serializing_if = "Option::is_none" ) ]
90 pub detail : Option< String >,
91 }
92
93 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq, Former ) ]
98 pub struct ChatCompletionMessageToolCall
99 {
100 pub id : String,
102 pub r#type : String,
104 pub function : ChatCompletionMessageToolCallFunction,
106 }
107
108 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq, Former ) ]
113 pub struct ChatCompletionMessageToolCallFunction
114 {
115 pub name : String,
117 pub arguments : String,
119 }
120
121 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq, Former ) ]
126 pub struct ChatCompletionTool
127 {
128 pub r#type : String,
130 #[ serde( skip_serializing_if = "Option::is_none" ) ]
132 pub function : Option< FunctionTool >,
133 }
134
135 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
140 #[ serde( untagged ) ]
141 pub enum ToolChoiceOption
142 {
143 String( String ),
145 Object( ToolChoiceObject ),
147 }
148
149 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq, Former ) ]
154 pub struct ToolChoiceObject
155 {
156 pub r#type : String,
158 pub function : ToolChoiceFunction,
160 }
161
162 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq, Former ) ]
167 pub struct ToolChoiceFunction
168 {
169 pub name : String,
171 }
172
173 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq, Former ) ]
178 pub struct ChatCompletionRequest
179 {
180 pub model : String,
182 pub messages : Vec< ChatCompletionRequestMessage >,
184 #[ serde( skip_serializing_if = "Option::is_none" ) ]
186 pub temperature : Option< f32 >,
187 #[ serde( skip_serializing_if = "Option::is_none" ) ]
189 pub top_p : Option< f32 >,
190 #[ serde( skip_serializing_if = "Option::is_none" ) ]
192 pub max_tokens : Option< i32 >,
193 #[ serde( skip_serializing_if = "Option::is_none" ) ]
195 pub n : Option< i32 >,
196 #[ serde( skip_serializing_if = "Option::is_none" ) ]
198 pub stop : Option< Vec< String > >,
199 #[ serde( skip_serializing_if = "Option::is_none" ) ]
201 pub stream : Option< bool >,
202 #[ serde( skip_serializing_if = "Option::is_none" ) ]
204 pub system_prompt : Option< String >,
205 #[ serde( skip_serializing_if = "Option::is_none" ) ]
207 pub user : Option< String >,
208 #[ serde( skip_serializing_if = "Option::is_none" ) ]
210 pub tools : Option< Vec< ChatCompletionTool > >,
211 #[ serde( skip_serializing_if = "Option::is_none" ) ]
213 pub tool_choice : Option< ToolChoiceOption >,
214 #[ serde( skip_serializing_if = "Option::is_none" ) ]
216 pub response_format : Option< ChatCompletionResponseFormat >,
217 #[ serde( skip_serializing_if = "Option::is_none" ) ]
219 pub seed : Option< i64 >,
220 #[ serde( skip_serializing_if = "Option::is_none" ) ]
222 pub logit_bias : Option< Value >,
223 #[ serde( skip_serializing_if = "Option::is_none" ) ]
225 pub logprobs : Option< bool >,
226 #[ serde( skip_serializing_if = "Option::is_none" ) ]
228 pub top_logprobs : Option< i32 >,
229 }
230
231 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq, Former ) ]
236 pub struct ChatCompletionResponseFormat
237 {
238 pub r#type : String,
240 }
241
242 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
247 pub struct CreateChatCompletionResponse
248 {
249 pub id : String,
251 pub choices : Vec< ChatCompletionChoice >,
253 #[ serde( rename = "created" ) ]
255 pub created_at : i64,
256 pub model : String,
258 pub object : String,
260 #[ serde( skip_serializing_if = "Option::is_none" ) ]
262 pub system_fingerprint : Option< String >,
263 #[ serde( skip_serializing_if = "Option::is_none" ) ]
265 pub usage : Option< ChatCompletionUsage >,
266 }
267
268 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
273 pub struct ChatCompletionChoice
274 {
275 pub finish_reason : String,
277 pub index : i32,
279 pub message : ChatCompletionResponseMessage,
281 #[ serde( skip_serializing_if = "Option::is_none" ) ]
283 pub logprobs : Option< ChatCompletionLogprobs >,
284 }
285
286 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
291 pub struct ChatCompletionResponseMessage
292 {
293 #[ serde( skip_serializing_if = "Option::is_none" ) ]
295 pub content : Option< String >,
296 pub role : String,
298 #[ serde( skip_serializing_if = "Option::is_none" ) ]
300 pub tool_calls : Option< Vec< ChatCompletionMessageToolCall > >,
301 }
302
303 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
308 pub struct ChatCompletionUsage
309 {
310 pub completion_tokens : i32,
312 pub prompt_tokens : i32,
314 pub total_tokens : i32,
316 }
317
318 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
323 pub struct ChatCompletionLogprobs
324 {
325 pub content : Vec< ChatCompletionLogprobsContent >,
327 }
328
329 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
334 pub struct ChatCompletionLogprobsContent
335 {
336 pub token : String,
338 pub logprob : f32,
340 pub top_logprobs : Vec< ChatCompletionLogprobsTopLogprob >,
342 }
343
344 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
349 pub struct ChatCompletionLogprobsTopLogprob
350 {
351 pub token : String,
353 pub logprob : f32,
355 }
356
357 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
362 pub struct ChatCompletionStreamResponse
363 {
364 pub id : String,
366 pub choices : Vec< ChatCompletionStreamChoice >,
368 #[ serde( rename = "created" ) ]
370 pub created_at : i64,
371 pub model : String,
373 pub object : String,
375 #[ serde( skip_serializing_if = "Option::is_none" ) ]
377 pub system_fingerprint : Option< String >,
378 }
379
380 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
385 pub struct ChatCompletionStreamChoice
386 {
387 #[ serde( skip_serializing_if = "Option::is_none" ) ]
389 pub finish_reason : Option< String >,
390 pub index : i32,
392 pub delta : ChatCompletionStreamResponseMessage,
394 #[ serde( skip_serializing_if = "Option::is_none" ) ]
396 pub logprobs : Option< ChatCompletionLogprobs >,
397 }
398
399 #[ derive( Debug, Serialize, Deserialize, Clone, PartialEq ) ]
404 pub struct ChatCompletionStreamResponseMessage
405 {
406 #[ serde( skip_serializing_if = "Option::is_none" ) ]
408 pub content : Option< String >,
409 #[ serde( skip_serializing_if = "Option::is_none" ) ]
411 pub role : Option< String >,
412 #[ serde( skip_serializing_if = "Option::is_none" ) ]
414 pub tool_calls : Option< Vec< ChatCompletionMessageToolCall > >,
415 }
416}
417
418crate ::mod_interface!
419{
420 exposed use
421 {
422 ChatCompletionRequestMessage,
423 ChatCompletionRequestMessageContent,
424 ChatCompletionRequestMessageContentPart,
425 ChatCompletionRequestMessageContentImageUrl,
426 ChatCompletionMessageToolCall,
427 ChatCompletionMessageToolCallFunction,
428 ChatCompletionTool,
429 ToolChoiceOption,
430 ToolChoiceObject,
431 ToolChoiceFunction,
432 ChatCompletionRequest,
433 ChatCompletionResponseFormat,
434 CreateChatCompletionResponse,
435 ChatCompletionChoice,
436 ChatCompletionResponseMessage,
437 ChatCompletionUsage,
438 ChatCompletionLogprobs,
439 ChatCompletionLogprobsContent,
440 ChatCompletionLogprobsTopLogprob,
441 ChatCompletionStreamResponse,
442 ChatCompletionStreamChoice,
443 ChatCompletionStreamResponseMessage,
444 };
445}