use std::io::Write;
use futures::StreamExt;
use llmkit::prelude::*;
#[tokio::main]
async fn main() -> LlmResult<()> {
let client = LlmClientBuilder::new()
.provider(AnthropicProvider::from_env()?.model("claude-opus-4-8"))
.build()?;
let mut stream = client
.chat_stream(ChatRequest::builder().user("Tell me a short story.").build())
.await?;
while let Some(event) = stream.next().await {
match event? {
StreamDelta::Text(t) => {
print!("{t}");
let _ = std::io::stdout().flush();
}
StreamDelta::ToolCall { name, input_delta, .. } => {
eprint!("[tool {name:?}: {input_delta}]");
}
StreamDelta::Done { usage } => {
eprintln!(
"\n[{} prompt / {} completion tokens]",
usage.prompt, usage.completion
);
}
}
}
Ok(())
}