1use serde::{Deserialize, Serialize};
4
5use crate::prelude::*;
6
7#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
9#[serde(untagged)]
10pub enum Content {
11 Text(String),
13 Parts(Vec<ContentPart>),
15}
16
17impl Default for Content {
18 fn default() -> Self {
19 Content::Text(String::new())
20 }
21}
22
23impl From<&str> for Content {
24 fn from(s: &str) -> Self {
25 Content::Text(s.to_string())
26 }
27}
28
29impl From<String> for Content {
30 fn from(s: String) -> Self {
31 Content::Text(s)
32 }
33}
34
35#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
37pub struct ContentPart {
38 #[serde(rename = "type")]
40 pub content_type: String,
41
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub text: Option<String>,
45
46 #[serde(skip_serializing_if = "Option::is_none")]
48 pub image_url: Option<ImageUrl>,
49
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub detail: Option<String>,
53
54 #[serde(skip_serializing_if = "Option::is_none")]
56 pub text_file: Option<String>,
57
58 #[serde(skip_serializing_if = "Option::is_none")]
60 pub file: Option<FileRef>,
61}
62
63#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
65pub struct ImageUrl {
66 pub url: String,
68
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub detail: Option<String>,
72}
73
74#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
76pub struct FileRef {
77 pub file_id: String,
79}
80
81#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
83pub struct StreamOptions {
84 pub include_usage: bool,
87}
88
89#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
91#[serde(tag = "type", rename_all = "snake_case")]
92pub enum ResponseFormat {
93 #[default]
95 Text,
96 JsonObject,
99 JsonSchema {
101 json_schema: serde_json::Value,
103 },
104}
105
106#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
108pub struct Annotation {
109 #[serde(rename = "type")]
111 pub annotation_type: String,
112
113 pub url: String,
115
116 #[serde(skip_serializing_if = "Option::is_none")]
118 pub title: Option<String>,
119
120 #[serde(skip_serializing_if = "Option::is_none")]
122 pub start_index: Option<i32>,
123
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub end_index: Option<i32>,
127}
128
129#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
131pub struct IncompleteDetails {
132 pub reason: String,
134}
135
136#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
138pub struct ApiKey {
139 pub redacted_api_key: String,
141
142 pub user_id: String,
144
145 pub name: String,
147
148 pub create_time: String,
150
151 pub modify_time: String,
153
154 pub modified_by: String,
156
157 pub team_id: String,
159
160 pub acls: Vec<String>,
162
163 pub api_key_id: String,
165
166 pub team_blocked: bool,
168
169 pub api_key_blocked: bool,
171
172 pub api_key_disabled: bool,
174}
175
176#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
178pub struct CompleteRequest {
179 #[serde(skip_serializing_if = "Option::is_none")]
181 pub model: Option<String>,
182
183 #[serde(skip_serializing_if = "Option::is_none")]
185 pub prompt: Option<String>,
186
187 #[serde(skip_serializing_if = "Option::is_none")]
189 pub max_tokens_to_sample: Option<i32>,
190
191 #[serde(skip_serializing_if = "Option::is_none")]
193 pub temperature: Option<f32>,
194
195 #[serde(skip_serializing_if = "Option::is_none")]
197 pub top_p: Option<f32>,
198
199 #[serde(skip_serializing_if = "Option::is_none")]
201 pub top_k: Option<i32>,
202
203 #[serde(skip_serializing_if = "Option::is_none")]
205 pub stop_sequences: Option<Vec<String>>,
206
207 #[serde(skip_serializing_if = "Option::is_none")]
209 pub stream: Option<bool>,
210
211 #[serde(skip_serializing_if = "Option::is_none")]
213 pub metadata: Option<MessageMetadata>,
214}
215
216#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
218pub struct CompleteResponse {
219 #[serde(rename = "type")]
221 pub response_type: String,
222
223 pub id: String,
225
226 pub completion: String,
228
229 pub model: String,
231
232 #[serde(skip_serializing_if = "Option::is_none")]
234 pub stop_reason: Option<String>,
235}
236
237#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
239pub struct MessageMetadata {
240 #[serde(skip_serializing_if = "Option::is_none")]
242 pub user_id: Option<String>,
243}
244
245#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
247pub struct SampleRequest {
248 #[serde(skip_serializing_if = "Option::is_none")]
250 pub model: Option<String>,
251
252 #[serde(skip_serializing_if = "Option::is_none")]
254 pub prompt: Option<SampleContent>,
255
256 #[serde(skip_serializing_if = "Option::is_none")]
258 pub max_tokens: Option<i32>,
259
260 #[serde(skip_serializing_if = "Option::is_none")]
262 pub temperature: Option<f32>,
263
264 #[serde(skip_serializing_if = "Option::is_none")]
266 pub top_p: Option<f32>,
267
268 #[serde(skip_serializing_if = "Option::is_none")]
270 pub n: Option<i32>,
271
272 #[serde(skip_serializing_if = "Option::is_none")]
274 pub stream: Option<bool>,
275
276 #[serde(skip_serializing_if = "Option::is_none")]
278 pub stream_options: Option<StreamOptions>,
279
280 #[serde(skip_serializing_if = "Option::is_none")]
282 pub stop: Option<Vec<String>>,
283
284 #[serde(skip_serializing_if = "Option::is_none")]
286 pub presence_penalty: Option<f32>,
287
288 #[serde(skip_serializing_if = "Option::is_none")]
290 pub frequency_penalty: Option<f32>,
291
292 #[serde(skip_serializing_if = "Option::is_none")]
294 pub echo: Option<bool>,
295
296 #[serde(skip_serializing_if = "Option::is_none")]
298 pub logprobs: Option<bool>,
299
300 #[serde(skip_serializing_if = "Option::is_none")]
302 pub best_of: Option<i32>,
303
304 #[serde(skip_serializing_if = "Option::is_none")]
306 pub logit_bias: Option<serde_json::Value>,
307
308 #[serde(skip_serializing_if = "Option::is_none")]
310 pub seed: Option<i32>,
311
312 #[serde(skip_serializing_if = "Option::is_none")]
314 pub suffix: Option<String>,
315
316 #[serde(skip_serializing_if = "Option::is_none")]
318 pub user: Option<String>,
319}
320
321#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
323#[serde(untagged)]
324pub enum SampleContent {
325 Text(String),
327 Array(Vec<String>),
329}
330
331impl Default for SampleContent {
332 fn default() -> Self {
333 SampleContent::Text(String::new())
334 }
335}
336
337#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
339pub struct SampleResponse {
340 pub id: String,
342
343 pub object: String,
345
346 pub created: i64,
348
349 pub model: String,
351
352 pub choices: Vec<SampleChoice>,
354
355 #[serde(skip_serializing_if = "Option::is_none")]
357 pub system_fingerprint: Option<String>,
358
359 #[serde(skip_serializing_if = "Option::is_none")]
361 pub usage: Option<crate::usage::Usage>,
362}
363
364#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
366pub struct SampleChoice {
367 pub index: i32,
369
370 pub text: String,
372
373 pub finish_reason: String,
375}
376
377#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
379pub struct StartDeferredChatResponse {
380 pub request_id: String,
382}
383
384#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
386pub struct DocumentsSource {
387 pub collection_ids: Vec<String>,
389}
390
391#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
393pub enum RankingMetric {
394 #[default]
395 #[serde(rename = "RANKING_METRIC_UNKNOWN")]
396 Unknown,
397 #[serde(rename = "RANKING_METRIC_L2_DISTANCE")]
398 L2Distance,
399 #[serde(rename = "RANKING_METRIC_COSINE_SIMILARITY")]
400 CosineSimilarity,
401}
402
403#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
405#[serde(untagged)]
406pub enum SystemMessageContent {
407 Text(String),
409 Parts(Vec<SystemMessagePart>),
411}
412
413impl Default for SystemMessageContent {
414 fn default() -> Self {
415 SystemMessageContent::Text(String::new())
416 }
417}
418
419#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
421pub struct SystemMessagePart {
422 #[serde(rename = "type")]
424 pub part_type: String,
425
426 pub text: String,
428
429 #[serde(skip_serializing_if = "Option::is_none")]
431 pub cache_control: Option<serde_json::Value>,
432}
433
434#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
436pub struct DebugOutput {
437 pub attempts: i32,
439
440 pub request: String,
442
443 pub prompt: String,
445
446 pub engine_request: String,
448
449 pub responses: Vec<String>,
451
452 pub chunks: Vec<String>,
454
455 pub cache_read_count: i32,
457
458 pub cache_read_input_bytes: i64,
460
461 pub cache_write_count: i32,
463
464 pub cache_write_input_bytes: i64,
466
467 pub lb_address: String,
469
470 pub sampler_tag: String,
472
473 pub sampler_checkpoint_mount: String,
475}