in backends/python/src/lib.rs [75:102]
fn embed(&self, batch: Batch) -> Result<Embeddings, BackendError> {
if !batch.raw_indices.is_empty() {
return Err(BackendError::Inference(
"raw embeddings are not supported for the Python backend.".to_string(),
));
}
let batch_size = batch.len();
let results = self
.tokio_runtime
.block_on(self.backend_client.clone().embed(
batch.input_ids,
batch.token_type_ids,
batch.position_ids,
batch.cumulative_seq_lengths,
batch.max_length,
))
.map_err(|err| BackendError::Inference(err.to_string()))?;
let pooled_embeddings: Vec<Vec<f32>> = results.into_iter().map(|r| r.values).collect();
let mut embeddings =
HashMap::with_capacity_and_hasher(batch_size, BuildNoHashHasher::default());
for (i, e) in pooled_embeddings.into_iter().enumerate() {
embeddings.insert(i, Embedding::Pooled(e));
}
Ok(embeddings)
}