
    Ng              
         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e          Z#e"ddddfdHd$Z$ej!        ej%        d%d&fdId*Z&ej'        ej(        ej%        d%dd&d&d&d&d+f
dJd8Z)ej*        ej+        ej%        d9d:d&d&fdKd?Z, e	d@dAdBC          	 	 dLdMdG            Z-d&S )Nz,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                      e Zd ZdZd
dZd	S )LoadingCallablez2Interface for loading the combine documents chain.llmr	   kwargsr   returnr   c                    dS )z-Callable to load the combine documents chain.N )selfr   r   s      d/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/chains/qa_with_sources/loading.py__call__zLoadingCallable.__call__   s          N)r   r	   r   r   r   r   )__name__
__module____qualname____doc__r   r   r    r   r   r      s.        <<< < < < < <r    r   Fcontextscoreanswerr   r	   promptr
   verbosebooldocument_variable_namestrrank_key
answer_keyr   r   r   r   c                H    t          | ||          }t          d||||d|S )Nr   r(   r)   )	llm_chainr-   r.   r+   r   )r   r   )r   r(   r)   r+   r-   r.   r   r1   s           r   _load_map_rerank_chainr2   %   sJ     SAAAI" 5	 
   r    	summariesNdocument_promptOptional[bool]r   c                H    t          | ||          }t          d||||d|S )Nr0   r1   r+   r4   r)   r   )r   r   )r   r(   r4   r+   r)   r   r1   s          r   _load_stuff_chainr8   8   sJ     SAAAI 5'	 
   r    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                8   t          | ||	          }|p| }t          |||	          }t          ||||	          }|d }|t          d          n&|p| }t          t          |||	          ||          }t          |||
|	          }t	          d||||	d|S )Nr0   r7   zfcollapse_llm provided, but collapse_prompt was not: please provide one or stop providing collapse_llm.)r1   r+   r4   )combine_documents_chaincollapse_documents_chainrB   r)   )r1   reduce_documents_chainr+   r)   r   )r   r   
ValueErrorr   r   )r   r9   r:   r4   r;   r<   r=   r?   rA   r)   rB   r   	map_chain_reduce_llmreduce_chainrE   collapse_chain_collapse_llmrG   s                      r   _load_map_reduce_chainrN   J   s!    S'JJJI#KNGTTTL1='	   #>   $ %+,!&  
 $B+
 
 
 2 7!/	   # 5@	 
   r    context_strexisting_answerrefine_promptinitial_response_name
refine_llmr   c           
     x    t          | ||          }	|p| }
t          |
||          }t          d|	|||||d|S )Nr0   )initial_llm_chainrefine_llm_chainr+   rR   r4   r)   r   )r   r   )r   r9   rQ   r4   r+   rR   rS   r)   r   initial_chain_refine_llmrefine_chains               r   _load_refine_chainrZ      sn     _gNNNM#KM7SSSL '%53'    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
)sinceremovalmessagestuff
chain_typer   c                    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.
    )r^   
map_reducerefine
map_rerankzGot unsupported chain type: z. Should be one of r)   )r8   rN   rZ   r2   rH   keys)r   r_   r)   r   loader_mapping_funcs         r   load_qa_with_sources_chainrg      s    D #,$,	5 5N ''8: 8 8 . 3 3 5 58 8
 
 	
 ,J7E500g0000r    )r   r	   r(   r
   r)   r*   r+   r,   r-   r,   r.   r,   r   r   r   r   )r   r	   r(   r
   r4   r
   r+   r,   r)   r5   r   r   r   r   )r   r	   r9   r
   r:   r
   r4   r
   r;   r,   r<   r,   r=   r>   r?   r@   rA   r@   r)   r5   rB   rC   r   r   r   r   )r   r	   r9   r
   rQ   r
   r4   r
   r+   r,   rR   r,   rS   r@   r)   r5   r   r   r   r   )r^   N)
r   r	   r_   r,   r)   r5   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   r2   EXAMPLE_PROMPTr8   QUESTION_PROMPTCOMBINE_PROMPTrN   DEFAULT_TEXT_QA_PROMPTDEFAULT_REFINE_PROMPTrZ   rg   r   r    r   <module>r|      s   2 2 " " " " " " 3 3 3 3 3 3 3 3 3 3 3 3 * * * * * * < < < < < < 5 5 5 5 5 5 M M M M M M Q Q Q Q Q Q Q Q Q Q Q Q J J J J J J J J J J J J H H H H H H ) ) ) ) ) )         
     
< < < < <h < < < "3"+    * ".!4*6*E"-"    ( +<*K):)I*;*J*5-648.204"5 5 5 5 5t +9*O(6(L*8*G"/!2.2"    2 
	j	  " "1 1 1 1 1 1 1r    