o
    Jjg                  
   @  sf  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dMd$d%Z$ej!ej%d&d'fdNd+d,Z&ej'ej(ej%d&dd'd'd'd'd-f
dOd:d;Z)ej*ej+ej%d<d=d'd'fdPdBdCZ,e	dDdEdFdG	H	'dQdRdKdLZ-d'S )Sz,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	Zd
S )LoadingCallablez2Interface for loading the combine documents chain.llmr   kwargsr   returnr
   c                 K  s   dS )z-Callable to load the combine documents chain.N )selfr   r   r   r   `/var/www/html/zoom/venv/lib/python3.10/site-packages/langchain/chains/qa_with_sources/loading.py__call__   s    zLoadingCallable.__call__N)r   r   r   r   r   r
   )__name__
__module____qualname____doc__r   r   r   r   r   r      s    r   Fcontextscoreanswerr   r   promptr	   verbosebooldocument_variable_namestrrank_key
answer_keyr   r   r   r   c                 K  s&   t | ||d}td||||d|S )Nr   r$   r%   )	llm_chainr)   r*   r'   r   )r   r   )r   r$   r%   r'   r)   r*   r   r,   r   r   r   _load_map_rerank_chain%   s   	r-   	summariesNdocument_promptOptional[bool]r   c                 K  s&   t | ||d}td||||d|S )Nr+   r,   r'   r/   r%   r   )r   r   )r   r$   r/   r'   r%   r   r,   r   r   r   _load_stuff_chain8   s   r2   i  question_promptcombine_promptcombine_document_variable_name!map_reduce_document_variable_namecollapse_promptOptional[BasePromptTemplate]
reduce_llmOptional[BaseLanguageModel]collapse_llm	token_maxintr   c                 K  s   t | ||	d}|p
| }t |||	d}t||||	d}|d u r)d }|d ur(tdn|p,| }tt |||	d||d}t|||
|	d}td||||	d|S )Nr+   r1   zfcollapse_llm provided, but collapse_prompt was not: please provide one or stop providing collapse_llm.)r,   r'   r/   )combine_documents_chaincollapse_documents_chainr<   r%   )r,   reduce_documents_chainr'   r%   r   )r   r   
ValueErrorr   r   )r   r3   r4   r/   r5   r6   r7   r9   r;   r%   r<   r   	map_chain_reduce_llmreduce_chainr>   collapse_chain_collapse_llmr@   r   r   r   _load_map_reduce_chainJ   sP   	rG   context_strexisting_answerrefine_promptinitial_response_name
refine_llmr   c              	   K  s@   t | ||d}	|p
| }
t |
||d}td|	|||||d|S )Nr+   )initial_llm_chainrefine_llm_chainr'   rK   r/   r%   r   )r   r   )r   r3   rJ   r/   r'   rK   rL   r%   r   initial_chain_refine_llmrefine_chainr   r   r   _load_refine_chain   s   rR   z0.2.13z1.0a]  This function is deprecated. Refer to this guide on retrieval and question answering with sources: https://python.langchain.com/v0.2/docs/how_to/qa_sources/
See also the following migration guides for replacements based on `chain_type`:
stuff: https://python.langchain.com/v0.2/docs/versions/migrating_chains/stuff_docs_chain
map_reduce: https://python.langchain.com/v0.2/docs/versions/migrating_chains/map_reduce_chain
refine: https://python.langchain.com/v0.2/docs/versions/migrating_chains/refine_chain
map_rerank: https://python.langchain.com/v0.2/docs/versions/migrating_chains/map_rerank_docs_chain
)sinceremovalmessagestuff
chain_typer
   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.
    )rV   
map_reducerefine
map_rerankzGot unsupported chain type: z. Should be one of r%   )r2   rG   rR   r-   rA   keys)r   rW   r%   r   loader_mapping_funcr   r   r   load_qa_with_sources_chain   s   "r^   )r   r   r$   r	   r%   r&   r'   r(   r)   r(   r*   r(   r   r   r   r   )r   r   r$   r	   r/   r	   r'   r(   r%   r0   r   r   r   r   )r   r   r3   r	   r4   r	   r/   r	   r5   r(   r6   r(   r7   r8   r9   r:   r;   r:   r%   r0   r<   r=   r   r   r   r   )r   r   r3   r	   rJ   r	   r/   r	   r'   r(   rK   r(   rL   r:   r%   r0   r   r   r   r   )rV   N)
r   r   rW   r(   r%   r0   r   r   r   r
   ).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    langchain.chains.qa_with_sourcesr   r   r   5langchain.chains.question_answering.map_rerank_promptr   MAP_RERANK_PROMPTr   r-   EXAMPLE_PROMPTr2   QUESTION_PROMPTCOMBINE_PROMPTrG   DEFAULT_TEXT_QA_PROMPTDEFAULT_REFINE_PROMPTrR   r^   r   r   r   r   <module>   sl    :