
    Ah	                     v    S 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
\5      rg).Question-answering with sources over an index.    )Any)AsyncCallbackManagerForChainRunCallbackManagerForChainRun)Document)BaseRetriever)Field)StuffDocumentsChain)BaseQAWithSourcesChainc                       \ rS rSr% Sr\" SS9r\\S'    Sr	\
\S'    Sr\\S	'    S
\\   S\\   4S jrS\\\4   S\S\\   4S jrS\\\4   S\S\\   4S jr\S\4S j5       rSrg)RetrievalQAWithSourcesChain   r   T)exclude	retrieverFreduce_k_below_max_tokensi/  max_tokens_limitdocsreturnc                 |   [        U5      nU R                  (       a  [        U R                  [        5      (       ax  U Vs/ sH2  nU R                  R
                  R                  UR                  5      PM4     nn[        US U 5      nXPR                  :  a  US-  nXTU   -  nXPR                  :  a  M  US U $ s  snf )N   )
lenr   
isinstancecombine_documents_chainr
   	llm_chain_get_num_tokenspage_contentsumr   )selfr   num_docsdoctokenstoken_counts         b/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/chains/qa_with_sources/retrieval.py_reduce_tokens_below_limit6RetrievalQAWithSourcesChain._reduce_tokens_below_limit   s    t9))j((/
 /
  C ,,66FFsGWGWX   fYh/0K 5 55Ah//  5 55 IXs    8B9inputsrun_managerc                    XR                      nU R                  R                  USUR                  5       0S9nU R	                  U5      $ N	callbacks)config)question_keyr   invoke	get_childr$   r   r&   r'   questionr   s        r#   	_get_docs%RetrievalQAWithSourcesChain._get_docs.   sR     ++,~~$$!6!6!89 % 
 ..t44    c                   #    XR                      nU R                  R                  USUR                  5       0S9I S h  vN nU R	                  U5      $  N7fr)   )r,   r   ainvoker.   r$   r/   s        r#   
_aget_docs&RetrievalQAWithSourcesChain._aget_docs;   s_      ++,^^++!6!6!89 , 
 
 ..t44	
s   <AAAc                     g)zReturn the chain type.retrieval_qa_with_sources_chain )r   s    r#   _chain_type'RetrievalQAWithSourcesChain._chain_typeH   s     1r3   r:   N)__name__
__module____qualname____firstlineno____doc__r	   r   r   __annotations__r   boolr   intlistr   r$   dictstrr   r   r1   r   r6   propertyr;   __static_attributes__r:   r3   r#   r   r      s    8$T2I}2&+t+Q c XtH~ $x. $5S#X5 0	5
 
h55S#X5 5	5
 
h5 1S 1 1r3   r   N)rA   typingr   langchain_core.callbacksr   r   langchain_core.documentsr   langchain_core.retrieversr   pydanticr	   (langchain.chains.combine_documents.stuffr
   %langchain.chains.qa_with_sources.baser   r   r:   r3   r#   <module>rQ      s.    4  . 3  H H:1"8 :1r3   