use serde::{Deserialize, Serialize}; use std::collections::HashMap; use crate::v1::common; pub const GPT3_5_TURBO: &str = "gpt-3.5-turbo"; pub const GPT3_5_TURBO_0301: &str = "gpt-3.5-turbo-0301"; pub const GPT3_5_TURBO_0613: &str = "gpt-3.5-turbo-0613"; pub const GPT4: &str = "gpt-4"; pub const GPT4_0314: &str = "gpt-4-0314"; pub const GPT4_32K: &str = "gpt-4-32k"; pub const GPT4_32K_0314: &str = "gpt-4-32k-0314"; pub const GPT4_0613: &str = "gpt-4-0613"; #[derive(Debug, Serialize)] #[allow(non_camel_case_types)] pub enum FunctionCallType { none, auto, function { name: String }, } #[derive(Debug, Serialize)] pub struct ChatCompletionRequest { pub model: String, pub messages: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub functions: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub function_call: Option, #[serde(skip_serializing_if = "Option::is_none")] pub temperature: Option, #[serde(skip_serializing_if = "Option::is_none")] pub top_p: Option, #[serde(skip_serializing_if = "Option::is_none")] pub n: Option, #[serde(skip_serializing_if = "Option::is_none")] pub stream: Option, #[serde(skip_serializing_if = "Option::is_none")] pub stop: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub max_tokens: Option, #[serde(skip_serializing_if = "Option::is_none")] pub presence_penalty: Option, #[serde(skip_serializing_if = "Option::is_none")] pub frequency_penalty: Option, #[serde(skip_serializing_if = "Option::is_none")] pub logit_bias: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub user: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] #[allow(non_camel_case_types)] pub enum MessageRole { user, system, assistant, function, } #[derive(Debug, Serialize, Deserialize, Clone)] pub struct ChatCompletionMessage { pub role: MessageRole, pub content: String, #[serde(skip_serializing_if = "Option::is_none")] pub name: Option, #[serde(skip_serializing_if = "Option::is_none")] pub function_call: Option, } #[derive(Debug, Serialize, Deserialize)] pub struct ChatCompletionMessageForResponse { pub role: MessageRole, #[serde(skip_serializing_if = "Option::is_none")] pub content: Option, #[serde(skip_serializing_if = "Option::is_none")] pub name: Option, #[serde(skip_serializing_if = "Option::is_none")] pub function_call: Option, } #[derive(Debug, Deserialize)] pub struct ChatCompletionChoice { pub index: i64, pub message: ChatCompletionMessageForResponse, pub finish_reason: FinishReason, } #[derive(Debug, Deserialize)] pub struct ChatCompletionResponse { pub id: String, pub object: String, pub created: i64, pub model: String, pub choices: Vec, pub usage: common::Usage, } #[derive(Debug, Serialize, Deserialize)] pub struct Function { pub name: String, #[serde(skip_serializing_if = "Option::is_none")] pub description: Option, pub parameters: FunctionParameters, } #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "lowercase")] pub enum JSONSchemaType { Object, Number, String, Array, Null, Boolean, } #[derive(Debug, Serialize, Deserialize)] pub struct JSONSchemaDefine { #[serde(rename = "type")] pub schema_type: Option, #[serde(skip_serializing_if = "Option::is_none")] pub description: Option, #[serde(skip_serializing_if = "Option::is_none")] pub enum_values: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub properties: Option>>, #[serde(skip_serializing_if = "Option::is_none")] pub required: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub items: Option>, } #[derive(Debug, Serialize, Deserialize)] pub struct FunctionParameters { #[serde(rename = "type")] pub schema_type: JSONSchemaType, #[serde(skip_serializing_if = "Option::is_none")] pub properties: Option>>, #[serde(skip_serializing_if = "Option::is_none")] pub required: Option>, } #[derive(Debug, Serialize, Deserialize)] #[allow(non_camel_case_types)] pub enum FinishReason { stop, length, function_call, content_filter, null, } #[derive(Debug, Serialize, Deserialize, Clone)] pub struct FunctionCall { #[serde(skip_serializing_if = "Option::is_none")] pub name: Option, #[serde(skip_serializing_if = "Option::is_none")] pub arguments: Option, }