
    3fi                        d 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
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)Mapping)Any)
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               `/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_classic/chains/mapreduce.pyfrom_paramszMapReduceChain.from_params2   s     VyI	) 

 ':"r

 "6$/"
 #: #
#9#
 (<#	#
  
$;'
 	
 	
    Tforbid)arbitrary_types_allowedextrac                    | j                   gS )zExpect input key.)r   selfs    r,   
input_keyszMapReduceChain.input_keysY   s     r.   c                    | j                   gS )zReturn output key.)r   r3   s    r,   output_keyszMapReduceChain.output_keys^   s       r.   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   )
r4   inputsrun_manager_run_managerdoc_texttextstextdocs_inputsoutputss
             r,   _callzMapReduceChain._callc   s    
 #S&@&Q&Q&S::dnn-""--h78=>d+>>#
#
((22D#
 ..22",,. 3 
 )) ?s   B=)NNN)r!   r
   r"   r   r   r   r#   r   r(   Mapping[str, Any] | Noner)   rI   r*   r   returnr   )rJ   z	list[str])N)r?   dict[str, str]r@   z!CallbackManagerForChainRun | NonerJ   rK   )__name__
__module____qualname____doc____annotations__r   r   classmethodr-   r   model_configpropertyr5   r7   rH   r&   r.   r,   r   r      s     66,!Is!#J#  $9=8<

 #
 $	

 
 7
 6
 
 

 
B  $L
     ! ! :>** 7* 
	*r.   r   N)#rO   
__future__r   collections.abcr   typingr   langchain_core._apir   langchain_core.callbacksr   r   langchain_core.documentsr	   langchain_core.language_modelsr
   langchain_core.promptsr   langchain_text_splittersr   pydanticr   langchain_classic.chainsr   langchain_classic.chains.baser   /langchain_classic.chains.combine_documents.baser   5langchain_classic.chains.combine_documents.map_reducer   0langchain_classic.chains.combine_documents.stuffr   langchain_classic.chains.llmr   r   r&   r.   r,   <module>rd      sp    # #  * J - < 5 1  9 / U Q 1 
	H		M*U M*	M*r.   