pub struct FastembedEmbedder { /* private fields */ }Expand description
ONNX-backed EmbeddingGemma 300M embedder. See module-level doc for the
adapter strategy and failure-mode table.
Implementations§
Source§impl FastembedEmbedder
impl FastembedEmbedder
Sourcepub fn new(opts: FastembedEmbedderOpts) -> Result<Self, LunarisError>
pub fn new(opts: FastembedEmbedderOpts) -> Result<Self, LunarisError>
Construct a real ONNX-backed embedder. On first call this triggers an
HF Hub download of the EmbeddingGemma 300M weights (~600 MB) into
opts.cache_dir; subsequent calls hit the cache.
Construction is synchronous because fastembed’s try_new is
itself synchronous — the I/O happens inline. Callers that need to
avoid stalling the runtime should wrap this in
tokio::task::spawn_blocking at the call site; we deliberately do
NOT wrap inside new so the error mapping stays straightforward and
the caller controls the spawn context.
Sourcepub fn from_user_defined(
opts: FastembedUserDefinedOpts,
) -> Result<Self, LunarisError>
pub fn from_user_defined( opts: FastembedUserDefinedOpts, ) -> Result<Self, LunarisError>
Bring-your-own ONNX model (Phase 20 Plan 20-01). The operator supplies
the model bytes + tokenizer bytes in FastembedUserDefinedOpts and
declares the output dimensionality (dim); the constructor wires
fastembed’s UserDefinedEmbeddingModel / InitOptionsUserDefined
and returns a ready embedder.
§Trust requirement
The ONNX bytes execute in-process through ONNX Runtime. They MUST come
from a trusted source (operator-controlled model registry, not
user-uploaded content) — Lunaris performs no graph validation. See
.planning/phases/20-fastembed-adoption/20-01-PLAN.md threat
T-20-01-01.
§Storage-dim constraint
Lunaris’s default storage schema is 768-d (Moon FT index + Postgres
vector(768) column). Operators bringing a model whose dim != 768
MUST also reindex storage — this is the storage-side migration covered
by Plan 20-03. Lunaris does NOT enforce dim parity between embedder
and storage on the hot path; a mismatch surfaces as a backend insert
error at first ingest.
§Example
use std::sync::Arc;
use lunaris_embed::fastembed::{
FastembedEmbedder, FastembedUserDefinedOpts, PoolingMode, ExecutionPreference,
};
let onnx = std::fs::read("models/helios-finetuned.onnx")?;
let tok = std::fs::read("models/helios-finetuned/tokenizer.json")?;
let embedder = FastembedEmbedder::from_user_defined(FastembedUserDefinedOpts {
onnx_file: onnx,
tokenizer_file: tok,
tokenizer_config_file: None,
special_tokens_map_file: None,
config_file: None,
dim: 1024, // MUST match the ONNX model's output dim
pooling: PoolingMode::Mean,
execution: ExecutionPreference::Cpu,
max_length: 2048,
})?;
// let lunaris = Lunaris::open(url).await?.with_embedder(Arc::new(embedder));
let _ = Arc::new(embedder);Trait Implementations§
Source§impl Clone for FastembedEmbedder
impl Clone for FastembedEmbedder
Source§fn clone(&self) -> FastembedEmbedder
fn clone(&self) -> FastembedEmbedder
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FastembedEmbedder
impl Debug for FastembedEmbedder
Source§impl Embedder for FastembedEmbedder
impl Embedder for FastembedEmbedder
fn dim(&self) -> usize
fn embed_batch<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
inputs: &'life1 [&'life2 str],
) -> Pin<Box<dyn Future<Output = Result<Vec<Vec<f32>>, LunarisError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Auto Trait Implementations§
impl Freeze for FastembedEmbedder
impl !RefUnwindSafe for FastembedEmbedder
impl Send for FastembedEmbedder
impl Sync for FastembedEmbedder
impl Unpin for FastembedEmbedder
impl UnsafeUnpin for FastembedEmbedder
impl !UnwindSafe for FastembedEmbedder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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