Skip to main content

NativeEmbeddingService

Struct NativeEmbeddingService 

Source
pub struct NativeEmbeddingService { /* private fields */ }
Expand description

Unstable: model-loading API still evolving; signature may change as lattice-inference matures.

Pure Rust embedding service backed by lattice-inference.

Uses SIMD-accelerated matrix multiplication and safetensors weight loading. No ONNX Runtime, no C++ FFI, no fastembed dependency.

Supports both encoder (BERT/BGE) and decoder (Qwen3) architectures.

§Cancellation Safety

Model loading uses std::sync::OnceLock + spawn_blocking instead of tokio::sync::OnceCell. This is critical because tokio::sync::OnceCell:: get_or_try_init resets when the calling future is dropped (e.g., client disconnect during MCP timeout). With OnceLock, the blocking task runs to completion and stores the result regardless of async cancellation, so the model only loads once per process lifetime.

Implementations§

Source§

impl NativeEmbeddingService

Source

pub fn new() -> Self

Unstable: constructor signature may change; use EmbeddingService trait for stable API.

Source

pub fn with_model(model_type: EmbeddingModel) -> Self

Unstable: constructor signature may change; use EmbeddingService trait for stable API.

Source

pub fn with_model_config(model_config: ModelConfig) -> Result<Self>

Unstable: create with explicit model config (model + optional MRL truncation dim).

Source

pub fn with_model_from_env(model_type: EmbeddingModel) -> Result<Self>

Unstable: create with model config read from LATTICE_EMBED_DIM env var.

Source

pub fn save_cache(&self) -> Result<usize>

Unstable: persistence API may be moved to a separate manager type.

Source

pub fn cache_size(&self) -> usize

Unstable: internal diagnostic; may be removed or moved to metrics.

Trait Implementations§

Source§

impl Default for NativeEmbeddingService

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl EmbeddingService for NativeEmbeddingService

Source§

fn embed<'life0, 'life1, 'async_trait>( &'life0 self, texts: &'life1 [String], model: EmbeddingModel, ) -> Pin<Box<dyn Future<Output = Result<Vec<Vec<f32>>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Stable: generate embeddings for multiple texts. Read more
Source§

fn model_config(&self, model: EmbeddingModel) -> ModelConfig

Unstable: returns the effective ModelConfig for a given model on this service. Read more
Source§

fn supports_model(&self, model: EmbeddingModel) -> bool

Stable: check if the service supports a given model.
Source§

fn name(&self) -> &'static str

Stable: get the name/identifier of this service.
Source§

fn embed_one<'life0, 'life1, 'async_trait>( &'life0 self, text: &'life1 str, model: EmbeddingModel, ) -> Pin<Box<dyn Future<Output = Result<Vec<f32>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Stable: generate an embedding for a single text. Read more

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<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> 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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more