pub struct LocalEmbeddingProvider { /* private fields */ }Expand description
Local embedding provider using sentence transformers
Runs embedding models locally using candle-transformers or similar. Provides offline embedding generation with no external dependencies.
§Models Supported
- sentence-transformers/all-MiniLM-L6-v2 (384 dims, default)
- sentence-transformers/all-mpnet-base-v2 (768 dims, higher quality)
- sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 (384 dims, multilingual)
§Example
use do_memory_core::embeddings::{EmbeddingProvider, LocalEmbeddingProvider, LocalConfig};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let config = LocalConfig::new(
"sentence-transformers/all-MiniLM-L6-v2",
384
);
let provider = LocalEmbeddingProvider::new(config).await?;
let embedding = provider.embed_text("Hello world").await?;
println!("Generated embedding with {} dimensions", embedding.len());
Ok(())
}Implementations§
Source§impl LocalEmbeddingProvider
impl LocalEmbeddingProvider
Sourcepub async fn new(config: LocalConfig) -> Result<Self>
pub async fn new(config: LocalConfig) -> Result<Self>
Sourcepub fn model_info(&self) -> Value
pub fn model_info(&self) -> Value
Get model information
Trait Implementations§
Source§impl EmbeddingProvider for LocalEmbeddingProvider
impl EmbeddingProvider for LocalEmbeddingProvider
Source§fn embed_text<'life0, 'life1, 'async_trait>(
&'life0 self,
text: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<f32>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn embed_text<'life0, 'life1, 'async_trait>(
&'life0 self,
text: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<f32>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Generate embedding for a single text Read more
Source§fn embed_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
texts: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<Vec<Vec<f32>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn embed_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
texts: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<Vec<Vec<f32>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Generate embeddings for multiple texts in batch Read more
Source§fn embedding_dimension(&self) -> usize
fn embedding_dimension(&self) -> usize
Get the embedding dimension for this provider
Source§fn model_name(&self) -> &str
fn model_name(&self) -> &str
Get the model name/identifier
Source§fn is_available<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn is_available<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Check if the provider is available/configured
Source§fn warmup<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn warmup<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Warm up the provider (load models, test connections, etc.)
Source§fn similarity<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
text1: &'life1 str,
text2: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<f32>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn similarity<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
text1: &'life1 str,
text2: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<f32>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Calculate semantic similarity between two texts Read more
Auto Trait Implementations§
impl Freeze for LocalEmbeddingProvider
impl !RefUnwindSafe for LocalEmbeddingProvider
impl Send for LocalEmbeddingProvider
impl Sync for LocalEmbeddingProvider
impl Unpin for LocalEmbeddingProvider
impl UnsafeUnpin for LocalEmbeddingProvider
impl !UnwindSafe for LocalEmbeddingProvider
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
Mutably borrows from an owned value. Read more
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>
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 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>
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 moreSource§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.