use super::message::*;
use super::tool::*;
use derive_builder::Builder;
use serde::Serialize;
use strum::{Display, EnumString, EnumVariantNames};
#[derive(Debug, Clone, Builder)]
#[builder(setter(into, strip_option))]
pub struct ChatRequest {
pub model: String,
#[builder(default)]
pub messages: Vec<ChatMessage>,
#[builder(default)]
pub tools: Vec<ToolDefinition>,
#[builder(default)]
pub stream: Option<bool>,
#[builder(default)]
pub temperature: Option<f64>,
}
#[derive(Debug, Clone, Serialize)]
pub struct ChatResponseFormatObject {
r#type: ChatResponseFormat,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, EnumString, Display, EnumVariantNames)]
#[serde(rename_all = "snake_case")]
pub enum ChatResponseFormat {
Text,
#[default]
Json,
}
impl ChatRequest {
pub fn new(model: impl Into<String>, messages: impl Into<Vec<ChatMessage>>) -> Self {
ChatRequestBuilder::default()
.model(model.into())
.messages(messages)
.build()
.unwrap()
}
pub fn new_with_tools(
model: impl Into<String>,
messages: impl Into<Vec<ChatMessage>>,
tools: impl Into<Vec<ToolDefinition>>,
) -> Self {
ChatRequestBuilder::default()
.model(model.into())
.messages(messages)
.tools(tools)
.build()
.unwrap()
}
}