
    Ng                       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$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/.)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dS ))MapReduceChainzMap-reduce chain.r   combine_documents_chainr   text_splitter
input_textstr	input_keyoutput_text
output_keyNllmr   promptr   	callbacksr   combine_chain_kwargsOptional[Mapping[str, Any]]reduce_chain_kwargskwargsr   returnc                    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.)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-   stuff_chainr.   r   s               V/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/chains/mapreduce.pyfrom_paramszMapReduceChain.from_params/   s     VyIII	) 

 
 ':A""r
 

 "6$/"
 "
 "
 #: #
#9#
 #
 (<C##	#
 #
 s 
$;'
 
 	
 
 	
    Tforbid)arbitrary_types_allowedextra	List[str]c                    | j         gS )z2Expect input key.

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

        :meta private:
        )r#   r:   s    r2   output_keyszMapReduceChain.output_keys^   s       r4   inputsDict[str, str]run_manager$Optional[CallbackManagerForChainRun]c                >   |pt          j                    }|                    | j                  }| j                            |          }d |D             }i || j        j        |i}| j                            ||                                          }| j	        |iS )Nc                .    g | ]}t          |           S ))page_contentr   ).0texts     r2   
<listcomp>z(MapReduceChain._call.<locals>.<listcomp>o   s#    >>>d+++>>>r4   )r&   )
r
   get_noop_managerpopr!   r   
split_textr   run	get_childr#   )	r;   r?   rA   _run_managerdoc_texttextsdocs_inputsoutputss	            r2   _callzMapReduceChain._callf   s    
 #S&@&Q&S&S::dn--"--h77>>>>>#
#
(2D#
 #
 .22|5577 3 
 
 ))r4   )NNN)r$   r   r%   r   r   r   r&   r   r'   r(   r)   r(   r*   r   r+   r   )r+   r8   )N)r?   r@   rA   rB   r+   r@   )__name__
__module____qualname____doc____annotations__r!   r#   classmethodr3   r   model_configpropertyr<   r>   rT   r/   r4   r2   r   r      s
         6666,!I!!!!#J####  $<@;?
 
 
 
 [
B : $  L
       X  ! ! ! X! =A* * * * * * *r4   r   N)%rX   
__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/   r4   r2   <module>rl      s    # " " " " " 5 5 5 5 5 5 5 5 5 5 5 5 5 5 * * * * * * J J J J J J J J - - - - - - < < < < < < 5 5 5 5 5 5 1 1 1 1 1 1       1 1 1 1 1 1 ' ' ' ' ' ' M M M M M M Q Q Q Q Q Q H H H H H H ) ) ) ) ) ) 
	H		 	 	R* R* R* R* R*U R* R*	 	R* R* R*r4   