o
    Jjg1                     @   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   X/var/www/html/zoom/venv/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_chain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   	map_chain_reduce_llmreduce_chainr/   collapse_chain_collapse_llmr1   r   r   r   _load_map_reduce_chain,   sj   	r8   existing_answerquestion_promptrefine_promptinitial_response_name
refine_llmc                 K   s>   t | ||d}|p
| }	t |	||d}
td||
|||d|S )Nr"   )initial_llm_chainrefine_llm_chainr    r<   r!   r   )r   r   )r   r:   r;   r    r<   r=   r!   r   initial_chain_refine_llmrefine_chainr   r   r   _load_refine_chaint   s   
rC   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.
    )rD   
map_reducerefinezGot unsupported chain type: z. Should be one of r!   )r$   r8   rC   r2   keys)r   rE   r!   r   loader_mappingr   r   r   load_summarize_chain   s   rJ   )rD   N)&r   typingr   r   r   r   langchain_core.callbacksr   langchain_core.language_modelsr   langchain_core.promptsr   'langchain.chains.combine_documents.baser	   -langchain.chains.combine_documents.map_reducer
   )langchain.chains.combine_documents.reducer   )langchain.chains.combine_documents.refiner   (langchain.chains.combine_documents.stuffr   langchain.chains.llmr   langchain.chains.summarizer   r   r   r   PROMPTstrboolr$   intr8   REFINE_PROMPTrC   rJ   r   r   r   r   <module>   s    
	

J	
