use oxi_ai::prelude::*;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let model_id = std::env::var("OXI_MODEL").unwrap_or_else(|_| "claude-sonnet-4-20250514".into());
let provider = oxi_ai::create_builtin_provider("anthropic")
.ok_or_else(|| anyhow::anyhow!("Unknown provider: anthropic"))?;
let model = oxi_ai::Model::new(
&model_id,
"Claude Sonnet 4",
oxi_ai::Api::AnthropicMessages,
"anthropic",
"https://api.anthropic.com",
);
let mut context = Context::new();
context.add_message(Message::user("Explain Rust ownership in 3 sentences."));
println!("Streaming from anthropic/{model_id}:\n");
use futures::StreamExt;
let stream = provider.stream(&model, &context, None).await?;
tokio::pin!(stream);
while let Some(event) = stream.next().await {
match event {
ProviderEvent::TextDelta { delta, .. } => {
print!("{delta}");
std::io::Write::flush(&mut std::io::stdout())?;
}
ProviderEvent::Done { .. } => {
println!("\n\n[Done]");
}
ProviderEvent::Error { .. } => {
eprintln!("\n[Error occurred]");
}
_ => {}
}
}
Ok(())
}