classNebulaGraphQueryEnginePack(BaseLlamaPack):"""NebulaGraph Query Engine pack."""def__init__(self,username:str,password:str,ip_and_port:str,space_name:str,edge_types:str,rel_prop_names:str,tags:str,max_triplets_per_chunk:int,docs:List[Document],query_engine_type:Optional[NebulaGraphQueryEngineType]=None,**kwargs:Any,)->None:"""Init params."""os.environ["GRAPHD_HOST"]="127.0.0.1"os.environ["NEBULA_USER"]=usernameos.environ["NEBULA_PASSWORD"]=passwordos.environ["NEBULA_ADDRESS"]=ip_and_port# such as "127.0.0.1:9669" for local instancenebulagraph_graph_store=NebulaGraphStore(space_name=space_name,edge_types=edge_types,rel_prop_names=rel_prop_names,tags=tags,)nebulagraph_storage_context=StorageContext.from_defaults(graph_store=nebulagraph_graph_store)# define LLMself.llm=OpenAI(temperature=0.1,model="gpt-3.5-turbo")Settings.llm=self.llmnebulagraph_index=KnowledgeGraphIndex.from_documents(documents=docs,storage_context=nebulagraph_storage_context,max_triplets_per_chunk=max_triplets_per_chunk,space_name=space_name,edge_types=edge_types,rel_prop_names=rel_prop_names,tags=tags,include_embeddings=True,)# create indexvector_index=VectorStoreIndex.from_documents(docs)ifquery_engine_type==NebulaGraphQueryEngineType.KG_KEYWORD:# KG keyword-based entity retrievalself.query_engine=nebulagraph_index.as_query_engine(# setting to false uses the raw triplets instead of adding the text from the corresponding nodesinclude_text=False,retriever_mode="keyword",response_mode="tree_summarize",)elifquery_engine_type==NebulaGraphQueryEngineType.KG_HYBRID:# KG hybrid entity retrievalself.query_engine=nebulagraph_index.as_query_engine(include_text=True,response_mode="tree_summarize",embedding_mode="hybrid",similarity_top_k=3,explore_global_knowledge=True,)elifquery_engine_type==NebulaGraphQueryEngineType.RAW_VECTOR:# Raw vector index retrievalself.query_engine=vector_index.as_query_engine()elifquery_engine_type==NebulaGraphQueryEngineType.RAW_VECTOR_KG_COMBO:fromllama_index.core.query_engineimportRetrieverQueryEngine# create custom retrievernebulagraph_vector_retriever=VectorIndexRetriever(index=vector_index)nebulagraph_kg_retriever=KGTableRetriever(index=nebulagraph_index,retriever_mode="keyword",include_text=False)nebulagraph_custom_retriever=CustomRetriever(nebulagraph_vector_retriever,nebulagraph_kg_retriever)# create response synthesizernebulagraph_response_synthesizer=get_response_synthesizer(response_mode="tree_summarize")# Custom combo query engineself.query_engine=RetrieverQueryEngine(retriever=nebulagraph_custom_retriever,response_synthesizer=nebulagraph_response_synthesizer,)elifquery_engine_type==NebulaGraphQueryEngineType.KG_QE:# using KnowledgeGraphQueryEnginefromllama_index.core.query_engineimportKnowledgeGraphQueryEngineself.query_engine=KnowledgeGraphQueryEngine(storage_context=nebulagraph_storage_context,llm=self.llm,verbose=True,)elifquery_engine_type==NebulaGraphQueryEngineType.KG_RAG_RETRIEVER:# using KnowledgeGraphRAGRetrieverfromllama_index.core.query_engineimportRetrieverQueryEnginefromllama_index.core.retrieversimportKnowledgeGraphRAGRetrievernebulagraph_graph_rag_retriever=KnowledgeGraphRAGRetriever(storage_context=nebulagraph_storage_context,llm=self.llm,verbose=True,)self.query_engine=RetrieverQueryEngine.from_args(nebulagraph_graph_rag_retriever)else:# KG vector-based entity retrievalself.query_engine=nebulagraph_index.as_query_engine()defget_modules(self)->Dict[str,Any]:"""Get modules."""return{"llm":self.llm,"query_engine":self.query_engine,}defrun(self,*args:Any,**kwargs:Any)->Any:"""Run the pipeline."""returnself.query_engine.query(*args,**kwargs)