# Copyright (c) RenChu Wang - All Rights ReservedfrombocoelimportEmbedder,EnsembleEmbedder,HuggingfaceEmbedder,SbertEmbedderfrombocoel.commonimportStrEnumfrom.importcommon
[docs]classEmbedderName(StrEnum):""" The names of the embedders. """SBERT="SBERT""Corresponds to `SbertEmbedder`."HUGGINGFACE="HUGGINGFACE""Corresponds to `HuggingfaceEmbedder`."HUGGINGFACE_ENSEMBLE="HUGGINGFACE_ENSEMBLE""Corresponds to `EnsembleEmbedder` concatenating `HuggingfaceEmbedder`."
[docs]defembedder(name:str|EmbedderName,/,*,model_name:str|list[str],device:str="auto",batch_size:int,)->Embedder:""" Create an embedder. Parameters: name: The name of the embedder. model_name: The model name to use. device: The device to use. batch_size: The batch size to use. Returns: The embedder instance. Raises: ValueError: If the name is unknown. TypeError: If the model name is not a string for SBERT or Huggingface, or not a list of strings for HuggingfaceEnsemble. """matchEmbedderName.lookup(name):caseEmbedderName.SBERT:ifnotisinstance(model_name,str):raiseTypeError("SbertEmbedder requires a single model name. "f"Got {model_name} instead.")returncommon.correct_kwargs(SbertEmbedder)(model_name=model_name,device=common.auto_device(device),batch_size=batch_size,)caseEmbedderName.HUGGINGFACE:ifnotisinstance(model_name,str):raiseTypeError("HuggingfaceEmbedder requires a single model name. "f"Got {model_name} instead.")returncommon.correct_kwargs(HuggingfaceEmbedder)(path=model_name,device=common.auto_device(device),batch_size=batch_size,)caseEmbedderName.HUGGINGFACE_ENSEMBLE:ifnotisinstance(model_name,list):raiseTypeError("HuggingfaceEnsembleEmbedder requires a list of model names. "f"Got {model_name} instead.")device_list=common.auto_device_list(device,len(model_name))returncommon.correct_kwargs(EnsembleEmbedder)([HuggingfaceEmbedder(path=model,device=dev,batch_size=batch_size)formodel,devinzip(model_name,device_list)])case_:raiseValueError(f"Unknown embedder name: {name}")