open_routerer/types/
chat.rs1use super::model::Model;
2use serde::Deserialize;
3use serde::Serialize;
4
5#[derive(Debug, Serialize, Deserialize, Default)]
6pub struct ChatCompletionRequest {
7 pub model: Model,
8 pub messages: Vec<Message>,
9 #[serde(skip_serializing_if = "Option::is_none")]
11 pub stream: Option<bool>,
12 #[serde(skip_serializing_if = "Option::is_none")]
14 pub response_format: Option<String>,
15 #[serde(skip_serializing_if = "Option::is_none")]
17 pub provider: Option<String>,
18 #[serde(skip_serializing_if = "Option::is_none")]
20 pub models: Option<Vec<String>>,
21 #[serde(skip_serializing_if = "Option::is_none")]
23 pub transforms: Option<Vec<String>>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub max_tokens: Option<u32>,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct Message {
30 pub role: String,
31 pub content: String,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub name: Option<String>,
34}
35
36#[derive(Debug, Deserialize)]
38pub struct Choice {
39 pub message: Message,
40 pub finish_reason: Option<String>,
41 #[serde(rename = "native_finish_reason")]
42 pub native_finish_reason: Option<String>,
43}
44
45#[derive(Debug, Deserialize)]
47pub struct Usage {
48 pub prompt_tokens: u32,
49 pub completion_tokens: u32,
50 pub total_tokens: u32,
51}
52
53#[derive(Debug, Deserialize)]
55pub struct ChatCompletionResponse {
56 pub id: String,
57 pub choices: Vec<Choice>,
58 pub created: i64,
59 pub model: String,
60 pub usage: Option<Usage>,
61}
62
63#[derive(Debug, Deserialize)]
65pub struct ChatCompletionChunk {
66 pub id: String,
67 pub choices: Vec<Choice>,
68}