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,
embedder_name: &'doc str,
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 {
if let FaultSource::Bug = error.fault {
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,
embedder_name: &'doc str,
unused_vectors_distribution: &UnusedVectorsDistributionBump,
metadata: &[Metadata<'doc>],
metadata: BVec<'doc, Metadata<'doc>>,
) -> crate::Error {
if let FaultSource::Bug = error.fault {
crate::Error::InternalError(crate::InternalError::VectorEmbeddingError(error.into()))

View file

@ -28,7 +28,7 @@ pub trait OnEmbed<'doc> {
error: EmbedError,
embedder_name: &'doc str,
unused_vectors_distribution: &Self::ErrorMetadata,
metadata: &[Metadata<'doc>],
metadata: BVec<'doc, Metadata<'doc>>,
) -> crate::Error;
}
@ -143,12 +143,19 @@ impl<'doc, C: OnEmbed<'doc>, I: Input> EmbedSession<'doc, C, I> {
Ok(())
}
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(
error,
self.embedder_name,
unused_vectors_distribution,
&self.metadata,
))
metadata,
));
}
};
self.inputs.clear();