openmodex 0.1.1

Official Rust SDK for the OpenModex API
Documentation
use openmodex::{Error, OpenModex};

#[tokio::main]
async fn main() -> Result<(), Error> {
    let client = OpenModex::from_env()?;

    // List all available models.
    println!("=== Available Models ===\n");
    let models = client.models().list().await?;
    for model in &models.data {
        println!(
            "  {} ({}) - {}",
            model.id, model.provider, model.description
        );
        if let Some(pricing) = &model.pricing {
            println!(
                "    Pricing: ${}/M input, ${}/M output",
                pricing.openmodex_input_per_m, pricing.openmodex_output_per_m
            );
        }
    }
    println!("\nTotal: {} models", models.total);

    // Get details for a specific model.
    println!("\n=== Model Details ===\n");
    let model = client.models().get("gpt-4o").await?;
    println!("ID: {}", model.id);
    println!("Name: {}", model.name);
    println!("Provider: {}", model.provider);
    println!("Context length: {}", model.context_length);
    if let Some(quality) = &model.quality_scores {
        println!("Quality (overall): {}", quality.overall);
    }

    // Compare two models.
    println!("\n=== Model Comparison ===\n");
    let comparison = client
        .models()
        .compare(&["gpt-4o", "claude-3.5-sonnet"])
        .await?;

    for (id, item) in &comparison.comparison {
        println!("  {id}: {} ({})", item.name, item.provider);
        if let Some(pricing) = &item.pricing {
            println!(
                "    Input: ${}/M, Output: ${}/M",
                pricing.openmodex_input_per_m, pricing.openmodex_output_per_m
            );
        }
    }

    if let Some(highlights) = &comparison.highlights {
        println!("\n  Cheapest: {}", highlights.cheapest);
        println!("  Fastest: {}", highlights.fastest);
        println!("  Best quality: {}", highlights.best_quality);
    }

    Ok(())
}