1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct ChatRequest {
8 pub model: String,
9 pub messages: Vec<crate::Message>,
10 pub tools: Option<Vec<ToolDefinition>>,
11 pub temperature: Option<f64>,
12 pub tool_choice: Option<ToolChoice>,
13 pub stop_sequences: Option<Vec<String>>,
14 pub prefill: Option<String>,
15}
16
17impl Default for ChatRequest {
18 fn default() -> Self {
19 Self {
20 model: String::new(),
21 messages: Vec::new(),
22 tools: None,
23 temperature: Some(0.6),
24 tool_choice: None,
25 stop_sequences: None,
26 prefill: None,
27 }
28 }
29}
30
31impl ChatRequest {
32 pub fn user_prompt(prompt: String) -> Self {
34 Self {
35 messages: vec![crate::Message::User {
36 content: crate::text_block(prompt),
37 }],
38 ..Default::default()
39 }
40 }
41
42 pub fn with_temperature(mut self, temp: f64) -> Self {
43 self.temperature = Some(temp);
44 self
45 }
46
47 pub fn with_model(mut self, model: String) -> Self {
48 self.model = model;
49 self
50 }
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
55pub enum ToolChoice {
56 Tool { name: String },
57 Any,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct ToolDefinition {
63 pub name: String,
64 pub description: String,
65 pub parameters: serde_json::Value,
66}