
    }hI!                    n   d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	m
Z
mZmZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddl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+m,Z,m-Z-  eddd       G d dee             Z. eddd       G d de.             Z/y)/Question answering with sources over documents.    )annotationsN)ABCabstractmethod)AnyDictListOptionalTuple)
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                     e Zd ZU dZded<   	 dZded<   dZded<   d	Zded
<   dZded<   dZ	ded<   	 e
eeef	 	 	 	 	 	 	 	 	 	 	 d d       Ze
	 	 d!	 	 	 	 	 	 	 	 	 d"d       Z edd      Zed#d       Zed#d       Z ed      e
d$d              Zd%dZe	 	 	 	 	 	 d&d       Z	 d'	 	 	 	 	 d(dZe	 	 	 	 	 	 d)d       Z	 d'	 	 	 	 	 d*dZy)+BaseQAWithSourcesChainz5Question 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                    t        ||      }t        ||      }t        ||d      }t        |      }	t        ||	d      }
 | dd|
i|S )	z Construct the chain from an LLM.)llmprompt	summaries)	llm_chaindocument_promptdocument_variable_name)r$   context)r4   reduce_documents_chainr6   r$    )r   r   r   r   )clsr1   r5   question_promptcombine_promptkwargsllm_question_chainllm_combine_chaincombine_results_chainr8   r$   s              _/var/www/html/engine/venv/lib/python3.12/site-packages/langchain/chains/qa_with_sources/base.pyfrom_llmzBaseQAWithSourcesChain.from_llm7   sw     &#oF$^D 3'+#.!

 "6$9"
 #:(#9#,#

  
$;

 	
    Nc                >    |xs i }t        |fd|i|} | dd|i|S )zLoad chain from chain type.
chain_typer$   r9   r   )r:   r1   rE   chain_type_kwargsr=   _chain_kwargsr$   s          rA   from_chain_typez&BaseQAWithSourcesChain.from_chain_typeU   sB     */R"<#
&#
*7#
 M+BMfMMrC   Tforbid)arbitrary_types_allowedextrac                    | j                   gS z2Expect input key.

        :meta private:
        )r'   selfs    rA   
input_keysz!BaseQAWithSourcesChain.input_keysi   s     !!""rC   c                Z    | j                   | j                  g}| j                  r|dgz   }|S )z3Return output key.

        :meta private:
        source_documents)r+   r-   r/   )rO   _output_keyss     rA   output_keysz"BaseQAWithSourcesChain.output_keysq   s5     )@)@A'''+=*>>LrC   before)modec                6    d|v r|j                  d      |d<   |S )z&Fix backwards compatibility in naming.combine_document_chainr$   )pop)r:   valuess     rA   validate_namingz&BaseQAWithSourcesChain.validate_naming|   s&     $v-06

;S0TF,-rC   c                   t        j                  d|t         j                        rWt        j                  d|t         j                        dd \  }}t        j                  d|      d   j	                         }||fS d}||fS )	zSplit sources from answer.z	SOURCES?:zSOURCES?:|QUESTION:\s)flagsN   z\nr    )research
IGNORECASEsplitstrip)rO   r*   r,   s      rA   _split_sourcesz%BaseQAWithSourcesChain._split_sources   sz    99\62==9 hh(&qOFG hhug.q1779G w GwrC   c                    y!Get docs to run questioning over.Nr9   rO   inputsrun_managers      rA   	_get_docsz BaseQAWithSourcesChain._get_docs   s    rC   c                   |xs t        j                         }dt        j                  | j                        j
                  v }|r| j	                  ||      }n| j	                  |      } | j                  j                  d||j                         d|}| j                  |      \  }}| j                  || j                  |i}| j                  r||d<   |S Nrk   )rk   )input_documents	callbacksrR   r9   )r   get_noop_managerinspect	signaturerl   
parametersr$   run	get_childre   r+   r-   r/   	rO   rj   rk   _run_manageraccepts_run_managerr(   r*   r,   results	            rA   _callzBaseQAWithSourcesChain._call   s    
 #S&@&Q&Q&SW..t~~>III 	 >>&l>CD>>&)D1--11 
 L,B,B,D
HN
 --f5OOV##W"
 '')-F%&rC   c                  K   ywrg   r9   ri   s      rA   
_aget_docsz!BaseQAWithSourcesChain._aget_docs   s     s   c                  K   |xs t        j                         }dt        j                  | j                        j
                  v }|r| j	                  ||       d {   }n| j	                  |       d {   } | j                  j                  d||j                         d| d {   }| j                  |      \  }}| j                  || j                  |i}| j                  r||d<   |S 7 7 |7 Iwrn   )r   rq   rr   rs   r}   rt   r$   arunrv   re   r+   r-   r/   rw   s	            rA   _acallzBaseQAWithSourcesChain._acall   s     
 #X&E&V&V&XW..t?JJJ 	 \JJD00D8t3388 
 L,B,B,D
HN
 
 --f5OOV##W"
 '')-F%& K0
s7   AC9C3C98C594C9-C7.AC95C97C9)r1   r   r5   r   r;   r   r<   r   r=   r   returnr#   )stuffN)
r1   r   rE   r&   rF   zOptional[dict]r=   r   r   r#   r   z	List[str])rZ   r   r   r   )r*   r&   r   zTuple[str, str]rj   Dict[str, Any]rk   r   r   List[Document])N)rj   r   rk   z$Optional[CallbackManagerForChainRun]r   zDict[str, str]rj   r   rk   r   r   r   )rj   r   rk   z)Optional[AsyncCallbackManagerForChainRun]r   r   )__name__
__module____qualname____doc____annotations__r'   r)   r+   r-   r/   classmethodr   r   r   rB   rH   r   model_configpropertyrP   rT   r   r[   re   r   rl   r{   r}   r   r9   rC   rA   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 : 
	4 00 5	0
 
0 0 BF ? 
	rC   r#   c                  l    e Zd ZU dZdZded<   ed
d       Z	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	edd       Z
y	)QAWithSourcesChainr   r(   r&   r)   c                2    | j                   | j                  gS rM   )r)   r'   rN   s    rA   rP   zQAWithSourcesChain.input_keys   s     ##T%6%677rC   c               8    |j                  | j                        S rh   rY   r)   ri   s      rA   rl   zQAWithSourcesChain._get_docs   s     zz$--..rC   c               @   K   |j                  | j                        S wr   r   ri   s      rA   r}   zQAWithSourcesChain._aget_docs   s      zz$--..s   c                     y)Nqa_with_sources_chainr9   rN   s    rA   _chain_typezQAWithSourcesChain._chain_type   s    &rC   Nr   r   r   )r   r&   )r   r   r   r   r)   r   r   rP   rl   r}   r   r9   rC   rA   r   r      sy     : NC 8 8// 0	/
 
/// 5	/
 
/ ' 'rC   r   )0r   
__future__r   rr   r`   abcr   r   typingr   r   r	   r
   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   r9   rC   rA   <module>r      s    5 "  	 # 3 3 * . < 5 0 1 ' M Q H ) O  
	?	gUC ggT 
	?	!'/ !'!'rC   