#[derive(serde::Serialize, Default)]
pub enum Model {
#[default]
#[serde(rename = "gpt-3.5-turbo")]
Gpt35Turbo,
#[serde(rename = "gpt-3.5-turbo-0301")]
Gpt35Turbo0301,
#[serde(rename = "gpt-4")]
Gpt4,
#[serde(rename = "gpt-4-0314")]
Gpt4_0314,
#[serde(rename = "gpt-4-32k")]
Gpt4_32k,
#[serde(rename = "gpt-4-32k-0314")]
Gpt4_32k0314,
}
#[derive(serde::Deserialize)]
pub struct Choice {
pub index: i32,
pub message: Message,
pub finish_reason: String,
}
#[derive(serde::Deserialize, serde::Serialize)]
pub struct Message {
pub role: String,
pub content: String,
}
#[derive(serde::Deserialize)]
pub struct Usage {
pub prompt_tokens: i32,
pub completion_tokens: i32,
pub total_tokens: i32,
}
#[derive(serde::Serialize, Default)]
pub struct Request {
pub model: Model,
pub messages: Vec<Message>,
#[serde(skip_serializing_if = "Option::is_none")]
pub temperature: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub top_p: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub n: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_tokens: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub presence_penalty: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub frequency_penalty: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<String>,
}
#[derive(serde::Deserialize)]
pub struct Response {
pub id: String,
pub object: String,
pub created: i64,
pub choices: Vec<Choice>,
pub usage: Usage,
}