Skip to content

Commit

Permalink
third
Browse files Browse the repository at this point in the history
  • Loading branch information
Junfeng Peng committed Jan 28, 2025
1 parent 46cc1a3 commit 1b8ee1e
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 11 deletions.
4 changes: 3 additions & 1 deletion xinference/model/embedding/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -816,8 +816,10 @@ def create_embedding_model_instance(
model_name,
model_engine,
)
devices = devices or ["cpu"]
# model class should be one of flag, fastembed, sentence_transformer
device = devices[0] if devices is not None else None
# 这种写法会不会有问题?
device = devices[0] if isinstance(devices, list) else devices
model = embedding_cls(model_uid, model_path, model_spec, device, **kwargs)
model_description = EmbeddingModelDescription(
subpool_addr, devices, model_spec, model_path=model_path
Expand Down
10 changes: 1 addition & 9 deletions xinference/model/embedding/flag/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,8 @@ def __init__(
def load(self):
try:
from FlagEmbedding import BGEM3FlagModel

# from sentence_transformers import SentenceTransformer
# if FlagEmbedding.__version__ < "1.3.3":
# raise ValueError(
# "The FlagEmbedding version must be greater than 1.3.3. "
# "Please upgrade your version via `pip install -U FlagEmbedding` or refer to "
# "https://github.com/FlagOpen/FlagEmbedding"
# )
except ImportError:
error_message = "Failed to import module 'FlagEmbedding'"
error_message = "Failed to import module 'BGEM3FlagModel'"
installation_guide = [
"Please make sure 'FlagEmbedding' is installed. ",
"You can install it by `pip install FlagEmbedding`\n",
Expand Down
34 changes: 34 additions & 0 deletions xinference/model/embedding/sentence_transformer/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,40 @@ def encode(
convert_to_numpy=False,
**kwargs,
)
elif "clip" in self._model_spec.model_name.lower():
import base64
import re
from io import BytesIO

from PIL import Image

def base64_to_image(base64_str: str) -> Image.Image:
# base64_data = re.sub("^data:image/.+;base64,", "", base64_str)
base64_data = base64_str.split(",", 1)[1]
byte_data = base64.b64decode(base64_data)
image_data = BytesIO(byte_data)
img = Image.open(image_data)
return img

objs: list[dict[str, str]] = []
for item in sentences:
if isinstance(item, dict):
if item.get("text") is not None:
objs.append(item["text"])
elif item.get("image") is not None:
if re.match(r"^data:image/.+;base64,", item["image"]):
image = base64_to_image(item["image"])
objs.append(image)
else:
objs.append(item["image"])
else:
logger.error("Please check the input data.")
all_embeddings, all_token_nums = encode(
self._model,
objs,
convert_to_numpy=False,
**self._kwargs,
)
else:
all_embeddings, all_token_nums = encode(
self._model,
Expand Down
2 changes: 1 addition & 1 deletion xinference/model/embedding/tests/test_embedding_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ def test_model_from_modelscope():

model_path = cache(TEST_MODEL_SPEC_FROM_MODELSCOPE)
model, _ = create_embedding_model_instance(
"mock", "cuda", "mock", "bge-small-zh-v1.5", "sentence_transformer", model_path
"mock", None, "mock", "bge-small-zh-v1.5", "sentence_transformer", model_path
)
# input is a string
input_text = "乱条犹未变初黄,倚得东风势便狂。解把飞花蒙日月,不知天地有清霜。"
Expand Down

0 comments on commit 1b8ee1e

Please sign in to comment.