o
    `+ i%                     @   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
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! ddl"m#Z$ G dd deZ%e$ddddddddedede&de'de'de'dee
 d ed!ed"efd#d$Z(dddddd%dedee de'dee& dee
 d ed!ed"efd&d'Z)ddd(dddddddd)d*ded+ee d,ee d-e'd.e'd/ee d0ee d1ee dee& dee
 d ed2e*d!ed"efd3d4Z+ddd5d6ddddd7ded+ee d8ee de'd9e'd:ee dee& dee
 d ed!ed"efd;d<Z,ed=d>d?d@	A		dEdedBe'dee& dee
 d!ed"efdCdDZ-dS )FzLoad question answering chains.    )Mapping)AnyOptionalProtocol)
deprecated)BaseCallbackManager	Callbacks)BaseLanguageModel)BasePromptTemplate)ReduceDocumentsChain)BaseCombineDocumentsChain)MapReduceDocumentsChain)MapRerankDocumentsChain)RefineDocumentsChain)StuffDocumentsChain)LLMChain)map_reduce_promptrefine_promptsstuff_prompt)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   u/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/langchain/chains/question_answering/chain.py__call__   s    zLoadingCallable.__call__N)__name__
__module____qualname____doc__r	   r   r   r   r   r   r   r   r      s    r   FcontextZscoreZanswerN)promptverbosedocument_variable_namerank_key
answer_keycallback_manager	callbacksr   r#   r$   r%   r&   r'   r(   r)   r   r   c          
   	   K   s.   t | ||||d}	td|	|||||d|S )Nr   r#   r$   r(   r)   )	llm_chainr&   r'   r%   r$   r(   r   )r   r   )
r   r#   r$   r%   r&   r'   r(   r)   r   r+   r   r   r   _load_map_rerank_chain'   s"   r,   )r#   r%   r$   r(   r)   c          	      K   s<   |pt j| }t| ||||d}td|||||d|S )Nr*   r+   r%   r$   r(   r)   r   )r   ZPROMPT_SELECTOR
get_promptr   r   )	r   r#   r%   r$   r(   r)   r   Z_promptr+   r   r   r   _load_stuff_chainE   s"   
r/   Z	summariesi  )question_promptcombine_promptcombine_document_variable_name!map_reduce_document_variable_namecollapse_prompt
reduce_llmcollapse_llmr$   r(   r)   	token_maxr0   r1   r2   r3   r4   r5   r6   r7   c             	   K   s   |pt j| }|pt j| }t| |||	|
d}|p| }t||||	|
d}t||||	|
d}|d u r@d }|d ur?d}t|n|pC| }tt||||	|
d|||	d}t||||d}td|||||	|
d|S )Nr*   r-   zfcollapse_llm provided, but collapse_prompt was not: please provide one or stop providing collapse_llm.)r+   r%   r$   r(   )combine_documents_chainZcollapse_documents_chainr7   r$   )r+   r%   reduce_documents_chainr$   r(   r)   r   )	r   QUESTION_PROMPT_SELECTORr.   ZCOMBINE_PROMPT_SELECTORr   r   
ValueErrorr   r   )r   r0   r1   r2   r3   r4   r5   r6   r$   r(   r)   r7   r   _question_promptZ_combine_promptZ	map_chainZ_reduce_llmZreduce_chainr8   Zcollapse_chainmsgZ_collapse_llmr9   r   r   r   _load_map_reduce_chainb   s|   r>   Zcontext_strZexisting_answer)r0   refine_promptr%   initial_response_name
refine_llmr$   r(   r)   r?   r@   rA   c             
   K   sj   |pt j| }
|pt j| }t| |
|||d}|p| }t|||||d}td|||||||d|	S )Nr*   )Zinitial_llm_chainZrefine_llm_chainr%   r@   r$   r(   r)   r   )r   r:   r.   ZREFINE_PROMPT_SELECTORr   r   )r   r0   r?   r%   r@   rA   r$   r(   r)   r   r<   Z_refine_promptZinitial_chainZ_refine_llmZrefine_chainr   r   r   _load_refine_chain   s>   
rB   z0.2.13z1.0a1  This class is deprecated. See the following migration guides for replacements based on `chain_type`:
stuff: https://python.langchain.com/docs/versions/migrating_chains/stuff_docs_chain
map_reduce: https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain
refine: https://python.langchain.com/docs/versions/migrating_chains/refine_chain
map_rerank: https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain

See also guides on retrieval and question-answering here: https://python.langchain.com/docs/how_to/#qa-with-rag)ZsinceZremovalmessagestuff
chain_typec                 K   sL   t tttd}||vrd| d|  }t||| | f||d|S )a  Load question answering 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", "map_rerank", 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.
        callback_manager: Callback manager to use for the chain.

    Returns:
        A chain to use for question answering.
    )rD   Z
map_reduceZrefineZ
map_rerankzGot unsupported chain type: z. Should be one of )r$   r(   )r/   r>   rB   r,   keysr;   )r   rE   r$   r(   r   Zloader_mappingr=   r   r   r   load_qa_chain   s&   #rG   )rD   NN).r!   collections.abcr   typingr   r   r   Zlangchain_core._apir   Zlangchain_core.callbacksr   r   Zlangchain_core.language_modelsr	   Zlangchain_core.promptsr
   Zlangchain.chainsr   Z'langchain.chains.combine_documents.baser   Z-langchain.chains.combine_documents.map_reducer   Z-langchain.chains.combine_documents.map_rerankr   Z)langchain.chains.combine_documents.refiner   Z(langchain.chains.combine_documents.stuffr   Zlangchain.chains.llmr   Z#langchain.chains.question_answeringr   r   r   Z5langchain.chains.question_answering.map_rerank_promptr   ZMAP_RERANK_PROMPTr   boolstrr,   r/   intr>   rB   rG   r   r   r   r   <module>   s>   	

!	
 	

W	

.