pub struct CachedEmbeddings { /* private fields */ }Expand description
A caching wrapper for embedding providers.
This wrapper adds a caching layer on top of any embedding provider to avoid regenerating embeddings for the same text. This is especially useful when:
- The same queries or texts are embedded multiple times
- Embeddings are expensive to compute (API calls, local models)
- You want to reduce API costs and latency
§Cache Strategy
- Uses a simple in-memory HashMap with RwLock for thread-safety
- Cache key is the exact text string
- No cache eviction (unbounded cache - use with caution for large datasets)
- Thread-safe for concurrent access
§Example
use ceylon_next::memory::vector::{EmbeddingProvider, CachedEmbeddings};
use std::sync::Arc;
#[tokio::main]
async fn main() {
// Wrap any embedding provider with caching
// let base_provider = OpenAIEmbeddings::new("api-key");
// let cached = CachedEmbeddings::new(Arc::new(base_provider));
// First call - computes embedding
// let embedding1 = cached.embed("hello world").await.unwrap();
// Second call - returns cached result
// let embedding2 = cached.embed("hello world").await.unwrap();
}Implementations§
Source§impl CachedEmbeddings
impl CachedEmbeddings
Sourcepub fn new(provider: Arc<dyn EmbeddingProvider>) -> Self
pub fn new(provider: Arc<dyn EmbeddingProvider>) -> Self
Creates a new cached embedding provider.
§Arguments
provider- The underlying embedding provider to wrap
Sourcepub fn with_capacity(
provider: Arc<dyn EmbeddingProvider>,
capacity: usize,
) -> Self
pub fn with_capacity( provider: Arc<dyn EmbeddingProvider>, capacity: usize, ) -> Self
Creates a new cached embedding provider with pre-allocated cache capacity.
§Arguments
provider- The underlying embedding provider to wrapcapacity- Initial capacity for the cache
Sourcepub async fn cache_size(&self) -> usize
pub async fn cache_size(&self) -> usize
Returns the number of cached embeddings.
Sourcepub async fn clear_cache(&self)
pub async fn clear_cache(&self)
Clears all cached embeddings.
Trait Implementations§
Source§impl EmbeddingProvider for CachedEmbeddings
impl EmbeddingProvider for CachedEmbeddings
Source§fn embed<'life0, 'life1, 'async_trait>(
&'life0 self,
text: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<f32>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn embed<'life0, 'life1, 'async_trait>(
&'life0 self,
text: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<f32>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Generates an embedding vector for the given 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>>, String>> + 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>>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Generates embeddings for multiple texts in batch. Read more
Source§fn dimension(&self) -> usize
fn dimension(&self) -> usize
Returns the dimensionality of the embeddings produced by this provider.
Source§fn model_name(&self) -> &str
fn model_name(&self) -> &str
Returns the model name or identifier.
Auto Trait Implementations§
impl Freeze for CachedEmbeddings
impl !RefUnwindSafe for CachedEmbeddings
impl Send for CachedEmbeddings
impl Sync for CachedEmbeddings
impl Unpin for CachedEmbeddings
impl !UnwindSafe for CachedEmbeddings
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 more