classLangchainEmbedding(BaseEmbedding):"""External embeddings (taken from Langchain). Args: langchain_embedding (langchain.embeddings.Embeddings): Langchain embeddings class. """_langchain_embedding:"LCEmbeddings"=PrivateAttr()_async_not_implemented_warned:bool=PrivateAttr(default=False)def__init__(self,langchain_embeddings:"LCEmbeddings",model_name:Optional[str]=None,embed_batch_size:int=DEFAULT_EMBED_BATCH_SIZE,callback_manager:Optional[CallbackManager]=None,):# attempt to get a useful model nameifmodel_nameisnotNone:model_name=model_nameelifhasattr(langchain_embeddings,"model_name"):model_name=langchain_embeddings.model_nameelifhasattr(langchain_embeddings,"model"):model_name=langchain_embeddings.modelelse:model_name=type(langchain_embeddings).__name__super().__init__(embed_batch_size=embed_batch_size,callback_manager=callback_manager,model_name=model_name,)self._langchain_embedding=langchain_embeddings@classmethoddefclass_name(cls)->str:return"LangchainEmbedding"def_async_not_implemented_warn_once(self)->None:ifnotself._async_not_implemented_warned:print("Async embedding not available, falling back to sync method.")self._async_not_implemented_warned=Truedef_get_query_embedding(self,query:str)->List[float]:"""Get query embedding."""returnself._langchain_embedding.embed_query(query)asyncdef_aget_query_embedding(self,query:str)->List[float]:try:returnawaitself._langchain_embedding.aembed_query(query)exceptNotImplementedError:# Warn the user that sync is being usedself._async_not_implemented_warn_once()returnself._get_query_embedding(query)asyncdef_aget_text_embedding(self,text:str)->List[float]:try:embeds=awaitself._langchain_embedding.aembed_documents([text])returnembeds[0]exceptNotImplementedError:# Warn the user that sync is being usedself._async_not_implemented_warn_once()returnself._get_text_embedding(text)def_get_text_embedding(self,text:str)->List[float]:"""Get text embedding."""returnself._langchain_embedding.embed_documents([text])[0]def_get_text_embeddings(self,texts:List[str])->List[List[float]]:"""Get text embeddings."""returnself._langchain_embedding.embed_documents(texts)