use mixtape_core::{Agent, ClaudeHaiku4_5};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Multi-Turn Conversation Demo ===\n");
println!("This example shows how the agent remembers context");
println!("across multiple run() calls - no persistence needed!\n");
let agent = Agent::builder().bedrock(ClaudeHaiku4_5).build().await?;
println!("You: Hello! My name is Alice and I love Rust programming.");
let response1 = agent
.run("Hello! My name is Alice and I love Rust programming.")
.await?;
println!("Agent: {}\n", response1);
let usage = agent.get_context_usage();
println!(
"[Context: {} messages, ~{} tokens, {:.1}% of window]\n",
usage.total_messages,
usage.context_tokens,
usage.usage_percentage * 100.0
);
println!("You: What's my name and what do I like?");
let response2 = agent.run("What's my name and what do I like?").await?;
println!("Agent: {}\n", response2);
let usage = agent.get_context_usage();
println!(
"[Context: {} messages, ~{} tokens, {:.1}% of window]\n",
usage.total_messages,
usage.context_tokens,
usage.usage_percentage * 100.0
);
println!("You: Based on what I told you, suggest a project for me.");
let response3 = agent
.run("Based on what I told you, suggest a project for me.")
.await?;
println!("Agent: {}\n", response3);
let usage = agent.get_context_usage();
println!("=== Final Context Stats ===");
println!(" Messages: {}", usage.total_messages);
println!(" Context tokens: ~{}", usage.context_tokens);
println!(" Max tokens: {}", usage.max_context_tokens);
println!(" Usage: {:.1}%", usage.usage_percentage * 100.0);
println!("\n=== Demo Complete ===");
println!("Note: Context is lost when the process exits.");
println!("For persistence across restarts, use .with_session_store(SqliteStore)");
Ok(())
}