a
    ag%                     @   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   w/var/www/html/cobodadashboardai.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contextZscoreZ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"    	r/   	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_chainZcollapse_documents_chainr9   r$   )r+   r%   reduce_documents_chainr$   r(   r)   )	r   QUESTION_PROMPT_SELECTORr.   ZCOMBINE_PROMPT_SELECTORr   r   
ValueErrorr   r   )r   r2   r3   r4   r5   r6   r7   r8   r$   r(   r)   r9   r   _question_promptZ_combine_promptZ	map_chainZ_reduce_llmZreduce_chainr:   Zcollapse_chainZ_collapse_llmr;   r   r   r   _load_map_reduce_chain]   sz    r?   context_strexisting_answer)r   r2   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*   )Zinitial_llm_chainZrefine_llm_chainr%   rC   r$   r(   r)   )r   r<   r.   ZREFINE_PROMPT_SELECTORr   r   )r   r2   rB   r%   rC   rD   r$   r(   r)   r   r>   Z_refine_promptZinitial_chainZ_refine_llmZrefine_chainr   r   r   _load_refine_chain   s>    
rE   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)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.
    )rG   Z
map_reduceZrefineZ
map_rerankzGot unsupported chain type: z. Should be one of )r$   r(   )r/   r?   rE   r,   r=   keys)r   rH   r$   r(   r   Zloader_mappingr   r   r   load_qa_chain   s$    #rJ   )Nr"   NNN)NNr0   r"   NNNNNNr1   )NNr@   rA   NNNN)rG   NN)-r!   typingr   r   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?   rE   rJ   r   r   r   r   <module>   s                   T        -   