| from typing import Dict, List, Any |
| |
| |
| from FlagEmbedding import BGEM3FlagModel |
| import time |
|
|
| class EndpointHandler(): |
| def __init__(self, path="."): |
| |
| |
| self.model = BGEM3FlagModel(path, use_fp16=True) |
|
|
|
|
| def __call__(self, data: Any) -> List[List[Dict[str, float]]]: |
| """ |
| Args: |
| data (:obj:): |
| includes the input data and the parameters for the inference. |
| Return: |
| A :obj:`list`:. The object returned should be a list of one list like [[{"label": 0.9939950108528137}]] containing : |
| - "label": A string representing what the label/class is. There can be multiple labels. |
| - "score": A score between 0 and 1 describing how confident the model is for this label/class. |
| """ |
| inputs = data.pop("inputs", data) |
| parameters = data.pop("parameters", None) |
| |
| |
| start_time = time.time() |
| |
| result = self.model.encode(inputs, return_dense=False, return_sparse=True, max_length=1024) |
| |
| |
| end_time = time.time() |
| |
| |
| |
| |
| elapsed_time = end_time - start_time |
| print(f"Encoding took {elapsed_time:.4f} seconds") |
| |
| sparse_vectors = result["lexical_weights"] |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| sparse_vectors = {str(k): float(v) for k, v in sparse_vectors.items()} |
| |
| |
| |
| |
| return [ |
| [ |
| { "outputs": sparse_vectors} |
| ] |
| ] |
|
|