trustgraph/trustgraph-flow/trustgraph/embeddings/fastembed/processor.py

64 lines
1.4 KiB
Python
Raw Normal View History

"""
Embeddings service, applies an embeddings model selected from HuggingFace.
Input is text, output is embeddings vector.
"""
from ... schema import EmbeddingsRequest, EmbeddingsResponse
2025-04-16 17:43:49 +01:00
from ... base import RequestResponseService
from fastembed import TextEmbedding
import os
module = "embeddings"
default_subscriber = module
default_model="sentence-transformers/all-MiniLM-L6-v2"
2025-04-16 17:43:49 +01:00
class Processor(RequestResponseService):
def __init__(self, **params):
model = params.get("model", default_model)
super(Processor, self).__init__(
**params | {
"model": model,
2025-04-16 17:43:49 +01:00
"request_schema": EmbeddingsRequest,
"response_schema": EmbeddingsResponse,
}
)
self.embeddings = TextEmbedding(model_name = model)
2025-04-16 17:43:49 +01:00
async def on_request(self, request, consumer, flow):
2025-04-16 17:43:49 +01:00
text = request.text
vecs = self.embeddings.embed([text])
vecs = [
v.tolist()
for v in vecs
]
2025-04-16 17:43:49 +01:00
return EmbeddingsResponse(
vectors=list(vecs),
error=None,
)
@staticmethod
def add_args(parser):
2025-04-16 17:43:49 +01:00
RequestResponseService.add_args(parser, default_subscriber)
parser.add_argument(
'-m', '--model',
default=default_model,
help=f'Embeddings model (default: {default_model})'
)
def run():
Processor.launch(module, __doc__)