openrouter-rust 0.1.0

A modular, type-safe Rust client for the OpenRouter API
Documentation
use openrouter_rust::{OpenRouterClient, responses::ResponsesRequestBuilder};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Initialize the client
    let client = OpenRouterClient::builder()
        .api_key(std::env::var("OPENROUTER_API_KEY")?)
        .build()?;

    // Build a Responses API request
    let request = ResponsesRequestBuilder::new("anthropic/claude-3.5-sonnet")
        .system_message("You are a helpful coding assistant.")
        .user_message("How do I implement a binary search in Rust?")
        .temperature(0.7)
        .reasoning("medium")
        .build();

    println!("Sending request to OpenRouter Responses API...");
    let response = client.create_response(request).await?;

    // Print the response
    println!("\nResponse ID: {}", response.id);
    println!("Model: {}", response.model);
    println!("Status: {}", response.status);

    for item in &response.output {
        match item {
            openrouter_rust::responses::OutputItem::Message { content, .. } => {
                for c in content {
                    match c {
                        openrouter_rust::responses::OutputContent::Text { text, .. } => {
                            println!("\nContent:\n{}", text);
                        }
                        openrouter_rust::responses::OutputContent::Refusal { refusal } => {
                            println!("\nRefusal: {}", refusal);
                        }
                    }
                }
            }
            openrouter_rust::responses::OutputItem::Reasoning { summary, .. } => {
                println!("\nReasoning:");
                for s in summary {
                    match s {
                        openrouter_rust::responses::ReasoningSummary::Text { text } => {
                            println!("  {}", text);
                        }
                    }
                }
            }
            _ => {}
        }
    }

    if let Some(ref usage) = response.usage {
        println!("\nUsage:");
        println!("  Input tokens: {}", usage.prompt_tokens);
        println!("  Output tokens: {}", usage.completion_tokens);
        println!("  Total tokens: {}", usage.total_tokens);
    }

    if let Some(ref output_text) = response.output_text {
        println!("\nOutput text (convenience): {}", output_text);
    }

    Ok(())
}