o
    Zh1                     @   s  d Z ddl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 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mZ G dd deZejddfde	dededee dedefddZ ejejddddddddf
ddde	dededededee d ee	 d!ee	 dee d"e!d#ed$ee! dedefd%d&Z"ejej#dd'ddfde	d(ed)eded*ed+ee	 dee dedefd,d-Z$	.	d2de	d/edee dedef
d0d1Z%dS )3zLoad summarizing chains.    )AnyMappingOptionalProtocol)	Callbacks)BaseLanguageModel)BasePromptTemplate)BaseCombineDocumentsChain)MapReduceDocumentsChain)ReduceDocumentsChain)RefineDocumentsChain)StuffDocumentsChain)LLMChain)map_reduce_promptrefine_promptsstuff_promptc                   @   s&   e Zd ZdZdededefddZdS )LoadingCallablez2Interface for loading the combine documents chain.llmkwargsreturnc                 K   s   dS )z-Callable to load the combine documents chain.N )selfr   r   r   r   W/var/www/html/lang_env/lib/python3.10/site-packages/langchain/chains/summarize/chain.py__call__   s    zLoadingCallable.__call__N)__name__
__module____qualname____doc__r   r   r	   r   r   r   r   r   r      s    r   textNr   promptdocument_variable_nameverboser   r   c                 K   s$   t | ||d}td|||d|S )Nr   r   r!   )	llm_chainr    r!   r   )r   r   )r   r   r    r!   r   r#   r   r   r   _load_stuff_chain   s   r$   i  )collapse_max_retries
map_promptcombine_promptcombine_document_variable_name!map_reduce_document_variable_namecollapse_prompt
reduce_llmcollapse_llm	token_max	callbacksr%   c                K   s   t | |||
d}|p| }t ||||
d}t||||
d}|d u r+d }|d ur*tdn|p.| }tt ||||
d|d}t|||	||
|d}td|||||
d|S )N)r   r   r!   r.   )r#   r    r!   r.   zfcollapse_llm provided, but collapse_prompt was not: please provide one or stop providing collapse_llm.)r#   r    )combine_documents_chainZcollapse_documents_chainr-   r!   r.   r%   )r#   reduce_documents_chainr    r!   r.   r   )r   r   
ValueErrorr   r
   )r   r&   r'   r(   r)   r*   r+   r,   r!   r-   r.   r%   r   Z	map_chainZ_reduce_llmZreduce_chainr/   Zcollapse_chainZ_collapse_llmr0   r   r   r   _load_map_reduce_chain,   sj   	r2   Zexisting_answerquestion_promptrefine_promptinitial_response_name
refine_llmc                 K   s>   t | ||d}|p
| }	t |	||d}
td||
|||d|S )Nr"   )Zinitial_llm_chainZrefine_llm_chainr    r5   r!   r   )r   r   )r   r3   r4   r    r5   r6   r!   r   Zinitial_chainZ_refine_llmZrefine_chainr   r   r   _load_refine_chaint   s   
r7   stuff
chain_typec                 K   sD   t ttd}||vrtd| d|  || | fd|i|S )a  Load summarizing chain.

    Args:
        llm: Language Model to use in the chain.
        chain_type: Type of document combining chain to use. Should be one of "stuff",
            "map_reduce", and "refine".
        verbose: Whether chains should be run in verbose mode or not. Note that this
            applies to all chains that make up the final chain.

    Returns:
        A chain to use for summarizing.
    )r8   Z
map_reduceZrefinezGot unsupported chain type: z. Should be one of r!   )r$   r2   r7   r1   keys)r   r9   r!   r   Zloader_mappingr   r   r   load_summarize_chain   s   r;   )r8   N)&r   typingr   r   r   r   Zlangchain_core.callbacksr   Zlangchain_core.language_modelsr   Zlangchain_core.promptsr   Z'langchain.chains.combine_documents.baser	   Z-langchain.chains.combine_documents.map_reducer
   Z)langchain.chains.combine_documents.reducer   Z)langchain.chains.combine_documents.refiner   Z(langchain.chains.combine_documents.stuffr   Zlangchain.chains.llmr   Zlangchain.chains.summarizer   r   r   r   ZPROMPTstrboolr$   intr2   ZREFINE_PROMPTr7   r;   r   r   r   r   <module>   s    
	

J	
