
    Ng                       d Z ddlmZ ddl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mZ ddlmZ ddlmZ ddlmZ  ee          j        dz  Z ej        edz            Z  ej        edz            Z! ej        edz            Z" ej        edz            Z#	 d&d'dZ$ ed d!d"#           G d$ d%e                      Z%dS )(z/Chain for summarization with self-verification.    )annotationsN)Path)AnyDictListOptional)
deprecated)CallbackManagerForChainRun)BaseLanguageModel)PromptTemplate)
ConfigDictmodel_validator)Chain)LLMChain)SequentialChainpromptszcreate_facts.txtzcheck_facts.txtzrevise_summary.txtzare_all_true_prompt.txtFllmr   create_assertions_promptr   check_assertions_promptrevised_summary_promptare_all_true_promptverboseboolreturnr   c                    t          t          | |d|          t          | |d|          t          | |d|          t          | d||          gdgddg|          }|S )	N
assertions)r   prompt
output_keyr   checked_assertionsrevised_summaryall_true)r   r   r   r   summary)chainsinput_variablesoutput_variablesr   )r   r   )r   r   r   r   r   r   chains          k/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/chains/llm_summarization_checker/base.py_load_sequential_chainr(      s     /'	   ./	   -,	   %*	  '
4 #$&78;  E> L    z0.2.13zSee LangGraph guides for a variety of self-reflection and corrective strategies for question-answering and other tasks: https://langchain-ai.github.io/langgraph/tutorials/rag/langgraph_self_rag/z1.0)sincemessageremovalc                  h   e Zd ZU dZded<   dZded<   	 eZded<   	 eZ	ded	<   	 e
Zded
<   	 eZded<   	 dZded<   dZded<   dZded<   	  edd          Z ed          ed.d                        Zed/d            Zed/d             Z	 d0d1d&Zed2d'            Zeeee
ed(fd3d-            ZdS )4LLMSummarizationCheckerChainaV  Chain for question-answering with self-verification.

    Example:
        .. code-block:: python

            from langchain_community.llms import OpenAI
            from langchain.chains import LLMSummarizationCheckerChain
            llm = OpenAI(temperature=0.0)
            checker_chain = LLMSummarizationCheckerChain.from_llm(llm)
    r   sequential_chainNzOptional[BaseLanguageModel]r   r   r   r   r   r   querystr	input_keyresultr      int
max_checksTforbid)arbitrary_types_allowedextrabefore)modevaluesr   r   r   c                z   d|v rt          j        d           d|vr|d         t          |d         |                    dt                    |                    dt
                    |                    dt                    |                    dt                    |                    dd	          
          |d<   |S )Nr   zDirectly instantiating an LLMSummarizationCheckerChain with an llm is deprecated. Please instantiate with sequential_chain argument or using the from_llm class method.r/   r   r   r   r   r   Fr   )warningswarnr(   getCREATE_ASSERTIONS_PROMPTCHECK_ASSERTIONS_PROMPTREVISED_SUMMARY_PROMPTARE_ALL_TRUE_PROMPT)clsr<   s     r'   raise_deprecationz.LLMSummarizationCheckerChain.raise_deprecationq   s     F??MQ  
 "//F5M4M-C5MJJ9;STTJJ8:QRRJJ79OPPJJ46IJJ"JJy%88. . .)* r)   	List[str]c                    | j         gS )z?Return the singular input key.

        :meta private:
        )r2   selfs    r'   
input_keysz'LLMSummarizationCheckerChain.input_keys   s     r)   c                    | j         gS )z@Return the singular output key.

        :meta private:
        )r   rJ   s    r'   output_keysz(LLMSummarizationCheckerChain.output_keys   s       r)   inputsDict[str, Any]run_manager$Optional[CallbackManagerForChainRun]Dict[str, str]c                   |pt          j                    }d}d}d }|| j                 }|}|s|| j        k     r|                     d|i|                                          }|dz  }|d                                         dk    rn1| j        rt          |d                    |d         }|s|| j        k     |st          d	          | j
        |d                                         iS )
NFr   r"   )	callbacks   r!   Truer    zNo output from chain)r
   get_noop_managerr2   r6   r/   	get_childstripr   print
ValueErrorr   )	rK   rO   rQ   _run_managerr!   countoutputoriginal_inputchain_inputs	            r'   _callz"LLMSummarizationCheckerChain._call   s   
 #S&@&Q&S&S/$ 	4ut66**K(L4J4J4L4L +  F QJEj!''))V33| 1f./000 !23K  	4ut66  	53444(9!:!@!@!B!BCCr)   c                    dS )Nllm_summarization_checker_chain rJ   s    r'   _chain_typez(LLMSummarizationCheckerChain._chain_type   s    00r)   Fr   r   r   kwargsc                B    t          ||||||          } | d||d|S )Nr>   )r/   r   re   )r(   )	rF   r   r   r   r   r   r   rg   r&   s	            r'   from_llmz%LLMSummarizationCheckerChain.from_llm   sI     '$#"
 
 
 sEE7EEfEEEr)   )r<   r   r   r   )r   rH   )N)rO   rP   rQ   rR   r   rS   )r   r1   )r   r   r   r   r   r   r   r   r   r   r   r   rg   r   r   r.   )__name__
__module____qualname____doc____annotations__r   rB   r   rC   r   rD   r   rE   r   r2   r   r6   r   model_configr   classmethodrG   propertyrL   rN   rb   rf   ri   re   r)   r'   r.   r.   E   s        	 	 &%%%'+C++++*/GGGGG.EEEEE-CCCCC*=====IJJV: $  L
 _(###   [ $#$       X  ! ! ! X! =AD D D D D< 1 1 1 X1  4L2I1G.AF F F F [F F Fr)   r.   )F)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )&rm   
__future__r   r?   pathlibr   typingr   r   r   r   langchain_core._apir	   langchain_core.callbacksr
   langchain_core.language_modelsr   langchain_core.prompts.promptr   pydanticr   r   langchain.chains.baser   langchain.chains.llmr   langchain.chains.sequentialr   __file__parentPROMPTS_DIR	from_filerB   rC   rD   rE   r(   r.   re   r)   r'   <module>r      s    5 5 " " " " " "        , , , , , , , , , , , , * * * * * * ? ? ? ? ? ? < < < < < < 8 8 8 8 8 8 0 0 0 0 0 0 0 0 ' ' ' ' ' ' ) ) ) ) ) ) 7 7 7 7 7 7d8nn#i/3>3KBT4TUU 2.2;AR3RSS 11+@T2TUU .n.{=V/VWW  ' ' ' ' 'T 
	U   |F |F |F |F |F5 |F |F |F |F |Fr)   