streaming_usage/
streaming_usage.rs1use anthropic_sdk::Client;
4use dotenv::dotenv;
5use serde_json::json;
6use std::sync::{Arc, Mutex};
7
8#[tokio::main]
9async fn main() -> Result<(), Box<dyn std::error::Error>> {
10 dotenv().ok();
11 let secret_key = std::env::var("ANTHROPIC_API_KEY").unwrap_or_default();
12
13 let request = Client::new()
14 .auth(secret_key.as_str())
15 .model("claude-3-opus-20240229")
16 .messages(&json!([
17 {"role": "user", "content": "Write me a poem about bravery"}
18 ]))
19 .system("Make it sound like Edgar Allan Poe")
20 .temperature(0.1)
21 .max_tokens(1024)
22 .stream(true)
23 .build()?;
24
25 let message = Arc::new(Mutex::new(String::new()));
26 let message_clone = message.clone();
27
28 if let Err(error) = request
30 .execute(move |text| {
31 let message_clone = message_clone.clone();
32 async move {
33 println!("{text}");
34
35 {
36 let mut message = message_clone.lock().unwrap();
37 *message = format!("{}{}", *message, text);
38 drop(message);
39 }
40 }
43 })
44 .await
45 {
46 eprintln!("Error: {error}");
47 }
48
49 let final_message = message.lock().unwrap();
50 println!("Message: {}", *final_message); Ok(())
53}