use openrouter_rust::{OpenRouterClient, responses::ResponsesRequestBuilder};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = OpenRouterClient::builder()
.api_key(std::env::var("OPENROUTER_API_KEY")?)
.build()?;
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?;
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(())
}