
    Ah!                    V   S r SSKJr  SSKrSSKrSSKJrJr  SSKJ	r	J
r
  SSKJr  SSKJrJr  SSKJr  SS	KJr  SS
KJr  SSKJrJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&  SSK'J(r(J)r)J*r*  \" SSSS9 " S S\\5      5       r+\" SSSS9 " S S\+5      5       r,g)/Question answering with sources over documents.    )annotationsN)ABCabstractmethod)AnyOptional)
deprecated)AsyncCallbackManagerForChainRunCallbackManagerForChainRun)Document)BaseLanguageModel)BasePromptTemplate)
ConfigDictmodel_validator)ReduceDocumentsChain)Chain)BaseCombineDocumentsChain)MapReduceDocumentsChain)StuffDocumentsChain)LLMChainload_qa_with_sources_chain)COMBINE_PROMPTEXAMPLE_PROMPTQUESTION_PROMPTz0.2.13z1.0zThis class is deprecated. Refer to this guide on retrieval and question answering with sources: https://python.langchain.com/docs/how_to/qa_sources/)sinceremovalmessagec                     \ rS rSr% SrS\S'    SrS\S'   SrS\S	'   S
rS\S'   Sr	S\S'   Sr
S\S'    \\\\4           S"S jj5       r\  S#         S$S jj5       r\" SSS9r\S%S j5       r\S%S j5       r\" SS9\S&S j5       5       rS'S jr\      S(S j5       r S)     S*S jjr\      S+S j5       r S)     S,S  jjrS!rg)-BaseQAWithSourcesChain"   z5Question answering chain with sources over documents.r   combine_documents_chainquestionstrquestion_keydocsinput_docs_keyanswer
answer_keysourcessources_answer_keyFboolreturn_source_documentsc                x    [        XS9n[        XS9n[        UUSS9n[        US9n	[        UU	SS9n
U " SSU
0UD6$ )	z Construct the chain from an LLM.)llmprompt	summaries)	llm_chaindocument_promptdocument_variable_name)r"   context)r2   reduce_documents_chainr4   r"    )r   r   r   r   )clsr/   r3   question_promptcombine_promptkwargsllm_question_chainllm_combine_chaincombine_results_chainr6   r"   s              ]/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/chains/qa_with_sources/base.pyfrom_llmBaseQAWithSourcesChain.from_llm7   ss     &#F$D 3'+#.!

 "6$9"
 #:(#9#,#

  
$;

 	
    Nc                H    U=(       d    0 n[        U4SU0UD6nU " SSU0UD6$ )zLoad chain from chain type.
chain_typer"   r7   r   )r8   r/   rD   chain_type_kwargsr;   _chain_kwargsr"   s          r?   from_chain_type&BaseQAWithSourcesChain.from_chain_typeU   sD     */R"<#
!#
 #

 M+BMfMMrB   Tforbid)arbitrary_types_allowedextrac                    U R                   /$ z"Expect input key.

:meta private:
)r%   selfs    r?   
input_keys!BaseQAWithSourcesChain.input_keysk   s     !!""rB   c                d    U R                   U R                  /nU R                  (       a  / UQSPnU$ )z#Return output key.

:meta private:
source_documents)r)   r+   r-   )rO   _output_keyss     r?   output_keys"BaseQAWithSourcesChain.output_keyss   s7     )@)@A''>\>+=>LrB   before)modec                :    SU;   a  UR                  S5      US'   U$ )z&Fix backwards compatibility in naming.combine_document_chainr"   )pop)r8   valuess     r?   validate_naming&BaseQAWithSourcesChain.validate_naming~   s&     $v-06

