use serde::{Deserialize, Serialize}; use crate::v1::common; #[derive(Debug)] pub struct ChatCompletionParams { pub tools: Option, pub temperature: Option, pub max_tokens: Option, pub top_p: Option, pub random_seed: Option, pub stream: Option, pub safe_prompt: Option, } impl Default for ChatCompletionParams { fn default() -> Self { Self { tools: None, temperature: None, max_tokens: None, top_p: None, random_seed: None, stream: None, safe_prompt: None, } } } #[derive(Debug, Serialize, Deserialize)] pub struct ChatCompletionRequest { pub messages: Vec, pub model: String, #[serde(skip_serializing_if = "Option::is_none")] pub tools: Option, #[serde(skip_serializing_if = "Option::is_none")] pub temperature: Option, #[serde(skip_serializing_if = "Option::is_none")] pub max_tokens: Option, #[serde(skip_serializing_if = "Option::is_none")] pub top_p: Option, #[serde(skip_serializing_if = "Option::is_none")] pub random_seed: Option, #[serde(skip_serializing_if = "Option::is_none")] pub stream: Option, #[serde(skip_serializing_if = "Option::is_none")] pub safe_prompt: Option, // TODO Check that prop (seen in official Python client but not in API doc). // pub tool_choice: Option, // TODO Check that prop (seen in official Python client but not in API doc). // pub response_format: Option, } impl ChatCompletionRequest { pub fn new( model: String, messages: Vec, options: Option, ) -> Self { let ChatCompletionParams { tools, temperature, max_tokens, top_p, random_seed, stream, safe_prompt, } = options.unwrap_or_default(); Self { messages, model, tools, temperature, max_tokens, top_p, random_seed, stream, safe_prompt, } } } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ChatCompletionResponse { pub id: String, pub object: String, /// Unix timestamp (in seconds). pub created: u32, pub model: String, pub choices: Vec, pub usage: common::ResponseUsage, } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ChatCompletionChoice { pub index: u32, pub message: ChatCompletionMessage, pub finish_reason: String, // TODO Check that prop (seen in API responses but undocumented). // pub logprobs: ??? } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ChatCompletionMessage { pub role: ChatCompletionMessageRole, pub content: String, } #[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)] #[allow(non_camel_case_types)] pub enum ChatCompletionMessageRole { assistant, user, }