Source code for haive.core.engine.retriever.mixins
# src/haive/core/engine/retriever/mixins.py"""Retriever mixins for the Haive framework."""fromtypingimportAnyfromlangchain_core.documentsimportDocumentfrompydanticimportfield_validatorfromhaive.core.engine.retriever.retrieverimport(BaseRetrieverConfig,VectorStoreRetrieverConfig,)fromhaive.core.engine.vectorstore.vectorstoreimportVectorStoreConfigfromhaive.core.models.embeddings.baseimport(BaseEmbeddingConfig,HuggingFaceEmbeddingConfig,)
[docs]classRetrieverMixin:"""Mixin that provides retriever functionality with field validators and class methods. This mixin adds retriever capabilities to any class that inherits from it. It provides: - Field validator to automatically convert VectorStoreConfig to VectorStoreRetrieverConfig - Class methods to create instances with retrievers from various sources """
[docs]@field_validator("engine",mode="before")@classmethoddefconvert_vectorstore_to_retriever(cls,v)->Any:"""Convert VectorStoreConfig to VectorStoreRetrieverConfig if needed."""ifisinstance(v,VectorStoreConfig):returnVectorStoreRetrieverConfig(name=f"retriever_{v.name}",vector_store_config=v)returnv
[docs]@classmethoddeffrom_vectorstore(cls,vector_store_config:VectorStoreConfig,retriever_kwargs:dict[str,Any]|None=None,**kwargs,):"""Create instance with a retriever from a vector store configuration. Args: vector_store_config: Vector store configuration retriever_kwargs: Additional kwargs for retriever creation **kwargs: Additional arguments for the class instance Returns: Instance with retriever created from vector store """retriever_config=VectorStoreRetrieverConfig(name=f"retriever_{vector_store_config.name}",vector_store_config=vector_store_config,**(retriever_kwargsor{}),)returncls(engine=retriever_config,**kwargs)
[docs]@classmethoddeffrom_documents(cls,documents:list[Document],embedding_model:BaseEmbeddingConfig|None=None,vector_store_provider:str="FAISS",retriever_kwargs:dict[str,Any]|None=None,**kwargs,):"""Create instance with a retriever from documents. Args: documents: Documents to create vector store from embedding_model: Optional embedding model for the vector store vector_store_provider: Vector store provider to use retriever_kwargs: Additional kwargs for retriever creation **kwargs: Additional arguments for the class instance Returns: Instance with retriever created from documents """# Use a sensible default name if not providedif"name"notinkwargs:kwargs["name"]=cls.__name__# Use default embedding model if not providedifembedding_modelisNone:embedding_model=HuggingFaceEmbeddingConfig(model="sentence-transformers/all-mpnet-base-v2")# Create vector store config from documentsvs_config=VectorStoreConfig(name=kwargs.get("name","document_vectorstore"),documents=documents,embedding_model=embedding_model,vector_store_provider=vector_store_provider,)# Create retriever configretriever_config=VectorStoreRetrieverConfig(name=f"retriever_{vs_config.name}",vector_store_config=vs_config,**(retriever_kwargsor{}),)returncls(engine=retriever_config,**kwargs)
[docs]@classmethoddeffrom_retriever(cls,retriever_config:BaseRetrieverConfig,**kwargs):"""Create instance with a retriever configuration. Args: retriever_config: Retriever configuration **kwargs: Additional arguments for the class instance Returns: Instance with the specified retriever """returncls(engine=retriever_config,**kwargs)