use octolib::reranker::rerank;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt::init();
println!("=== Octolib Reranker Example ===\n");
let query = "When is Apple's conference call scheduled?";
let documents = vec![
"The Mediterranean diet emphasizes fish, olive oil, and vegetables, believed to reduce chronic diseases.".to_string(),
"Photosynthesis in plants converts light energy into glucose and produces essential oxygen.".to_string(),
"20th-century innovations, from radios to smartphones, centered on electronic advancements.".to_string(),
"Rivers provide water, irrigation, and habitat for aquatic species, vital for ecosystems.".to_string(),
"Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.".to_string(),
"Shakespeare's works, like 'Hamlet' and 'A Midsummer Night's Dream,' endure in literature.".to_string(),
];
println!("Query: {}\n", query);
println!("Documents to rerank: {}\n", documents.len());
println!("Reranking with Voyage AI (rerank-2.5)...\n");
let response = rerank(query, documents.clone(), "voyage", "rerank-2.5", Some(3)).await?;
println!("Top {} results:", response.results.len());
println!("Total tokens used: {}\n", response.total_tokens);
for (rank, result) in response.results.iter().enumerate() {
println!("Rank {}: (Score: {:.4})", rank + 1, result.relevance_score);
println!(" Document: {}", result.document);
println!(" Original index: {}\n", result.index);
}
println!("\n=== Reranking all documents ===\n");
let response_all = rerank(query, documents, "voyage", "rerank-2.5", None).await?;
println!("All {} results ranked:", response_all.results.len());
for (rank, result) in response_all.results.iter().enumerate() {
println!(
"{}. Score: {:.4} - {}",
rank + 1,
result.relevance_score,
&result.document[..60.min(result.document.len())]
);
}
Ok(())
}