llmoxide 0.1.0

Provider-agnostic Rust SDK for OpenAI, Anthropic, Gemini, and Ollama (streaming + tools)
Documentation
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(())
}