use openrouter_rust::{OpenRouterClient, models::ListModelsParams};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = OpenRouterClient::builder()
.api_key(std::env::var("OPENROUTER_API_KEY")?)
.build()?;
println!("Models API Examples\n");
println!("1. Total model count:");
let count = client.get_models_count().await?;
println!(" Total models available: {:.0}\n", count.data.count);
println!("2. Listing first 5 models:");
let models = client.list_models(None).await?;
for (i, model) in models.data.iter().take(5).enumerate() {
println!(" {}. {}", i + 1, model.name);
println!(" ID: {}", model.id);
println!(" Description: {}", model.description);
if let Some(context) = model.context_length {
println!(" Context: {} tokens", context);
}
println!(" Supported params: {:?}", model.supported_parameters);
println!();
}
println!("3. Programming models:");
let params = ListModelsParams {
category: Some("programming".to_string()),
..Default::default()
};
let programming_models = client.list_models(Some(params)).await?;
for (i, model) in programming_models.data.iter().take(3).enumerate() {
println!(" {}. {} - {}", i + 1, model.name, model.id);
}
println!(" ... {} total programming models\n", programming_models.data.len());
println!("4. Models available for user (filtered by preferences):");
let user_models = client.list_models_user().await?;
println!(" {} models available\n", user_models.data.len());
if let Some(first_model) = models.data.first() {
println!("5. Detailed info for {}:", first_model.name);
println!(" ID: {}", first_model.id);
println!(" Canonical slug: {}", first_model.canonical_slug);
if let Some(hf_id) = &first_model.hugging_face_id {
println!(" HuggingFace ID: {}", hf_id);
}
println!(" Created: {}", first_model.created);
println!(" Architecture:");
println!(" Input modalities: {:?}", first_model.architecture.input_modalities);
println!(" Output modalities: {:?}", first_model.architecture.output_modalities);
if let Some(modality) = &first_model.architecture.modality {
println!(" Primary modality: {}", modality);
}
println!(" Top provider:");
println!(" Moderated: {}", first_model.top_provider.is_moderated);
if let Some(context) = first_model.top_provider.context_length {
println!(" Context length: {}", context);
}
println!(" Per-request limits:");
println!(" Max prompt: {} tokens", first_model.per_request_limits.prompt_tokens);
println!(" Max completion: {} tokens", first_model.per_request_limits.completion_tokens);
}
Ok(())
}