
    ih                       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       G d de             Z$y)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/.)sinceremovalmessagec                      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       Z e	dd      Z
edd       Zedd       Z	 d	 	 	 	 	 ddZy)MapReduceChainzMap-reduce chain.r   combine_documents_chainr   text_splitter
input_textstr	input_keyoutput_text
output_keyNc                    t        |||      }t        d||d|r|ni }	t        |	      }
t        d||
|d|r|ni } | d|||d|S )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               X/var/www/html/dev/engine/venv/lib/python3.12/site-packages/langchain/chains/mapreduce.pyfrom_paramszMapReduceChain.from_params/   s     VyI	) 

 ':"r

 "6$/"
 #: #
#9#
 (<#	#
  
$;'
 	
 	
    Tforbid)arbitrary_types_allowedextrac                    | j                   gS )z2Expect input key.

        :meta private:
        )r    selfs    r/   
input_keyszMapReduceChain.input_keysV   s     r1   c                    | j                   gS )z3Return output key.

        :meta private:
        )r"   r6   s    r/   output_keyszMapReduceChain.output_keys^   s       r1   c                   |xs t        j                         }|j                  | j                        }| j                  j                  |      }|D cg c]  }t        |       }}i || j                  j                  |i}| j                  j                  ||j                               }	| j                  |	iS c c}w )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/   _callzMapReduceChain._callf   s    
 #S&@&Q&Q&S::dnn-""--h78=>d+>>#
#
((22D#
 ..22|557 3 
 )) ?s   B=)NNN)r$   r   r%   r   r   r   r&   r   r+   Optional[Mapping[str, Any]]r,   rL   r-   r   returnr   )rM   z	List[str])N)rB   Dict[str, str]rC   z$Optional[CallbackManagerForChainRun]rM   rN   )__name__
__module____qualname____doc____annotations__r    r"   classmethodr0   r   model_configpropertyr8   r:   rK   r)   r1   r/   r   r      s     66,!Is!#J#  $<@;?

 #
 $	

 
 :
 9
 
 

 
B  $L
     ! ! =A** :* 
	*r1   r   N)%rR   
__future__r   typingr   r   r   r   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>rf      sk    # 5 5 * J - < 5 1  1 ' M Q H ) 
	H		R*U R*	R*r1   