fromabcimportABC,abstractmethodfromenumimportEnumfromtypingimportCallable,List,OptionalfrompydanticimportBaseModel,Field,field_validatorfromredisvl.redis.utilsimportarray_to_bufferfromredisvl.schema.fieldsimportVectorDataTypeclassVectorizers(Enum):azure_openai="azure_openai"openai="openai"cohere="cohere"mistral="mistral"vertexai="vertexai"hf="hf"voyageai="voyageai"classBaseVectorizer(BaseModel,ABC):"""Base vectorizer interface."""model:strdtype:str="float32"dims:Optional[int]=None@propertydeftype(self)->str:return"base"@field_validator("dtype")@classmethoddefcheck_dtype(cls,dtype):try:VectorDataType(dtype.upper())exceptValueError:raiseValueError(f"Invalid data type: {dtype}. Supported types are: {[t.lower()fortinVectorDataType]}")returndtype@field_validator("dims")@classmethoddefcheck_dims(cls,value):"""Ensures the dims are a positive integer."""ifvalue<=0:raiseValueError("Dims must be a positive integer.")returnvalue@abstractmethoddefembed_many(self,texts:List[str],preprocess:Optional[Callable]=None,batch_size:int=1000,as_buffer:bool=False,**kwargs,)->List[List[float]]:raiseNotImplementedError@abstractmethoddefembed(self,text:str,preprocess:Optional[Callable]=None,as_buffer:bool=False,**kwargs,)->List[float]:raiseNotImplementedErrorasyncdefaembed_many(self,texts:List[str],preprocess:Optional[Callable]=None,batch_size:int=1000,as_buffer:bool=False,**kwargs,)->List[List[float]]:# Fallback to standard embedding call if no async supportreturnself.embed_many(texts,preprocess,batch_size,as_buffer,**kwargs)asyncdefaembed(self,text:str,preprocess:Optional[Callable]=None,as_buffer:bool=False,**kwargs,)->List[float]:# Fallback to standard embedding call if no async supportreturnself.embed(text,preprocess,as_buffer,**kwargs)defbatchify(self,seq:list,size:int,preprocess:Optional[Callable]=None):forposinrange(0,len(seq),size):ifpreprocessisnotNone:yield[preprocess(chunk)forchunkinseq[pos:pos+size]]else:yieldseq[pos:pos+size]def_process_embedding(self,embedding:List[float],as_buffer:bool,dtype:str):ifas_buffer:returnarray_to_buffer(embedding,dtype)returnembedding