rbert 0.4.0

A simple interface for Bert embeddings
Documentation
use rbert::*;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let bert = Bert::builder().build().await?;
    let sentences = [
        "Kalosm can be used to build local AI applications",
        "With private LLMs data never leaves your computer",
        "The quick brown fox jumps over the lazy dog",
    ];
    let embeddings = bert.embed_batch(sentences).await?;
    println!("embeddings {:?}", embeddings);

    // Find the cosine similarity between the first two sentences
    let mut similarities = vec![];
    let n_sentences = sentences.len();
    for (i, e_i) in embeddings.iter().enumerate() {
        for j in (i + 1)..n_sentences {
            let e_j = embeddings.get(j).unwrap();
            let cosine_similarity = e_j.cosine_similarity(e_i);
            similarities.push((cosine_similarity, i, j))
        }
    }
    similarities.sort_by(|u, v| v.0.total_cmp(&u.0));
    for &(score, i, j) in similarities.iter() {
        println!("score: {score:.2} '{}' '{}'", sentences[i], sentences[j])
    }

    Ok(())
}