
    }h                       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%y)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.txtc                    t        t        | |d|      t        | |d|      t        | |d|      t        | d||      gdgddg|      }|S )	N
assertions)llmprompt
output_keyverbosechecked_assertionsrevised_summaryall_true)r   r   r   r   summary)chainsinput_variablesoutput_variablesr   )r   r   )r   create_assertions_promptcheck_assertions_promptrevised_summary_promptare_all_true_promptr   chains          i/var/www/html/engine/venv/lib/python3.12/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                  ^   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	 d"	 	 	 	 	 d#dZed$d       Zeeee
edf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d%d       Zy)&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)modec                8   d|v rt        j                  d       d|vr||d   wt        |d   |j                  dt              |j                  dt
              |j                  dt              |j                  dt              |j                  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)clsvaluess     r%   raise_deprecationz.LLMSummarizationCheckerChain.raise_deprecationq   s     F?MMQ
 "/F5M4M-C5MJJ9;STJJ8:QRJJ79OPJJ46IJ"JJy%8.)* r'   c                    | j                   gS )z?Return the singular input key.

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

        :meta private:
        )r   rG   s    r%   output_keysz(LLMSummarizationCheckerChain.output_keys   s       r'   c                   |xs t        j                         }d}d}d }|| j                     }|}|s|| j                  k  rp| j	                  d|i|j                               }|dz  }|d   j                         dk(  rn1| j                  rt        |d          |d   }|s|| j                  k  rp|st        d	      | j                  |d   j                         iS )
NFr   r   )	callbacks   r   Truer   zNo output from chain)r
   get_noop_managerr0   r4   r-   	get_childstripr   print
ValueErrorr   )	rH   inputsrun_manager_run_managerr   countoutputoriginal_inputchain_inputs	            r%   _callz"LLMSummarizationCheckerChain._call   s    
 #S&@&Q&Q&S/$ut6**K(L4J4J4L + F QJEj!'')V3||f./0 !23K ut6 344(9!:!@!@!BCCr'   c                     y)Nllm_summarization_checker_chain rG   s    r%   _chain_typez(LLMSummarizationCheckerChain._chain_type   s    0r'   Fc                :    t        ||||||      } | d||d|S )Nr;   )r-   r   r_   )r&   )	rC   r   r    r!   r"   r#   r   kwargsr$   s	            r%   from_llmz%LLMSummarizationCheckerChain.from_llm   s7     '$#"
 EE7EfEEr'   )rD   r   returnr   )rd   z	List[str])N)rU   zDict[str, Any]rV   z$Optional[CallbackManagerForChainRun]rd   zDict[str, str])rd   r/   )r   r   r    r   r!   r   r"   r   r#   r   r   boolrb   r   rd   r,   )__name__
__module____qualname____doc____annotations__r   r?   r    r@   r!   rA   r"   rB   r#   r0   r   r4   r   model_configr   classmethodrE   propertyrI   rK   r\   r`   rc   r_   r'   r%   r,   r,   E   s   	 &%'+C	$+*/GnG.E^E-CNC*==IsJJV $L
 (#  $$     ! ! =ADD :D 
	D< 1 1  4L2I1G.AFF #1F "0	F
 !/F ,F F F 
&F Fr'   r,   )F)r   r   r    r   r!   r   r"   r   r#   r   r   re   rd   r   )&ri   
__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_filer?   r@   rA   rB   r&   r,   r_   r'   r%   <module>r}      s(   5 "   , , * ? < 8 0 ' ) 78n##i/3>33KBT4TU 2.22;AR3RS 111+@T2TU .n..{=V/VW  '	',' ,' +	'
 (' ' 'T 
	U |F5 |F|Fr'   