@@ -41,7 +41,8 @@ The DeepSeek API SDK supports both asynchronous and synchronous usage patterns i
4141``` rust
4242use anyhow :: Result ;
4343use clap :: Parser ;
44- use deepseek_api :: {Client , request :: MessageRequest , response :: ModelType };
44+ use deepseek_api :: response :: ModelType ;
45+ use deepseek_api :: {ClientBuilder , CompletionsRequestBuilder , RequestBuilder };
4546use std :: io :: {stdin, stdout, Write };
4647use std :: vec;
4748
@@ -55,7 +56,7 @@ struct Args {
5556#[tokio:: main]
5657async fn main () -> Result <()> {
5758 let args = Args :: parse ();
58- let client = Client :: new (& args . api_key) ;
59+ let client = ClientBuilder :: new (args . api_key. clone ()) . build () ? ;
5960 loop {
6061 let mut buffer = String :: new ();
6162
@@ -82,13 +83,17 @@ async fn main() -> Result<()> {
8283 println! (" models {:?}" , models );
8384 }
8485 word => {
85- let mut completions = client . chat ();
86- let builder = completions . chat_builder (vec! []). append_user_message (word );
87- let resp = completions . create (builder ). await ? . must_response ();
86+ let completions = client . chat ();
87+ let resp = CompletionsRequestBuilder :: new (vec! [])
88+ . use_model (ModelType :: DeepSeekChat )
89+ . append_user_message (word )
90+ . do_request (& completions )
91+ . await ?
92+ . must_response ();
8893
8994 let mut resp_words = vec! [];
9095 for msg in resp . choices. iter () {
91- history . push (MessageRequest :: Assistant ( msg . message. as_ref (). expect (" message exit" ). clone () ));
96+ history . push (msg . message. as_ref (). expect (" message exit" ). clone ());
9297 resp_words . push (msg . message. as_ref (). expect (" message" ). content. clone ());
9398 }
9499
@@ -100,7 +105,6 @@ async fn main() -> Result<()> {
100105 }
101106 Ok (())
102107}
103-
104108```
105109
106110### Synchronous Example (Requires Feature Flag)
@@ -112,8 +116,8 @@ deepseek-api = { version = "xx", default-features = false, features = ["is_sync"
112116``` rs
113117use anyhow :: Result ;
114118use clap :: Parser ;
115- use deepseek_api :: Client ;
116119use deepseek_api :: {request :: MessageRequest , response :: ModelType };
120+ use deepseek_api :: {ClientBuilder , CompletionsRequestBuilder , RequestBuilder };
117121use std :: vec;
118122
119123#[derive(Parser , Debug )]
@@ -125,29 +129,32 @@ struct Args {
125129
126130fn main () -> Result <()> {
127131 let args = Args :: parse ();
128- let client = Client :: new (& args . api_key);
132+
133+ let client = ClientBuilder :: new (args . api_key. clone ())
134+ . timeout (300 )
135+ . build ()? ;
129136 let mut history = vec! [];
130137
131- let mut completions = client . chat ();
132- let builder = completions
133- . chat_builder ( vec! [] )
134- . use_model ( ModelType :: DeepSeekChat )
135- . append_user_message ( " hello " );
136- let resp = completions . create ( builder ) ? . must_response ();
138+ let completions = client . chat ();
139+ let resp = CompletionsRequestBuilder :: new ( vec! [])
140+ . use_model ( ModelType :: DeepSeekReasoner )
141+ . append_user_message ( " hello world " )
142+ . do_request ( & completions ) ?
143+ . must_response ();
137144
138145 let mut resp_words = vec! [];
139146 for msg in resp . choices. iter () {
140- history . push (MessageRequest :: Assistant (msg . message. as_ref (). expect (" message exit" ). clone ()));
147+ history . push (MessageRequest :: Assistant (
148+ msg . message. as_ref (). expect (" message exit" ). clone (),
149+ ));
141150 resp_words . push (msg . message. as_ref (). expect (" message" ). content. clone ());
142151 }
143-
144152 for msg in resp_words . iter () {
145153 msg . split (" \ n" ). for_each (| x | println! (" {}" , x ));
146154 }
147155
148156 Ok (())
149157}
150-
151158```
152159
153160### Function Calling
@@ -157,12 +164,14 @@ Use the function calling interface to define and invoke tools via the API.
157164``` rust
158165use anyhow :: Result ;
159166use clap :: Parser ;
160- use deepseek_api :: request :: {Function , ToolMessageRequest , ToolObject , ToolType , UserMessageRequest };
161- use deepseek_api :: response :: FinishReason ;
162- use deepseek_api :: Client ;
163167use deepseek_api :: request :: MessageRequest ;
164- use std :: vec;
168+ use deepseek_api :: request :: {
169+ Function , ToolMessageRequest , ToolObject , ToolType , UserMessageRequest ,
170+ };
171+ use deepseek_api :: response :: FinishReason ;
172+ use deepseek_api :: {ClientBuilder , CompletionsRequestBuilder , RequestBuilder };
165173use schemars :: schema :: SchemaObject ;
174+ use std :: vec;
166175
167176#[derive(Parser , Debug )]
168177#[command(version, about, long_about = None )]
@@ -179,8 +188,9 @@ struct Args {
179188#[tokio:: main]
180189async fn main () -> Result <()> {
181190 let args = Args :: parse ();
182- let client = Client :: new (& args . api_key);
183- let parameters : SchemaObject = serde_json :: from_str (r # " {
191+ let client = ClientBuilder :: new (args . api_key. clone ()). build ()? ;
192+ let parameters : SchemaObject = serde_json :: from_str (
193+ r # " {
184194 "type": "object",
185195 "properties": {
186196 "location": {
@@ -194,29 +204,32 @@ async fn main() -> Result<()> {
194204 }
195205 },
196206 "required": ["location"]
197- }" # )? ;
207+ }" # ,
208+ )? ;
198209
199- let tool_object = ToolObject {
210+ let tool_object = ToolObject {
200211 tool_type : ToolType :: Function ,
201- function : Function {
212+ function : Function {
202213 name : " get_weather" . to_string (),
203- description : " Get weather of an location, the user shoud supply a location first" . to_string (),
204- parameters
214+ description : " Get weather of an location, the user shoud supply a location first"
215+ . to_string (),
216+ parameters ,
205217 },
206218 };
207-
208- let mut messages = vec! [
209- MessageRequest :: User (UserMessageRequest :: new (
210- " How's the weather in Hangzhou?"
211- ))
212- ];
213- let mut completetion = client . chat ();
214- let req = client . chat (). chat_builder (messages . clone ()). tools (vec! [tool_object . clone ()]);
215- let resp = completetion . create (req ). await ? . must_response ();
219+
220+ let mut messages = vec! [MessageRequest :: User (UserMessageRequest :: new (
221+ " How's the weather in Hangzhou?" ,
222+ ))];
223+ let completetion = client . chat ();
224+ let resp = CompletionsRequestBuilder :: new (messages . clone ())
225+ . tools (vec! [tool_object . clone ()])
226+ . do_request (& completetion )
227+ . await ?
228+ . must_response ();
216229 let mut id = String :: new ();
217230 if resp . choices[0 ]. finish_reason == FinishReason :: ToolCalls {
218231 if let Some (msg ) = & resp . choices[0 ]. message {
219- if let Some (tool ) = & msg . tool_calls {
232+ if let Some (tool ) = & msg . tool_calls {
220233 id = tool [0 ]. id. clone ();
221234 println! (" Function id: {}" , id );
222235 println! (" Function name: {}" , tool [0 ]. function. name);
@@ -226,10 +239,16 @@ async fn main() -> Result<()> {
226239 }
227240 }
228241
229- messages . push ( MessageRequest :: Tool (ToolMessageRequest :: new (" 24℃" , & id )));
230- let req = client . chat (). chat_builder (messages . clone ()). tools (vec! [tool_object . clone ()]);
231- let resp = completetion . create (req ). await ? . must_response ();
232- println! (" Reply with my function: {:?}" , resp . choices[0 ]. message. as_ref (). unwrap (). content);
242+ messages . push (MessageRequest :: Tool (ToolMessageRequest :: new (" 24℃" , & id )));
243+ let resp = CompletionsRequestBuilder :: new (messages . clone ())
244+ . tools (vec! [tool_object . clone ()])
245+ . do_request (& completetion )
246+ . await ?
247+ . must_response ();
248+ println! (
249+ " Reply with my function: {:?}" ,
250+ resp . choices[0 ]. message. as_ref (). unwrap (). content
251+ );
233252 Ok (())
234253}
235254```
0 commit comments