Source code for langchain_community.vectorstores.vald
"""Wrapper around Vald vector database."""from__future__importannotationsfromtypingimportAny,Iterable,List,Optional,Tuple,Typeimportnumpyasnpfromlangchain_core.documentsimportDocumentfromlangchain_core.embeddingsimportEmbeddingsfromlangchain_core.vectorstoresimportVectorStorefromlangchain_community.vectorstores.utilsimportmaximal_marginal_relevance
[docs]classVald(VectorStore):"""Vald vector database. To use, you should have the ``vald-client-python`` python package installed. Example: .. code-block:: python from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import Vald model_name = "sentence-transformers/all-mpnet-base-v2" texts = ['foo', 'bar', 'baz'] vald = Vald.from_texts( texts=texts, embedding=HuggingFaceEmbeddings(model_name=model_name), host="localhost", port=8080, skip_strict_exist_check=False, ) """
@propertydefembeddings(self)->Optional[Embeddings]:returnself._embeddingdef_get_channel(self)->Any:try:importgrpcexceptImportError:raiseImportError("Could not import grpcio python package. ""Please install it with `pip install grpcio`.")return(grpc.secure_channel(self.target,self.grpc_credentials,options=self.grpc_options)ifself.grpc_use_secureelsegrpc.insecure_channel(self.target,options=self.grpc_options))
[docs]defadd_texts(self,texts:Iterable[str],metadatas:Optional[List[dict]]=None,grpc_metadata:Optional[Any]=None,skip_strict_exist_check:bool=False,**kwargs:Any,)->List[str]:""" Args: skip_strict_exist_check: Deprecated. This is not used basically. """try:fromvald.v1.payloadimportpayload_pb2fromvald.v1.valdimportupsert_pb2_grpcexceptImportError:raiseImportError("Could not import vald-client-python python package. ""Please install it with `pip install vald-client-python`.")channel=self._get_channel()# Depending on the network quality,# it is necessary to wait for ChannelConnectivity.READY.# _ = grpc.channel_ready_future(channel).result(timeout=10)stub=upsert_pb2_grpc.UpsertStub(channel)cfg=payload_pb2.Upsert.Config(skip_strict_exist_check=skip_strict_exist_check)ids=[]embs=self._embedding.embed_documents(list(texts))fortext,embinzip(texts,embs):vec=payload_pb2.Object.Vector(id=text,vector=emb)res=stub.Upsert(payload_pb2.Upsert.Request(vector=vec,config=cfg),metadata=grpc_metadata,)ids.append(res.uuid)channel.close()returnids
[docs]defdelete(self,ids:Optional[List[str]]=None,skip_strict_exist_check:bool=False,grpc_metadata:Optional[Any]=None,**kwargs:Any,)->Optional[bool]:""" Args: skip_strict_exist_check: Deprecated. This is not used basically. """try:fromvald.v1.payloadimportpayload_pb2fromvald.v1.valdimportremove_pb2_grpcexceptImportError:raiseImportError("Could not import vald-client-python python package. ""Please install it with `pip install vald-client-python`.")ifidsisNone:raiseValueError("No ids provided to delete")channel=self._get_channel()# Depending on the network quality,# it is necessary to wait for ChannelConnectivity.READY.# _ = grpc.channel_ready_future(channel).result(timeout=10)stub=remove_pb2_grpc.RemoveStub(channel)cfg=payload_pb2.Remove.Config(skip_strict_exist_check=skip_strict_exist_check)for_idinids:oid=payload_pb2.Object.ID(id=_id)_=stub.Remove(payload_pb2.Remove.Request(id=oid,config=cfg),metadata=grpc_metadata)channel.close()returnTrue
[docs]defsimilarity_search_with_score_by_vector(self,embedding:List[float],k:int=4,radius:float=-1.0,epsilon:float=0.01,timeout:int=3000000000,grpc_metadata:Optional[Any]=None,**kwargs:Any,)->List[Tuple[Document,float]]:try:fromvald.v1.payloadimportpayload_pb2fromvald.v1.valdimportsearch_pb2_grpcexceptImportError:raiseImportError("Could not import vald-client-python python package. ""Please install it with `pip install vald-client-python`.")channel=self._get_channel()# Depending on the network quality,# it is necessary to wait for ChannelConnectivity.READY.# _ = grpc.channel_ready_future(channel).result(timeout=10)stub=search_pb2_grpc.SearchStub(channel)cfg=payload_pb2.Search.Config(num=k,radius=radius,epsilon=epsilon,timeout=timeout)res=stub.Search(payload_pb2.Search.Request(vector=embedding,config=cfg),metadata=grpc_metadata,)docs_and_scores=[]forresultinres.results:docs_and_scores.append((Document(page_content=result.id),result.distance))channel.close()returndocs_and_scores
[docs]defmax_marginal_relevance_search_by_vector(self,embedding:List[float],k:int=4,fetch_k:int=20,lambda_mult:float=0.5,radius:float=-1.0,epsilon:float=0.01,timeout:int=3000000000,grpc_metadata:Optional[Any]=None,**kwargs:Any,)->List[Document]:try:fromvald.v1.payloadimportpayload_pb2fromvald.v1.valdimportobject_pb2_grpcexceptImportError:raiseImportError("Could not import vald-client-python python package. ""Please install it with `pip install vald-client-python`.")channel=self._get_channel()# Depending on the network quality,# it is necessary to wait for ChannelConnectivity.READY.# _ = grpc.channel_ready_future(channel).result(timeout=10)stub=object_pb2_grpc.ObjectStub(channel)docs_and_scores=self.similarity_search_with_score_by_vector(embedding,fetch_k=fetch_k,radius=radius,epsilon=epsilon,timeout=timeout,grpc_metadata=grpc_metadata,)docs=[]embs=[]fordoc,_indocs_and_scores:vec=stub.GetObject(payload_pb2.Object.VectorRequest(id=payload_pb2.Object.ID(id=doc.page_content)),metadata=grpc_metadata,)embs.append(vec.vector)docs.append(doc)mmr=maximal_marginal_relevance(np.array(embedding),embs,lambda_mult=lambda_mult,k=k,)channel.close()return[docs[i]foriinmmr]
[docs]@classmethoddeffrom_texts(cls:Type[Vald],texts:List[str],embedding:Embeddings,metadatas:Optional[List[dict]]=None,host:str="localhost",port:int=8080,grpc_options:Tuple=(("grpc.keepalive_time_ms",1000*10),("grpc.keepalive_timeout_ms",1000*10),),grpc_use_secure:bool=False,grpc_credentials:Optional[Any]=None,grpc_metadata:Optional[Any]=None,skip_strict_exist_check:bool=False,**kwargs:Any,)->Vald:""" Args: skip_strict_exist_check: Deprecated. This is not used basically. """vald=cls(embedding=embedding,host=host,port=port,grpc_options=grpc_options,grpc_use_secure=grpc_use_secure,grpc_credentials=grpc_credentials,**kwargs,)vald.add_texts(texts=texts,metadatas=metadatas,grpc_metadata=grpc_metadata,skip_strict_exist_check=skip_strict_exist_check,)returnvald