encoderfile 0.4.0-rc.1

Distribute and run transformer encoders with a single file.
Documentation
use crate::{
    common::{SentenceEmbeddingRequest, SentenceEmbeddingResponse, model_type},
    error::ApiError,
    inference,
    runtime::AppState,
    transforms::SentenceEmbeddingTransform,
};

use super::inference::Inference;

impl Inference for AppState<model_type::SentenceEmbedding> {
    type Input = SentenceEmbeddingRequest;
    type Output = SentenceEmbeddingResponse;

    fn inference(&self, request: impl Into<Self::Input>) -> Result<Self::Output, ApiError> {
        let request = request.into();

        let encodings = self.tokenizer.encode_text(request.inputs)?;

        let transform = SentenceEmbeddingTransform::new(self.transform_str())?;

        let results = inference::sentence_embedding::sentence_embedding(
            self.session.lock(),
            &transform,
            encodings,
        )?;

        Ok(SentenceEmbeddingResponse {
            results,
            model_id: self.config.name.clone(),
            metadata: request.metadata,
        })
    }
}