
    @h$                        S r SSKJr  SSKJr  SSKJrJr  SSKJ	r	  SSK
JrJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"  \	" SSSS9 " S S\5      5       r#g)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)Mapping)Any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/.)sinceremovalmessagec                      \ rS rSr% SrS\S'    S\S'    SrS\S	'   S
rS\S'   \   S               SS jj5       r	\
" SSS9r\SS j5       r\SS j5       r S     SS jjrSrg)MapReduceChain   zMap-reduce chain.r   combine_documents_chainr   text_splitter
input_textstr	input_keyoutput_text
output_keyNc                    [        XUS9n[        SUUS.U(       a  UO0 D6n	[        U	S9n
[        SUU
US.U(       a  UO0 D6nU " SUUUS.UD6$ )zDConstruct a map-reduce chain that uses the chain for map and reduce.)llmprompt	callbacks)	llm_chainr%   )r   )r&   reduce_documents_chainr%   )r   r   r%    )r   r   r   r   )clsr#   r$   r   r%   combine_chain_kwargsreduce_chain_kwargskwargsr&   stuff_chainr'   r   s               R/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/chains/mapreduce.pyfrom_paramsMapReduceChain.from_params0   s     yI	) 

 ':"r

 "6$/"
 #: #
#9#
 (<#	#
  
$;'
 	
 	
    Tforbid)arbitrary_types_allowedextrac                    U R                   /$ )z"Expect input key.

:meta private:
)r   selfs    r.   
input_keysMapReduceChain.input_keysW   s     r1   c                    U R                   /$ )z#Return output key.

:meta private:
)r!   r6   s    r.   output_keysMapReduceChain.output_keys_   s       r1   c                   U=(       d    [         R                  " 5       nUR                  U R                  5      nU R                  R                  U5      nU Vs/ sH  n[        US9PM     nn0 UEU R                  R                  U0EnU R                  R                  UUR                  5       S9n	U R                  U	0$ s  snf )N)page_content)r%   )r   get_noop_managerpopr   r   
split_textr
   r   run	get_childr!   )
r7   inputsrun_manager_run_managerdoc_texttextstextdocs_inputsoutputss
             r.   _callMapReduceChain._callg   s    
 #S&@&Q&Q&S::dnn-""--h78=>d+>#
#
((22D#
 ..22",,. 3 
 )) ?s   B?r(   )NNN)r#   r   r$   r   r   r   r%   r	   r*   Optional[Mapping[str, Any]]r+   rO   r,   r   returnr   )rP   z	list[str])N)rD   dict[str, str]rE   z$Optional[CallbackManagerForChainRun]rP   rQ   )__name__
__module____qualname____firstlineno____doc____annotations__r   r!   classmethodr/   r   model_configpropertyr8   r;   rM   __static_attributes__r(   r1   r.   r   r      s     66,!Is!#J#  $<@;?

 #
 $	

 
 :
 9
 
 

 
B  $L
     ! ! =A** :* 
	* *r1   r   N)$rV   
__future__r   collections.abcr   typingr   r   langchain_core._apir   langchain_core.callbacksr   r	   langchain_core.documentsr
   langchain_core.language_modelsr   langchain_core.promptsr   langchain_text_splittersr   pydanticr   langchain.chainsr   langchain.chains.baser   'langchain.chains.combine_documents.baser   -langchain.chains.combine_documents.map_reducer   (langchain.chains.combine_documents.stuffr   langchain.chains.llmr   r   r(   r1   r.   <module>rl      sk    # #   * J - < 5 1  1 ' M Q H ) 
	H		S*U S*	S*r1   