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
//! The dense catalog's own `all`, `lookup`, `by_phase` and `dtype_needs_accelerator`, as each other catalog has.

use candle_core::DType;

use super::ModelDescriptor;
use super::entries;
use super::entry::Entry;
use super::entry_for;

/// Every registered dense entry, in registration order.
pub fn all() -> Vec<ModelDescriptor> {
  entries().map(Entry::descriptor).collect()
}

/// Case-insensitive lookup by repository id.
pub fn lookup(id: &str) -> Option<ModelDescriptor> {
  entry_for(id).map(Entry::descriptor)
}

/// Every registered dense entry for a phase, in registration order.
pub fn by_phase(phase: u8) -> Vec<ModelDescriptor> {
  entries()
    .filter(|entry| entry.phase == phase)
    .map(Entry::descriptor)
    .collect()
}

/// Whether a registered dense id computes `dtype` correctly only on an accelerator, read from the row its builder
/// refuses from; `false` for an id outside the dense catalog.
pub fn dtype_needs_accelerator(id: &str, dtype: DType) -> bool {
  entry_for(id).is_some_and(|entry| {
    entry
      .descriptor()
      .dtype_backends
      .row(dtype)
      .needs_accelerator()
  })
}