a
    ~g                     @  s  d Z ddlm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 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fdddddddddddZ$ej!ej%dd fddddd!dd"d#d$d%Z&ej'ej(ej%ddd d d d d&f
ddddddd'd(d(d!d)dd*d+d,d-Z)ej*ej+ej%d.d/d d fddddddd(d!dd0d1
d2d3Z,e	d4d5d6d7d=ddd!dd9d:d;d<Z-d S )>z,Load question answering with sources chains.    )annotations)AnyMappingOptionalProtocol)
deprecated)BaseLanguageModel)BasePromptTemplate)BaseCombineDocumentsChain)MapReduceDocumentsChain)MapRerankDocumentsChain)ReduceDocumentsChain)RefineDocumentsChain)StuffDocumentsChain)LLMChain)map_reduce_promptrefine_promptsstuff_prompt)PROMPTc                   @  s"   e Zd ZdZddddddZdS )	LoadingCallablez2Interface for loading the combine documents chain.r   r   r
   )llmkwargsreturnc                 K  s   dS )z-Callable to load the combine documents chain.N )selfr   r   r   r   m/var/www/html/emsaiapi.evdpl.com/venv/lib/python3.9/site-packages/langchain/chains/qa_with_sources/loading.py__call__   s    zLoadingCallable.__call__N)__name__
__module____qualname____doc__r   r   r   r   r   r      s   r   Fcontextscoreanswerr   r	   boolstrr   r   )r   promptverbosedocument_variable_namerank_key
answer_keyr   r   c                 K  s&   t | ||d}tf ||||d|S )Nr   r&   r'   )	llm_chainr)   r*   r(   )r   r   )r   r&   r'   r(   r)   r*   r   r,   r   r   r   _load_map_rerank_chain%   s    	r-   Z	summariesNzOptional[bool]r   )r   r&   document_promptr(   r'   r   r   c                 K  s&   t | ||d}tf ||||d|S )Nr+   r,   r(   r.   r'   )r   r   )r   r&   r.   r(   r'   r   r,   r   r   r   _load_stuff_chain8   s    r0   i  zOptional[BasePromptTemplate]zOptional[BaseLanguageModel]intr   )r   question_promptcombine_promptr.   combine_document_variable_name!map_reduce_document_variable_namecollapse_prompt
reduce_llmcollapse_llmr'   	token_maxr   r   c                 K  s   t | ||	d}|p| }t |||	d}t||||	d}|d u rRd }|d urrtdn |pX| }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.   )combine_documents_chaincollapse_documents_chainr9   r'   )r,   reduce_documents_chainr(   r'   )r   r   
ValueErrorr   r   )r   r2   r3   r.   r4   r5   r6   r7   r8   r'   r9   r   Z	map_chainZ_reduce_llmreduce_chainr:   collapse_chainZ_collapse_llmr<   r   r   r   _load_map_reduce_chainJ   sN    	r@   Zcontext_strZexisting_answerr   )
r   r2   refine_promptr.   r(   initial_response_name
refine_llmr'   r   r   c              	   K  s@   t | ||d}	|p| }
t |
||d}tf |	|||||d|S )Nr+   )initial_llm_chainrefine_llm_chainr(   rB   r.   r'   )r   r   )r   r2   rA   r.   r(   rB   rC   r'   r   Zinitial_chainZ_refine_llmZrefine_chainr   r   r   _load_refine_chain   s    rF   z0.2.13z1.0aD  This function is deprecated. Refer to this guide on retrieval and question answering with sources: https://python.langchain.com/docs/how_to/qa_sources/
See also 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
)sinceremovalmessagestuffr
   )r   
chain_typer'   r   r   c                 K  sJ   t tttd}||vr.td| d|  || }|| fd|i|S )a  Load a question answering with sources 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", "refine" and "map_rerank".
        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 question answering with sources.
    )rJ   
map_reducerefine
map_rerankzGot unsupported chain type: z. Should be one of r'   )r0   r@   rF   r-   r=   keys)r   rK   r'   r   Zloader_mapping_funcr   r   r   load_qa_with_sources_chain   s    "rQ   )rJ   N).r    
__future__r   typingr   r   r   r   langchain_core._apir   langchain_core.language_modelsr   langchain_core.promptsr	   'langchain.chains.combine_documents.baser
   -langchain.chains.combine_documents.map_reducer   -langchain.chains.combine_documents.map_rerankr   )langchain.chains.combine_documents.reducer   )langchain.chains.combine_documents.refiner   (langchain.chains.combine_documents.stuffr   langchain.chains.llmr   Z langchain.chains.qa_with_sourcesr   r   r   Z5langchain.chains.question_answering.map_rerank_promptr   ZMAP_RERANK_PROMPTr   r-   ZEXAMPLE_PROMPTr0   ZQUESTION_PROMPTZCOMBINE_PROMPTr@   ZDEFAULT_TEXT_QA_PROMPTZDEFAULT_REFINE_PROMPTrF   rQ   r   r   r   r   <module>   sj   (:"  