a
    ag                     @  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   v/var/www/html/cobodadashboardai.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contextZscoreZ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    r.   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_chainZcollapse_documents_chainr7   r%   )r*   reduce_documents_chainr&   r%   )r   r   
ValueErrorr   r   )r   r0   r1   r,   r2   r3   r4   r5   r6   r%   r7   r   Z	map_chainZ_reduce_llmZreduce_chainr8   Zcollapse_chainZ_collapse_llmr9   r   r   r   _load_map_reduce_chainJ   sN    	r;   Zcontext_strZexisting_answerr   )
r   r0   refine_promptr,   r&   initial_response_name
refine_llmr%   r   r   c              	   K  s@   t | ||d}	|p| }
t |
||d}tf |	|||||d|S )Nr)   )Zinitial_llm_chainZrefine_llm_chainr&   r=   r,   r%   )r   r   )r   r0   r<   r,   r&   r=   r>   r%   r   Zinitial_chainZ_refine_llmZrefine_chainr   r   r   _load_refine_chain   s    r?   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
)ZsinceZ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.
    )rA   Z
map_reduceZrefineZ
map_rerankzGot unsupported chain type: z. Should be one of r%   )r.   r;   r?   r+   r:   keys)r   rB   r%   r   Zloader_mappingZ_funcr   r   r   load_qa_with_sources_chain   s    "rD   )rA   N).r    
__future__r   typingr   r   r   r   Zlangchain_core._apir   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.map_rerankr   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.qa_with_sourcesr   r   r   Z5langchain.chains.question_answering.map_rerank_promptr   ZMAP_RERANK_PROMPTr   r+   ZEXAMPLE_PROMPTr.   ZQUESTION_PROMPTZCOMBINE_PROMPTr;   ZDEFAULT_TEXT_QA_PROMPTZDEFAULT_REFINE_PROMPTr?   rD   r   r   r   r   <module>   sj   (:"  