use agent_sdk::{
AgentEvent, AgentInput, CancellationToken, ThreadId, ToolContext, builder,
providers::AnthropicProvider,
};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
env_logger::init();
let api_key = std::env::var("ANTHROPIC_API_KEY")
.expect("ANTHROPIC_API_KEY environment variable must be set");
let agent = builder::<()>()
.provider(AnthropicProvider::sonnet(api_key))
.build();
let thread_id = ThreadId::new();
let tool_ctx = ToolContext::new(());
println!("Starting conversation (thread: {thread_id})\n");
let (mut events, _final_state) = agent.run(
thread_id,
AgentInput::Text("What is the capital of France? Answer in one sentence.".to_string()),
tool_ctx,
CancellationToken::new(),
);
while let Some(envelope) = events.recv().await {
match envelope.event {
AgentEvent::Text {
message_id: _,
text,
} => {
println!("Agent: {text}");
}
AgentEvent::Done {
total_turns,
total_usage,
duration,
..
} => {
println!("\n---");
println!(
"Completed in {} turns, {:.2}s",
total_turns,
duration.as_secs_f64()
);
println!(
"Tokens: {} input, {} output",
total_usage.input_tokens, total_usage.output_tokens
);
}
AgentEvent::Error { message, .. } => {
eprintln!("Error: {message}");
}
_ => {}
}
}
Ok(())
}