
    @'h                       d Z ddlmZ ddl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mZ ddlmZ ddlmZ ddlmZ  ee      j6                  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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          v/home/kushmeetdev/Regenta/Chatbot/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:
        )r.   selfs    r#   
input_keysz'LLMSummarizationCheckerChain.input_keys   s     r%   c                    | j                   gS )z@Return the singular output key.

        :meta private:
        )r   rE   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_managerr.   r2   r+   	get_childstripr   print
ValueErrorr   )	rF   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 rE   s    r#   _chain_typez(LLMSummarizationCheckerChain._chain_type   s    0r%   Fc                :    t        ||||||      } | d||d|S )Nr9   )r+   r   r]   )r$   )	rA   r   r   r   r    r!   r   kwargsr"   s	            r#   from_llmz%LLMSummarizationCheckerChain.from_llm   s7     '$#"
 EE7EfEEr%   )rB   dictreturnr   )rc   z	list[str])N)rS   zdict[str, Any]rT   z$Optional[CallbackManagerForChainRun]rc   zdict[str, str])rc   r-   )r   r	   r   r
   r   r
   r    r
   r!   r
   r   boolr`   r   rc   r*   )__name__
__module____qualname____doc____annotations__r   r=   r   r>   r   r?   r    r@   r!   r.   r   r2   r   model_configr   classmethodrC   propertyrG   rI   rZ   r^   ra   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   rd   rc   r   )$rh   
__future__r   r:   pathlibr   typingr   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>   r?   r@   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%   