Skip to main content

Embedder

Struct Embedder 

Source
pub struct Embedder { /* private fields */ }

Implementations§

Source§

impl Embedder

Source

pub fn load(config: EmbedderConfig) -> Result<Self, EmbedError>

Source

pub fn model_id(&self) -> &str

Source

pub fn native_dim(&self) -> usize

Source

pub fn dimension(&self) -> usize

Source

pub fn provider_used(&self) -> &str

Provider serving inference: "cpu", "directml" or "coreml".

Source

pub fn fallback_reason(&self) -> Option<&str>

Why an accelerator was replaced by CPU, when it was. A vector parity failure reads like directml -> cpu: vector parity failed: cosine 0.579 at ~20 tokens, floor 0.995.

Source

pub fn accelerator_parity(&self) -> Option<AcceleratorParity>

The load-time vector parity result of the accelerator in use: lowest cosine to the CPU provider’s vectors, the prompt length it occurred at and the pairs compared. None when the provider is CPU (no parity work is done) and when an accelerator was replaced by CPU (the failure is in Self::fallback_reason). Always at least ACCELERATOR_PARITY_MIN_COSINE when Some.

Source

pub fn load_timings(&self) -> Option<&LoadTimings>

Where Embedder::load spent its time, for an E40 bundle (including one that fell back to the E40 graphs on CPU): tokenizer load, token-table read, probe, every graph build and the parity check (or its cached verdict). For a Core ML bundle (macOS) it holds the tokenizer load, probe, parity check, pre-warm (total and per length) and the total; the phases it has no figure for stay zero or None. None for every other bundle and for a Q4 embedder served from fallback_model_dir.

Source

pub fn coreml_units(&self) -> Option<&CoreMlUnits>

The Core ML compute units in use per length: Some for a Core ML bundle (macOS) that was not replaced by a Q4 fallback, None for every other embedder. An embedder that fell back to the package on CPU reports cpu_only everywhere.

Source

pub fn pipeline_id(&self) -> String

Stable fingerprint of everything that changes the produced vectors, so callers can detect when stored vectors need re-embedding. Fed by:

  • the pipeline schema version of this crate’s embedding math;
  • model id and native dimension;
  • SHA-256 of model_q4.onnx, model_q4.onnx_data, tokenizer.json and config.json (absent file recorded as absent);
  • the document and query prompt templates;
  • pooling and normalization descriptions;
  • Matryoshka truncate dimension and max token length;
  • whether Gemma 2 modality sentinels are scrubbed.

Not fed by provider, thread count or batch size: those change only floating-point noise (see max_batch tolerance in the README), not the pipeline. The accelerator parity check is not an input either: it only decides which provider serves the same math, and an admitted accelerator reproduces the CPU vectors to the parity floor. Computed once on first call (hashes the model files) and cached; format rkpipe1-<32 hex>.

Source

pub fn embed(&self, text: &str) -> Result<Vec<f32>, EmbedError>

Source

pub fn embed_query(&self, text: &str) -> Result<Vec<f32>, EmbedError>

Source

pub fn embed_batch<'a, I>(&self, texts: I) -> Result<Vec<Vec<f32>>, EmbedError>
where I: IntoIterator<Item = &'a str>,

Embeds documents in input order. Texts are tokenized together, ordered by length so chunks pad little, run max_batch rows per ONNX call with the attention mask honoured, then returned in input order.

Source

pub fn embed_query_batch<'a, I>( &self, texts: I, ) -> Result<Vec<Vec<f32>>, EmbedError>
where I: IntoIterator<Item = &'a str>,

Query-prompt counterpart of Self::embed_batch.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V