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
use super::*;
use crate::registry::BackendSupport;
use crate::registry::Support;

const VERIFIED: BackendSupport = BackendSupport {
  cpu: Support::Verified,
  metal: Support::Verified,
  cuda: Support::Untested,
};

/// The T4's full sweep ran F32 and F16 on CUDA for every entry but the non-commercial `jinaai/jina-colbert-v2`.
const VERIFIED_ON_THE_T4: BackendSupport = BackendSupport {
  cuda: Support::Verified,
  ..VERIFIED
};

const VERIFIED_BF16: BackendSupport = BackendSupport {
  cpu: Support::Unsupported,
  metal: Support::Verified,
  cuda: Support::Untested,
};

const UNSUPPORTED_EVERYWHERE: BackendSupport = BackendSupport {
  cpu: Support::Unsupported,
  metal: Support::Unsupported,
  cuda: Support::Unsupported,
};

#[test]
fn the_golden_run_outcome_is_recorded_accurately() {
  let descriptor = lookup("BAAI/bge-m3").unwrap();
  assert_eq!(descriptor.backends.cpu, crate::registry::Support::Verified);
  assert_eq!(
    descriptor.backends.metal,
    crate::registry::Support::Verified
  );
  assert_eq!(descriptor.backends.cuda, crate::registry::Support::Verified);
  assert_eq!(descriptor.dtype_backends.f32, VERIFIED_ON_THE_T4);
  assert_eq!(
    descriptor.dtype_backends.f16, UNSUPPORTED_EVERYWHERE,
    "F16 misses the row-content tolerance on both the processor and the accelerator"
  );
  assert_eq!(
    descriptor.dtype_backends.bf16, UNSUPPORTED_EVERYWHERE,
    "BF16 misses the row-content tolerance on the accelerator; the processor refuses it unconditionally"
  );
}

#[test]
fn both_stanford_colbert_entries_pass_every_dtype_on_both_devices() {
  for id in [
    "colbert-ir/colbertv2.0",
    "answerdotai/answerai-colbert-small-v1",
  ] {
    let descriptor = lookup(id).unwrap();
    assert_eq!(
      descriptor.backends.cpu,
      crate::registry::Support::Verified,
      "{id}"
    );
    assert_eq!(
      descriptor.backends.metal,
      crate::registry::Support::Verified,
      "{id}"
    );
    assert_eq!(
      descriptor.backends.cuda,
      crate::registry::Support::Verified,
      "{id}"
    );
    assert_eq!(
      descriptor.dtype_backends.f32, VERIFIED_ON_THE_T4,
      "{id} f32"
    );
    assert_eq!(
      descriptor.dtype_backends.f16, VERIFIED_ON_THE_T4,
      "{id} f16"
    );
    assert_eq!(descriptor.dtype_backends.bf16, VERIFIED_BF16, "{id} bf16");
  }
}

#[test]
fn jina_colbert_v2_passes_every_dtype_on_both_devices() {
  let descriptor = lookup("jinaai/jina-colbert-v2").unwrap();
  assert_eq!(descriptor.backends.cpu, crate::registry::Support::Verified);
  assert_eq!(
    descriptor.backends.metal,
    crate::registry::Support::Verified
  );
  assert_eq!(descriptor.backends.cuda, crate::registry::Support::Untested);
  assert_eq!(descriptor.dtype_backends.f32, VERIFIED);
  assert_eq!(descriptor.dtype_backends.f16, VERIFIED);
  assert_eq!(descriptor.dtype_backends.bf16, VERIFIED_BF16);
}

#[test]
fn every_registered_multi_vector_entry_has_already_flipped_past_pending() {
  for d in all() {
    assert_ne!(
      d.backends.cpu,
      crate::registry::Support::Pending,
      "{}",
      d.id
    );
    assert_ne!(
      d.backends.metal,
      crate::registry::Support::Pending,
      "{}",
      d.id
    );
    assert_ne!(
      d.backends.cuda,
      crate::registry::Support::Pending,
      "{}",
      d.id
    );
    for row in [
      d.dtype_backends.f32,
      d.dtype_backends.f16,
      d.dtype_backends.bf16,
    ] {
      for status in [row.cpu, row.metal, row.cuda] {
        assert_ne!(status, crate::registry::Support::Pending, "{}", d.id);
      }
    }
  }
}