Ë
    ´Œj$  ã                  ó  — 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)z‰Map-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               úd/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain/chains/mapreduce.pyÚfrom_paramszMapReduceChain.from_params0   s—   € ô  ¨V¸yÔ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ˆà—:‘:˜dŸn™nÓ-ˆØ×"Ñ"×-Ñ-¨hÓ7ˆÙ8=Ó>¹°” dÖ+¸ˆÐ>ð#
Øð#
à×(Ñ(×2Ñ2°Dñ#
ˆð ×.Ñ.×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Ø,ØÓØØ!€IˆsÓ!Ø#€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/   