
    h$                       d 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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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/eduruby.in/venv/lib/python3.12/site-packages/langchain/chains/mapreduce.pyfrom_paramszMapReduceChain.from_params0   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_keysW   s     r/   c                    | j                   gS )z3Return output key.

        :meta private:
        )r    r4   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    )
r5   inputsrun_manager_run_managerdoc_texttextstextdocs_inputsoutputss
             r-   _callzMapReduceChain._callg   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)   Optional[Mapping[str, Any]]r*   rJ   r+   r   returnr   )rK   z	list[str])N)r@   dict[str, str]rA   z$Optional[CallbackManagerForChainRun]rK   rL   )__name__
__module____qualname____doc____annotations__r   r    classmethodr.   r   model_configpropertyr6   r8   rI   r'   r/   r-   r   r      s     66,!Is!#J#  $<@;?

 #
 $	

 
 :
 9
 
 

 
B  $L
     ! ! =A** :* 
	*r/   r   N)$rP   
__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'   r/   r-   <module>re      sk    # #   * J - < 5 1  1 ' M Q H ) 
	H		S*U S*	S*r/   