a
    ~g%                     @   s  d Z ddlmZ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feee%e&e&e&ee	 e
eed
ddZ'd/eee e&ee% ee	 e
eedddZ(d0eee ee e&e&ee ee ee ee% ee	 e
e)eedd d!Z*d1eee ee e&e&ee ee% ee	 e
eed$d%d&Z+ed'd(d)d*d2ee&ee% ee	 eed,d-d.Z,dS )3zLoad question answering chains.    )AnyMapping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eeed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   n/var/www/html/emsaiapi.evdpl.com/venv/lib/python3.9/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contextscoreanswerN)
r   promptverbosedocument_variable_namerank_key
answer_keycallback_manager	callbacksr   r   c           
   	   K   s.   t | ||||d}	tf |	|||||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   _load_map_rerank_chain$   s"    r.   )r   r%   r'   r&   r*   r+   r   r   c           	      K   s<   |pt j| }t| ||||d}tf |||||d|S )Nr,   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_chainA   s"    	r1   	summaries  )r   question_promptcombine_promptcombine_document_variable_name!map_reduce_document_variable_namecollapse_prompt
reduce_llmcollapse_llmr&   r*   r+   	token_maxr   r   c              	   K   s   |pt j| }|pt j| }t| |||	|
d}|p8| }t||||	|
d}t||||	|
d}|d u r|d }|d urtdn&|p| }tt||||	|
d|||	d}t||||d}tf |||||	|
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_chaincollapse_documents_chainr;   r&   )r-   r'   reduce_documents_chainr&   r*   r+   )	r   QUESTION_PROMPT_SELECTORr0   ZCOMBINE_PROMPT_SELECTORr   r   
ValueErrorr   r   )r   r4   r5   r6   r7   r8   r9   r:   r&   r*   r+   r;   r   _question_promptZ_combine_prompt	map_chain_reduce_llmreduce_chainr<   collapse_chain_collapse_llmr>   r   r   r   _load_map_reduce_chain]   sz    rG   context_strexisting_answer)r   r4   refine_promptr'   initial_response_name
refine_llmr&   r*   r+   r   r   c	              
   K   sj   |pt j| }
|pt j| }t| |
|||d}|p8| }t|||||d}tf |||||||d|	S )Nr,   )initial_llm_chainrefine_llm_chainr'   rK   r&   r*   r+   )r   r?   r0   ZREFINE_PROMPT_SELECTORr   r   )r   r4   rJ   r'   rK   rL   r&   r*   r+   r   rA   Z_refine_promptinitial_chain_refine_llmrefine_chainr   r   r   _load_refine_chain   s>    
rR   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)sinceremovalmessagestuff)r   
chain_typer&   r*   r   r   c                 K   sH   t tttd}||vr.td| d|  || | 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.
    )rV   
map_reducerefine
map_rerankzGot unsupported chain type: z. Should be one of )r&   r*   )r1   rG   rR   r.   r@   keys)r   rW   r&   r*   r   loader_mappingr   r   r   load_qa_chain   s$    #r]   )Nr"   NNN)NNr2   r"   NNNNNNr3   )NNrH   rI   NNNN)rV   NN)-r!   typingr   r   r   r   langchain_core._apir   langchain_core.callbacksr   r   langchain_core.language_modelsr	   langchain_core.promptsr
   langchain.chainsr   'langchain.chains.combine_documents.baser   -langchain.chains.combine_documents.map_reducer   -langchain.chains.combine_documents.map_rerankr   )langchain.chains.combine_documents.refiner   (langchain.chains.combine_documents.stuffr   langchain.chains.llmr   Z#langchain.chains.question_answeringr   r   r   5langchain.chains.question_answering.map_rerank_promptr   MAP_RERANK_PROMPTr   boolstrr.   r1   intrG   rR   r]   r   r   r   r   <module>   s                   T        -   