
    h5                       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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.txtFverbosec                   t        t        | |d|      t        | |d|      t        | |d|      t        | d||      gdgddg|      S )	N
assertions)llmprompt
output_keyr   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   s         m/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain/chains/llm_summarization_checker/base.py_load_sequential_chainr$      s     /'	 ./	 -,	 %*	'
4 #$&78;     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                <   d|v rt        j                  d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.   )
stacklevelr+   r   r    r!   r"   r   Fr   )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   rF   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d	}	t        |	      | 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   )
rG   inputsrun_manager_run_managerr   countoutputoriginal_inputchain_inputmsgs
             r#   _callz"LLMSummarizationCheckerChain._call   s    
 #S&@&Q&Q&S/$ut6**K(&002 + F QJEj!'')V3||f./0 !23K ut6 (CS/!(9!:!@!@!BCCr%   c                     y)Nllm_summarization_checker_chain rF   s    r#   _chain_typez(LLMSummarizationCheckerChain._chain_type   s    0r%   Fc                :    t        ||||||      } | d||d|S )Nr   )r+   r   r_   )r$   )	rB   r   r   r    r!   r"   r   kwargschains	            r#   from_llmz%LLMSummarizationCheckerChain.from_llm   s7     '$#"
 EE7EfEEr%   )rC   dictreturnr   )rf   z	list[str])N)rT   zdict[str, Any]rU   z$Optional[CallbackManagerForChainRun]rf   zdict[str, str])rf   r-   )r   r	   r   r
   r    r
   r!   r
   r"   r
   r   boolrb   r   rf   r*   )__name__
__module____qualname____doc____annotations__r   r>   r   r?   r    r@   r!   rA   r"   r.   r   r2   r   model_configr   classmethodrD   propertyrH   rJ   r\   r`   rd   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*   )r   r	   r   r
   r    r
   r!   r
   r"   r
   r   rg   rf   r   )$rk   
__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@   rA   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%   