;S0TF,-rB   c                
   [         R                  " SU[         R                  5      (       aT  [         R                  " SU[         R                  S9SS u  p[         R                  " SU5      S   R	                  5       nX4$ SnX4$ )	zSplit sources from answer.z	SOURCES?:zSOURCES?:|QUESTION:\s)flagsN   z\nr    )research
IGNORECASEsplitstrip)rO   r(   r*   s      r?   _split_sources%BaseQAWithSourcesChain._split_sources   s{    99\62==99 hh(mm q	OF
 hhug.q1779G  GrB   c                   g!Get docs to run questioning over.Nr7   rO   inputsrun_managers      r?   	_get_docs BaseQAWithSourcesChain._get_docs   s    rB   c                   U=(       d    [         R                  " 5       nS[        R                  " U R                  5      R
                  ;   nU(       a  U R	                  XS9nOU R	                  U5      nU R                  R                  " SUUR                  5       S.UD6nU R                  U5      u  pgU R                  UU R                  U0nU R                  (       a  XXS'   U$ Nro   )ro   )input_documents	callbacksrS   r7   )r   get_noop_managerinspect	signaturerp   
parametersr"   run	get_childrh   r)   r+   r-   	rO   rn   ro   _run_manageraccepts_run_managerr&   r(   r*   results	            r?   _callBaseQAWithSourcesChain._call   s    
 #S&@&Q&Q&SW..t~~>III 	 >>&>CD>>&)D--11 
 ",,.
 

 --f5OOV##W"
 '')-%&rB   c                  #    g7frk   r7   rm   s      r?   
_aget_docs!BaseQAWithSourcesChain._aget_docs   s     s   c                  #    U=(       d    [         R                  " 5       nS[        R                  " U R                  5      R
                  ;   nU(       a  U R	                  XS9I S h  vN nOU R	                  U5      I S h  vN nU R                  R                  " SUUR                  5       S.UD6I S h  vN nU R                  U5      u  pgU R                  UU R                  U0nU R                  (       a  XXS'   U$  N N NL7frs   )r
   rv   rw   rx   r   ry   r"   arunr{   rh   r)   r+   r-   r|   s	            r?   _acallBaseQAWithSourcesChain._acall   s     
 #X&E&V&V&XW..t?JJJ 	 JJD00D3388 
 ",,.
 
 

 --f5OOV##W"
 '')-%& K0
s7   A%D'C?(DD4D6D7A	DDDr7   )r/   r   r3   r   r9   r   r:   r   r;   r   returnr    )stuffN)
r/   r   rD   r$   rE   zOptional[dict]r;   r   r   r    r   z	list[str])r\   dictr   r   )r(   r$   r   ztuple[str, str]rn   dict[str, Any]ro   r   r   list[Document])N)rn   r   ro   z$Optional[CallbackManagerForChainRun]r   zdict[str, str]rn   r   ro   r
   r   r   )rn   r   ro   z)Optional[AsyncCallbackManagerForChainRun]r   r   )__name__
__module____qualname____firstlineno____doc____annotations__r%   r'   r)   r+   r-   classmethodr   r   r   r@   rG   r   model_configpropertyrP   rU   r   r]   rh   r   rp   r   r   r   __static_attributes__r7   rB   r?   r    r    "   s    @66,"L#" NC J''$)T)& /=.=-;

 ,
 ,	

 +
 
 
 
 
:  ",0	NN N *	N
 N 
 N N   $L
 # #   (#  $ 00 0	0
 
0 0 =A : 
	8 00 5	0
 
0 0 BF ? 
	 rB   r    c                  |    \ rS rSr% SrSrS\S'   \SS j5       r      SS jr	      SS jr
\SS	 j5       rS
rg)QAWithSourcesChain   r   r&   r$   r'   c                2    U R                   U R                  /$ rM   )r'   r%   rN   s    r?   rP   QAWithSourcesChain.input_keys   s     ##T%6%677rB   c               8    UR                  U R                  5      $ rl   r[   r'   rm   s      r?   rp   QAWithSourcesChain._get_docs   s     zz$--..rB   c               @   #    UR                  U R                  5      $ 7fr   r   rm   s      r?   r   QAWithSourcesChain._aget_docs   s      zz$--..s   c                    g)Nqa_with_sources_chainr7   rN   s    r?   _chain_typeQAWithSourcesChain._chain_type  s    &rB   r7   Nr   r   r   )r   r$   )r   r   r   r   r   r'   r   r   rP   rp   r   r   r   r7   rB   r?   r   r      sy     : NC 8 8// 0	/
 
/// 5	/
 
/ ' 'rB   r   )-r   
__future__r   rw   rc   abcr   r   typingr   r   langchain_core._apir	   langchain_core.callbacksr
   r   langchain_core.documentsr   langchain_core.language_modelsr   langchain_core.promptsr   pydanticr   r   langchain.chainsr   langchain.chains.baser   'langchain.chains.combine_documents.baser   -langchain.chains.combine_documents.map_reducer   (langchain.chains.combine_documents.stuffr   langchain.chains.llmr   (langchain.chains.qa_with_sources.loadingr   2langchain.chains.qa_with_sources.map_reduce_promptr   r   r   r    r   r7   rB   r?   <module>r      s    5 "  	 #   * . < 5 0 1 ' M Q H ) O  
	?	oUC ood 
	?	!'/ !'!'rB   