o
    `+ is                     @   s  d Z ddlmZ ddl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d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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d*de
d+ed,eded-ed.ee
 dee  dedefd/d0Z%	1	d5de
d2edee  dedef
d3d4Z&dS )6zLoad summarizing chains.    )Mapping)Any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   l/home/app/PaddleOCR-VL-test/.venv_paddleocr/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   textN)promptdocument_variable_nameverboser   r   r    r!   r   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  )
map_promptcombine_promptcombine_document_variable_name!map_reduce_document_variable_namecollapse_prompt
reduce_llmcollapse_llmr!   	token_max	callbackscollapse_max_retriesr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   c                K   s   t | |||
d}|p| }t ||||
d}t||||
d}|d u r-d }|d ur,d}t|n|p0| }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_chainmsgZ_collapse_llmr0   r   r   r   _load_map_reduce_chain0   sj   	r3   Zexisting_answer)question_promptrefine_promptr    initial_response_name
refine_llmr!   r4   r5   r6   r7   c                K   s>   t | ||d}|p
| }	t |	||d}
td||
|||d|S )Nr"   )Zinitial_llm_chainZrefine_llm_chainr    r6   r!   r   )r   r   )r   r4   r5   r    r6   r7   r!   r   Zinitial_chainZ_refine_llmZrefine_chainr   r   r   _load_refine_chainy   s   r8   stuff
chain_typec                 K   sH   t ttd}||vrd| d|  }t||| | 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.
    )r9   Z
map_reduceZrefinezGot unsupported chain type: z. Should be one of r!   )r$   r3   r8   keysr1   )r   r:   r!   r   Zloader_mappingr2   r   r   r   load_summarize_chain   s   r<   )r9   N)'r   collections.abcr   typingr   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$   intr3   ZREFINE_PROMPTr8   r<   r   r   r   r   <module>   s    
	

L	

