o
    .if                     @  s   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 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! G d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Document)BaseLanguageModel)BasePromptTemplate)Extra)CallbackManagerForChainRun	Callbacks)ReduceDocumentsChain)Chain)BaseCombineDocumentsChain)MapReduceDocumentsChain)StuffDocumentsChain)LLMChain)TextSplitterc                   @  s   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dZG dd dZ	e
d)ddZe
d)dd Z	d*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                 K  sh   t |||d}td||d|r|ni }	t|	d}
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    N )r   r   r   r   )clsr   r   r   r    r!   r#   r$   r&   stuff_chainr'   r   r(   r(   S/var/www/html/corbot_env/lib/python3.10/site-packages/langchain/chains/mapreduce.pyfrom_params#   s0   

zMapReduceChain.from_paramsc                   @  s   e Zd ZdZejZdZdS )zMapReduceChain.Configz'Configuration for this pydantic object.TN)__name__
__module____qualname____doc__r   forbidextraarbitrary_types_allowedr(   r(   r(   r+   ConfigE   s    r4   	List[str]c                 C     | j gS )z2Expect input key.

        :meta private:
        )r   selfr(   r(   r+   
input_keysK      zMapReduceChain.input_keysc                 C  r6   )z3Return output key.

        :meta private:
        )r   r7   r(   r(   r+   output_keysS   r:   zMapReduceChain.output_keysinputsDict[str, str]run_manager$Optional[CallbackManagerForChainRun]c           	      C  sd   |pt  }|| j}| j|}dd |D }i || jj|i}| jj|| d}| j	|iS )Nc                 S  s   g | ]}t |d qS ))page_contentr   ).0textr(   r(   r+   
<listcomp>d   s    z(MapReduceChain._call.<locals>.<listcomp>)r    )
r   get_noop_managerpopr   r   
split_textr   run	get_childr   )	r8   r<   r>   _run_managerdoc_texttextsdocs_inputsoutputsr(   r(   r+   _call[   s   
zMapReduceChain._call)NNN)r   r
   r   r   r   r   r    r   r!   r"   r#   r"   r$   r   r%   r   )r%   r5   )N)r<   r=   r>   r?   r%   r=   )r-   r.   r/   r0   __annotations__r   r   classmethodr,   r4   propertyr9   r;   rO   r(   r(   r(   r+   r      s(   
 !
r   N)#r0   
__future__r   typingr   r   r   r   r   langchain_core.documentsr	   langchain_core.language_modelsr
   langchain_core.promptsr   langchain_core.pydantic_v1r   langchain.callbacks.managerr   r   langchain.chainsr   langchain.chains.baser   'langchain.chains.combine_documents.baser   -langchain.chains.combine_documents.map_reducer   (langchain.chains.combine_documents.stuffr   langchain.chains.llmr   langchain.text_splitterr   r   r(   r(   r(   r+   <module>   s     