candding 0.1.0

Pure candle embeddings for Rust with no ONNX: dense, sparse, multi-vector and rerank models today, image models on the roadmap
Documentation
//! Load a BERT checkpoint that is not in the registry by supplying its descriptor.

use candding::Family;
use candding::ModelDescriptor;
use candding::Pooling;
use candding::TextEmbedding;

fn main() -> candding::Result<()> {
  let mut descriptor = ModelDescriptor::new(
    "sentence-transformers/all-MiniLM-L12-v2",
    Family::Bert,
    384,
    Pooling::Mean,
  );
  descriptor.default_max_length = 128;
  let model = TextEmbedding::builder(descriptor.id.clone())
    .descriptor(descriptor)
    .build()?;
  let rows = model.embed(&["a sentence outside the registry"], None)?;
  println!(
    "dim {} norm {:.4}",
    rows[0].len(),
    rows[0].iter().map(|v| v * v).sum::<f32>().sqrt()
  );
  Ok(())
}