use rankops::rerank::colbert;
fn main() {
let query: Vec<Vec<f32>> = vec![
vec![1.0, 0.0, 0.0, 0.0], vec![0.0, 1.0, 0.0, 0.0], vec![0.0, 0.0, 1.0, 0.0], ];
let docs: Vec<(&str, Vec<Vec<f32>>)> = vec![
(
"doc_rust_intro",
vec![
vec![0.9, 0.0, 0.0, 0.0], vec![0.0, 0.8, 0.0, 0.0], vec![0.0, 0.0, 0.95, 0.0], vec![0.0, 0.0, 0.1, 0.9], ],
),
(
"doc_python",
vec![
vec![0.7, 0.1, 0.0, 0.0], vec![0.0, 0.6, 0.0, 0.0], vec![0.0, 0.0, 0.1, 0.9], ],
),
(
"doc_rust_borrow",
vec![
vec![0.3, 0.0, 0.0, 0.0],
vec![0.0, 0.0, 0.85, 0.0], vec![0.0, 0.0, 0.7, 0.3], ],
),
];
let ranked = colbert::rank(&query, &docs);
println!("MaxSim ranking:");
for (id, score) in &ranked {
println!(" {id:20} score={score:.4}");
}
let best_doc = &docs[0]; let alignments = colbert::alignments(&query, &best_doc.1);
println!("\nAlignments (query_tok -> doc_tok, similarity):");
for (qi, di, sim) in &alignments {
println!(" query[{qi}] -> doc[{di}] sim={sim:.4}");
}
let highlighted = colbert::highlight(&query, &best_doc.1, 0.7);
println!("\nHighlighted doc tokens (threshold=0.7): {highlighted:?}");
}