
    @'h              
         d 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
 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	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d%dZ%e jD                  e jL                  ddf	 	 	 	 	 	 	 	 	 	 	 	 	 d&dZ'ejP                  ejR                  ejL                  dddddddf
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d'dZ*ejV                  ejX                  ejL                  ddddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d(dZ- e
d d!d"#      	 	 d)	 	 	 	 	 	 	 	 	 d*d$       Z.y)+z,Load question answering with sources chains.    )annotations)Mapping)Any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y)LoadingCallablez2Interface for loading the combine documents chain.c                     y)z-Callable to load the combine documents chain.N )selfllmkwargss      o/home/kushmeetdev/Regenta/Chatbot/venv/lib/python3.12/site-packages/langchain/chains/qa_with_sources/loading.py__call__zLoadingCallable.__call__    s        N)r   r	   r   r   returnr   )__name__
__module____qualname____doc__r   r   r   r   r   r      s"    <<$<03<	"<r   r   Fcontextscoreanswerc                >    t        | ||      }t        d||||d|S )Nr   promptverbose)	llm_chainrank_key
answer_keydocument_variable_namer   )r   r   )r   r*   r+   r/   r-   r.   r   r,   s           r   _load_map_rerank_chainr0   &   s:     SAI" 5	
  r   	summariesNc                >    t        | ||      }t        d||||d|S )Nr)   r,   r/   document_promptr+   r   )r   r   )r   r*   r4   r/   r+   r   r,   s          r   _load_stuff_chainr5   9   s:     SAI 5'	
  r   i  c                   t        | ||	      }|xs | }t        |||	      }t        ||||	      }|d }|+t        d      |xs | }t        t        |||	      ||      }t        |||
|	      }t	        d||||	d|S )Nr)   r3   zfcollapse_llm provided, but collapse_prompt was not: please provide one or stop providing collapse_llm.)r,   r/   r4   )combine_documents_chaincollapse_documents_chain	token_maxr+   )r,   reduce_documents_chainr/   r+   r   )r   r   
ValueErrorr   r   )r   question_promptcombine_promptr4   combine_document_variable_name!map_reduce_document_variable_namecollapse_prompt
reduce_llmcollapse_llmr+   r9   r   	map_chain_reduce_llmreduce_chainr7   collapse_chain_collapse_llmr:   s                      r   _load_map_reduce_chainrH   K   s     S'JI#KNGTL1='	 #> 
 %+,!&
 $B+
 2 7!/	 # 5@	
  r   context_strexisting_answerc           
     j    t        | ||      }	|xs | }
t        |
||      }t        d|	|||||d|S )Nr)   )initial_llm_chainrefine_llm_chainr/   initial_response_namer4   r+   r   )r   r   )r   r<   refine_promptr4   r/   rN   
refine_llmr+   r   initial_chain_refine_llmrefine_chains               r   _load_refine_chainrT      sX     _gNM#KM7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messagec                    t         t        t        t        d}||vrt	        d| d|j                                ||   } || 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.
    )stuff
map_reducerefine
map_rerankzGot unsupported chain type: z. Should be one of r+   )r5   rH   rT   r0   r;   keys)r   
chain_typer+   r   loader_mapping_funcs         r   load_qa_with_sources_chainra      sp    D #,$,	5N '*:, 7  . 3 3 568
 	
 ,J7E0g000r   )r   r	   r*   r
   r+   boolr/   strr-   rc   r.   rc   r   r   r    r   )r   r	   r*   r
   r4   r
   r/   rc   r+   Optional[bool]r   r   r    r   )r   r	   r<   r
   r=   r
   r4   r
   r>   rc   r?   rc   r@   zOptional[BasePromptTemplate]rA   Optional[BaseLanguageModel]rB   re   r+   rd   r9   intr   r   r    r   )r   r	   r<   r
   rO   r
   r4   r
   r/   rc   rN   rc   rP   re   r+   rd   r   r   r    r   )rY   N)
r   r	   r^   rc   r+   rd   r   r   r    r   )/r$   
__future__r   collections.abcr   typingr   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   r0   EXAMPLE_PROMPTr5   QUESTION_PROMPTCOMBINE_PROMPTrH   DEFAULT_TEXT_QA_PROMPTDEFAULT_REFINE_PROMPTrT   ra   r   r   r   <module>r|      s   2 " # * * * < 5 M Q Q J J H ) 

<h < "3"+	   	
    * ".!4!4*6*E*E"-"	 (  	
   ( +<*K*K):)I)I*;*J*J*5-648.204"5	5'5 '5 (	5
 %(5 (+5 25 ,5 .5 5 5 5 5t +9*O*O(6(L(L*8*G*G"/!2.2"	' & (	
    ,   2 
	j	" "1	11 1 	1
 11r   