1use anthropic_api::{messages::*, Credentials};
25use std::io::{stdin, stdout, Write};
26
27#[tokio::main]
28async fn main() {
29 let credentials = Credentials::from_env();
30
31 let mut messages = vec![Message {
32 role: MessageRole::User,
33 content: MessageContent::Text(
34 "You are a helpful AI assistant. Please introduce yourself briefly.".to_string(),
35 ),
36 }];
37
38 let mut stream = MessagesAPI::builder("claude-3-7-sonnet-20250219", messages.clone(), 1024)
40 .credentials(credentials.clone())
41 .create_stream()
42 .await
43 .unwrap();
44
45 print!("Assistant: ");
47 stdout().flush().unwrap();
48 while let Some(event) = stream.recv().await {
49 match event {
50 StreamEvent::ContentBlockDelta { delta, .. } => {
51 if let ContentBlockDelta::Text { text } = delta {
52 print!("{}", text);
53 stdout().flush().unwrap();
54 }
55 }
56 StreamEvent::MessageStop => {
57 println!();
58 }
59 _ => {}
60 }
61 }
62
63 loop {
65 print!("\nUser: ");
66 stdout().flush().unwrap();
67
68 let mut user_input = String::new();
69 stdin().read_line(&mut user_input).unwrap();
70
71 messages.push(Message {
73 role: MessageRole::User,
74 content: MessageContent::Text(user_input),
75 });
76
77 let mut stream = MessagesAPI::builder("claude-3-7-sonnet-20250219", messages.clone(), 1024)
79 .credentials(credentials.clone())
80 .create_stream()
81 .await
82 .unwrap();
83
84 print!("\nAssistant: ");
86 stdout().flush().unwrap();
87 let mut full_response = String::new();
88 while let Some(event) = stream.recv().await {
89 match event {
90 StreamEvent::ContentBlockDelta { delta, .. } => {
91 if let ContentBlockDelta::Text { text } = delta {
92 print!("{}", text);
93 stdout().flush().unwrap();
94 full_response.push_str(&text);
95 }
96 }
97 StreamEvent::MessageStop => {
98 println!();
99 }
100 _ => {}
101 }
102 }
103
104 messages.push(Message {
106 role: MessageRole::Assistant,
107 content: MessageContent::Text(full_response),
108 });
109 }
110}