Skip to main content

Embedder

Trait Embedder 

Source
pub trait Embedder: Send + Sync {
    // Required methods
    fn embed_sync(&self, text: &str) -> Result<Vec<f32>, SearchError>;
    fn dimension(&self) -> usize;
    fn id(&self) -> &str;
    fn is_semantic(&self) -> bool;
    fn category(&self) -> ModelCategory;

    // Provided methods
    fn embed_batch_sync(
        &self,
        texts: &[&str],
    ) -> Result<Vec<Vec<f32>>, SearchError> { ... }
    fn model_name(&self) -> &str { ... }
    fn is_ready(&self) -> bool { ... }
    fn tier(&self) -> ModelTier { ... }
    fn supports_mrl(&self) -> bool { ... }
}
Expand description

Synchronous embedding interface for host projects that call embedders from non-async contexts.

Implement this trait for embedders whose embed operations are inherently synchronous (e.g., hash embedders, CPU-only ONNX inference). The companion SyncEmbedderAdapter wraps any SyncEmbed implementor into a full async Embedder, suitable for use anywhere frankensearch expects one.

§Example

use frankensearch_core::traits::{SyncEmbed, SyncEmbedderAdapter, Embedder};

struct MyHashEmbedder { dim: usize }

impl SyncEmbed for MyHashEmbedder {
    fn embed_sync(&self, text: &str) -> SearchResult<Vec<f32>> { /* ... */ }
    fn dimension(&self) -> usize { self.dim }
    fn id(&self) -> &str { "my-hash" }
    fn model_name(&self) -> &str { "My Hash Embedder" }
    fn is_semantic(&self) -> bool { false }
    fn category(&self) -> ModelCategory { ModelCategory::HashEmbedder }
}

// Use it as a full async Embedder:
let adapted: Box<dyn Embedder> = Box::new(SyncEmbedderAdapter(MyHashEmbedder { dim: 256 }));

Required Methods§

Source

fn embed_sync(&self, text: &str) -> Result<Vec<f32>, SearchError>

Synchronously embed a single text into a vector.

§Errors

Returns SearchError when embedding fails (for example model load, inference, or input validation failures).

Source

fn dimension(&self) -> usize

The output dimensionality of embedding vectors.

Source

fn id(&self) -> &str

Unique, stable identifier for this embedder (stored in index headers).

Source

fn is_semantic(&self) -> bool

Whether this embedder produces semantically meaningful vectors.

Source

fn category(&self) -> ModelCategory

The speed/quality category of this embedder.

Provided Methods§

Source

fn embed_batch_sync(&self, texts: &[&str]) -> Result<Vec<Vec<f32>>, SearchError>

Synchronously embed a batch of texts.

Default implementation calls embed_sync for each text.

§Errors

Returns the first SearchError encountered while embedding any item in the batch.

Source

fn model_name(&self) -> &str

Human-readable model name.

Source

fn is_ready(&self) -> bool

Whether the embedder is loaded and operational.

Source

fn tier(&self) -> ModelTier

Default progressive tier assignment.

Source

fn supports_mrl(&self) -> bool

Whether this model supports Matryoshka Representation Learning.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl SyncEmbed for DaemonFallbackEmbedder

Source§

impl SyncEmbed for FastEmbedder

Available on crate feature semantic only.
Source§

impl SyncEmbed for HashEmbedder