a
    ag                     @  s   d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z# e
ddddG dd deZ$dS )zMap-reduce chain.

Splits up a document, sends the smaller parts to the LLM with one prompt,
then combines the results with another one.
    )annotations)AnyDictListMappingOptional)
deprecated)CallbackManagerForChainRun	CallbacksDocument)BaseLanguageModel)BasePromptTemplate)TextSplitter)
ConfigDict)ReduceDocumentsChain)Chain)BaseCombineDocumentsChain)MapReduceDocumentsChain)StuffDocumentsChain)LLMChainz0.2.13z1.0a  Refer to migration guide here for a recommended implementation using LangGraph: https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/. See also LangGraph guides for map-reduce: https://langchain-ai.github.io/langgraph/how-tos/map-reduce/.)ZsinceZremovalmessagec                   @  s   e Zd ZU dZded< ded< dZded< d	Zded
< ed"dddddddd dddZe	dddZ
eddddZeddddZd#ddddd d!ZdS )$MapReduceChainzMap-reduce chain.r   combine_documents_chainr   text_splitterZ
input_textstr	input_keyZoutput_text
output_keyNr   r   r
   zOptional[Mapping[str, Any]]r   )llmpromptr   	callbackscombine_chain_kwargsreduce_chain_kwargskwargsreturnc                 K  sh   t |||d}tf ||d|r"|ni }	t|	d}
tf ||
|d|rJ|ni }| f |||d|S )zDConstruct a map-reduce chain that uses the chain for map and reduce.)r   r   r    )	llm_chainr    )r   )r%   reduce_documents_chainr    )r   r   r    )r   r   r   r   )clsr   r   r   r    r!   r"   r#   r%   Zstuff_chainr&   r    r(   h/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain/chains/mapreduce.pyfrom_params/   s0    

zMapReduceChain.from_paramsTZforbid)Zarbitrary_types_allowedextraz	List[str])r$   c                 C  s   | j gS )z2Expect input key.

        :meta private:
        )r   selfr(   r(   r)   
input_keysV   s    zMapReduceChain.input_keysc                 C  s   | j gS )z3Return output key.

        :meta private:
        )r   r,   r(   r(   r)   output_keys^   s    zMapReduceChain.output_keyszDict[str, str]z$Optional[CallbackManagerForChainRun])inputsrun_managerr$   c           	      C  sd   |p
t  }|| j}| j|}dd |D }i || jj|i}| jj|| d}| j	|iS )Nc                 S  s   g | ]}t |d qS ))Zpage_contentr   ).0textr(   r(   r)   
<listcomp>o       z(MapReduceChain._call.<locals>.<listcomp>)r    )
r	   Zget_noop_managerpopr   r   Z
split_textr   runZ	get_childr   )	r-   r0   r1   Z_run_managerZdoc_textZtextsdocsZ_inputsoutputsr(   r(   r)   _callf   s    zMapReduceChain._call)NNN)N)__name__
__module____qualname____doc____annotations__r   r   classmethodr*   r   Zmodel_configpropertyr.   r/   r:   r(   r(   r(   r)   r      s(   
    !
 r   N)%r>   
__future__r   typingr   r   r   r   r   Zlangchain_core._apir   Zlangchain_core.callbacksr	   r
   Zlangchain_core.documentsr   Zlangchain_core.language_modelsr   Zlangchain_core.promptsr   Zlangchain_text_splittersr   Zpydanticr   Zlangchain.chainsr   Zlangchain.chains.baser   Z'langchain.chains.combine_documents.baser   Z-langchain.chains.combine_documents.map_reducer   Z(langchain.chains.combine_documents.stuffr   Zlangchain.chains.llmr   r   r(   r(   r(   r)   <module>   s*   
