[docs]classLlamaIndexRetriever(BaseRetriever):"""`LlamaIndex` retriever. It is used for the question-answering with sources over an LlamaIndex data structure."""index:Any=None"""LlamaIndex index to query."""query_kwargs:Dict=Field(default_factory=dict)"""Keyword arguments to pass to the query method."""def_get_relevant_documents(self,query:str,*,run_manager:CallbackManagerForRetrieverRun)->List[Document]:"""Get documents relevant for a query."""try:fromllama_index.core.base.response.schemaimportResponsefromllama_index.core.indices.baseimportBaseGPTIndexexceptImportError:raiseImportError("You need to install `pip install llama-index` to use this retriever.")index=cast(BaseGPTIndex,self.index)response=index.query(query,**self.query_kwargs)response=cast(Response,response)# parse source nodesdocs=[]forsource_nodeinresponse.source_nodes:metadata=source_node.metadataor{}docs.append(Document(page_content=source_node.get_content(),metadata=metadata))returndocs
[docs]classLlamaIndexGraphRetriever(BaseRetriever):"""`LlamaIndex` graph data structure retriever. It is used for question-answering with sources over an LlamaIndex graph data structure."""graph:Any=None"""LlamaIndex graph to query."""query_configs:List[Dict]=Field(default_factory=list)"""List of query configs to pass to the query method."""def_get_relevant_documents(self,query:str,*,run_manager:CallbackManagerForRetrieverRun)->List[Document]:"""Get documents relevant for a query."""try:fromllama_index.core.base.response.schemaimportResponsefromllama_index.core.composability.baseimport(QUERY_CONFIG_TYPE,ComposableGraph,)exceptImportError:raiseImportError("You need to install `pip install llama-index` to use this retriever.")graph=cast(ComposableGraph,self.graph)# for now, inject response_mode="no_text" into query configsforquery_configinself.query_configs:query_config["response_mode"]="no_text"query_configs=cast(List[QUERY_CONFIG_TYPE],self.query_configs)response=graph.query(query,query_configs=query_configs)response=cast(Response,response)# parse source nodesdocs=[]forsource_nodeinresponse.source_nodes:metadata=source_node.metadataor{}docs.append(Document(page_content=source_node.get_content(),metadata=metadata))returndocs