walrus_core/model/
request.rs1use crate::model::{Message, Tool, ToolChoice};
4use compact_str::CompactString;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Deserialize, Serialize)]
13pub struct Request {
14 pub model: CompactString,
16
17 #[serde(default)]
19 pub messages: Vec<Message>,
20
21 pub think: bool,
23
24 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub tools: Option<Vec<Tool>>,
27
28 #[serde(default, skip_serializing_if = "Option::is_none")]
30 pub tool_choice: Option<ToolChoice>,
31
32 pub usage: bool,
34}
35
36impl Request {
37 pub fn new(model: impl Into<CompactString>) -> Self {
39 Self {
40 model: model.into(),
41 messages: Vec::new(),
42 think: false,
43 tools: None,
44 tool_choice: None,
45 usage: false,
46 }
47 }
48
49 pub fn with_messages(mut self, messages: Vec<Message>) -> Self {
51 self.messages = messages;
52 self
53 }
54
55 pub fn with_tools(mut self, tools: Vec<Tool>) -> Self {
57 self.tools = Some(tools);
58 self
59 }
60
61 pub fn with_tool_choice(mut self, tool_choice: ToolChoice) -> Self {
63 self.tool_choice = Some(tool_choice);
64 self
65 }
66}
67
68impl Default for Request {
69 fn default() -> Self {
70 Self {
71 model: "deepseek-chat".into(),
72 messages: Vec::new(),
73 think: false,
74 tools: None,
75 tool_choice: None,
76 usage: false,
77 }
78 }
79}