fn env(name: &str) -> String {
std::env::var(name).unwrap_or_default()
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let key = env("ANTHROPIC_API_KEY");
if key.is_empty() {
eprintln!("Set ANTHROPIC_API_KEY");
return Ok(());
}
let prompt = env("LLM_PROMPT");
let prompt = if prompt.is_empty() {
"Write a haiku about Rust.".to_string()
} else {
prompt
};
let mut p = llmoxide::anthropic(&key);
let model = env("ANTHROPIC_MODEL");
if !model.is_empty() {
p = p.model(model);
}
let resp = p
.stream(prompt, |ev| match ev {
llmoxide::Event::TextDelta(t) => print!("{t}"),
llmoxide::Event::ToolCall(_call) => {}
llmoxide::Event::Completed(_) => println!(),
_ => {}
})
.await?;
if let Some(t) = resp.text() {
eprintln!("\n\n---\nfinal:\n{t}");
}
Ok(())
}