from langchain_community.llms.huggingface_pipeline import HuggingFacePipeline from langchain.chains import MapReduceDocumentsChain, ReduceDocumentsChain, LLMChain, StuffDocumentsChain from langchain.prompts import PromptTemplate def get_map_reduce_chain(pipeline_or_llm,model_type)-> LLMChain: if model_type == "openai": llm = pipeline_or_llm map_template = """The following is a set of documents {docs} Based on this list of docs, please identify the main themes. Helpful Answer:""" map_prompt = PromptTemplate.from_template(map_template) reduce_template = """The following is set of summaries: {docs} Take these and distill into a final, consolidated summary of the main themes. Helpful Answer:""" reduce_prompt = PromptTemplate.from_template(reduce_template) else: map_prompt = PromptTemplate.from_template(template="{docs}") reduce_prompt = PromptTemplate.from_template(template="{docs}") llm = HuggingFacePipeline(pipeline=pipeline_or_llm) map_chain = LLMChain(llm = llm, prompt=map_prompt) reduce_chain = LLMChain(llm = llm, prompt = reduce_prompt,verbose = True) combine_documents_chain = StuffDocumentsChain(llm_chain=reduce_chain, document_variable_name="docs") reduce_documents_chain = ReduceDocumentsChain( combine_documents_chain=combine_documents_chain, collapse_documents_chain=combine_documents_chain, token_max=16384, verbose = True, ) map_reduce_chain = MapReduceDocumentsChain( llm_chain=map_chain, reduce_documents_chain=reduce_documents_chain, document_variable_name="docs", return_intermediate_steps=False, verbose = True, ) return map_reduce_chain