Send owned metadata and clear inputs in case of error

This commit is contained in:
Louis Dureuil 2025-07-03 10:32:57 +02:00
parent 3740755d9c
commit 735634e998
No known key found for this signature in database
3 changed files with 12 additions and 5 deletions

View file

@ -1259,7 +1259,7 @@ impl<'doc> OnEmbed<'doc> for WriteGrenadOnEmbed<'_> {
error: crate::vector::error::EmbedError, error: crate::vector::error::EmbedError,
embedder_name: &'doc str, embedder_name: &'doc str,
unused_vectors_distribution: &crate::vector::error::UnusedVectorsDistribution, unused_vectors_distribution: &crate::vector::error::UnusedVectorsDistribution,
_metadata: &[crate::vector::session::Metadata<'doc>], _metadata: bumpalo::collections::Vec<'doc, crate::vector::session::Metadata<'doc>>,
) -> crate::Error { ) -> crate::Error {
if let FaultSource::Bug = error.fault { if let FaultSource::Bug = error.fault {
crate::Error::InternalError(crate::InternalError::VectorEmbeddingError(error.into())) crate::Error::InternalError(crate::InternalError::VectorEmbeddingError(error.into()))

View file

@ -478,7 +478,7 @@ impl<'doc> OnEmbed<'doc> for OnEmbeddingDocumentUpdates<'doc, '_> {
error: crate::vector::hf::EmbedError, error: crate::vector::hf::EmbedError,
embedder_name: &'doc str, embedder_name: &'doc str,
unused_vectors_distribution: &UnusedVectorsDistributionBump, unused_vectors_distribution: &UnusedVectorsDistributionBump,
metadata: &[Metadata<'doc>], metadata: BVec<'doc, Metadata<'doc>>,
) -> crate::Error { ) -> crate::Error {
if let FaultSource::Bug = error.fault { if let FaultSource::Bug = error.fault {
crate::Error::InternalError(crate::InternalError::VectorEmbeddingError(error.into())) crate::Error::InternalError(crate::InternalError::VectorEmbeddingError(error.into()))

View file

@ -28,7 +28,7 @@ pub trait OnEmbed<'doc> {
error: EmbedError, error: EmbedError,
embedder_name: &'doc str, embedder_name: &'doc str,
unused_vectors_distribution: &Self::ErrorMetadata, unused_vectors_distribution: &Self::ErrorMetadata,
metadata: &[Metadata<'doc>], metadata: BVec<'doc, Metadata<'doc>>,
) -> crate::Error; ) -> crate::Error;
} }
@ -143,12 +143,19 @@ impl<'doc, C: OnEmbed<'doc>, I: Input> EmbedSession<'doc, C, I> {
Ok(()) Ok(())
} }
Err(error) => { Err(error) => {
// reset metadata and inputs, and send metadata to the error processing.
let doc_alloc = self.metadata.bump();
let metadata = std::mem::replace(
&mut self.metadata,
BVec::with_capacity_in(self.inputs.capacity(), doc_alloc),
);
self.inputs.clear();
return Err(self.on_embed.process_embedding_error( return Err(self.on_embed.process_embedding_error(
error, error,
self.embedder_name, self.embedder_name,
unused_vectors_distribution, unused_vectors_distribution,
&self.metadata, metadata,
)) ));
} }
}; };
self.inputs.clear(); self.inputs.clear();