2023-07-11 23:50:08 +02:00
|
|
|
import os
|
|
|
|
from sentence_transformers import SentenceTransformer
|
|
|
|
from extensions.openai.utils import float_list_to_base64, debug_msg
|
|
|
|
from extensions.openai.errors import *
|
|
|
|
|
|
|
|
st_model = os.environ["OPENEDAI_EMBEDDING_MODEL"] if "OPENEDAI_EMBEDDING_MODEL" in os.environ else "all-mpnet-base-v2"
|
|
|
|
embeddings_model = None
|
|
|
|
|
2023-07-12 20:33:25 +02:00
|
|
|
|
2023-07-11 23:50:08 +02:00
|
|
|
def load_embedding_model(model):
|
|
|
|
try:
|
|
|
|
emb_model = SentenceTransformer(model)
|
|
|
|
print(f"\nLoaded embedding model: {model}, max sequence length: {emb_model.max_seq_length}")
|
|
|
|
except Exception as e:
|
|
|
|
print(f"\nError: Failed to load embedding model: {model}")
|
2023-07-12 20:33:25 +02:00
|
|
|
raise ServiceUnavailableError(f"Error: Failed to load embedding model: {model}", internal_message=repr(e))
|
|
|
|
|
2023-07-11 23:50:08 +02:00
|
|
|
return emb_model
|
|
|
|
|
2023-07-12 20:33:25 +02:00
|
|
|
|
2023-07-11 23:50:08 +02:00
|
|
|
def get_embeddings_model():
|
|
|
|
global embeddings_model, st_model
|
|
|
|
if st_model and not embeddings_model:
|
2023-07-12 20:33:25 +02:00
|
|
|
embeddings_model = load_embedding_model(st_model) # lazy load the model
|
2023-07-11 23:50:08 +02:00
|
|
|
return embeddings_model
|
|
|
|
|
2023-07-12 20:33:25 +02:00
|
|
|
|
2023-07-11 23:50:08 +02:00
|
|
|
def get_embeddings_model_name():
|
|
|
|
global st_model
|
|
|
|
return st_model
|
|
|
|
|
2023-07-12 20:33:25 +02:00
|
|
|
|
2023-07-11 23:50:08 +02:00
|
|
|
def embeddings(input: list, encoding_format: str):
|
|
|
|
|
|
|
|
embeddings = get_embeddings_model().encode(input).tolist()
|
|
|
|
|
|
|
|
if encoding_format == "base64":
|
|
|
|
data = [{"object": "embedding", "embedding": float_list_to_base64(emb), "index": n} for n, emb in enumerate(embeddings)]
|
|
|
|
else:
|
|
|
|
data = [{"object": "embedding", "embedding": emb, "index": n} for n, emb in enumerate(embeddings)]
|
|
|
|
|
|
|
|
response = {
|
|
|
|
"object": "list",
|
|
|
|
"data": data,
|
|
|
|
"model": st_model, # return the real model
|
|
|
|
"usage": {
|
|
|
|
"prompt_tokens": 0,
|
|
|
|
"total_tokens": 0,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
debug_msg(f"Embeddings return size: {len(embeddings[0])}, number: {len(embeddings)}")
|
|
|
|
|
2023-07-12 20:33:25 +02:00
|
|
|
return response
|