use anthropic_api::{messages::*, Credentials};
use std::io::{stdin, stdout, Write};
#[tokio::main]
async fn main() {
let credentials = Credentials::from_env();
let mut messages = vec![Message {
role: MessageRole::User,
content: MessageContent::Text(
"You are a helpful AI assistant. Please introduce yourself briefly.".to_string(),
),
}];
let mut stream =
MessagesResponse::builder("claude-3-7-sonnet-20250219", messages.clone(), 1024)
.credentials(credentials.clone())
.create_stream()
.await
.unwrap();
print!("Assistant: ");
stdout().flush().unwrap();
while let Some(event) = stream.recv().await {
match event {
StreamEvent::ContentBlockDelta { delta, .. } => {
if let ContentBlockDelta::Text { text } = delta {
print!("{}", text);
stdout().flush().unwrap();
}
}
StreamEvent::MessageStop => {
println!();
}
_ => {}
}
}
loop {
print!("\nUser: ");
stdout().flush().unwrap();
let mut user_input = String::new();
stdin().read_line(&mut user_input).unwrap();
messages.push(Message {
role: MessageRole::User,
content: MessageContent::Text(user_input),
});
let mut stream =
MessagesResponse::builder("claude-3-7-sonnet-20250219", messages.clone(), 1024)
.credentials(credentials.clone())
.create_stream()
.await
.unwrap();
print!("\nAssistant: ");
stdout().flush().unwrap();
let mut full_response = String::new();
while let Some(event) = stream.recv().await {
match event {
StreamEvent::ContentBlockDelta { delta, .. } => {
if let ContentBlockDelta::Text { text } = delta {
print!("{}", text);
stdout().flush().unwrap();
full_response.push_str(&text);
}
}
StreamEvent::MessageStop => {
println!();
}
_ => {}
}
}
messages.push(Message {
role: MessageRole::Assistant,
content: MessageContent::Text(full_response),
});
}
}