
    3fi                       d Z ddlmZ ddl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 ddlmZ ddlmZ ddlmZ  ee      j4                  dz  Z ej8                  edz        Z ej8                  edz        Z ej8                  edz        Z ej8                  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)
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         u/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_classic/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)&LLMSummarizationCheckerChainaI  Chain for question-answering with self-verification.

    Example:
        ```python
        from langchain_openai import OpenAI
        from langchain_classic.chains import LLMSummarizationCheckerChain

        model = OpenAI(temperature=0.0)
        checker_chain = LLMSummarizationCheckerChain.from_llm(model)
        ```
    r   sequential_chainNzBaseLanguageModel | Noner   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_deprecationr   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.)r-   selfs    r"   
input_keysz'LLMSummarizationCheckerChain.input_keys   s     r$   c                    | j                   gS )zReturn the singular output key.)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d	}	t        |	      | j                  |d   j                         iS )
NFr   r   )	callbacks   r   Truer   zNo output from chain)r   get_noop_managerr-   r1   r*   	get_childstripr   print
ValueErrorr   )
rF   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 rE   s    r"   _chain_typez(LLMSummarizationCheckerChain._chain_type   s    0r$   Fc                :    t        ||||||      } | d||d|S )a  Create a LLMSummarizationCheckerChain from a language model.

        Args:
            llm: a language model
            create_assertions_prompt: prompt to create assertions
            check_assertions_prompt: prompt to check assertions
            revised_summary_prompt: prompt to revise summary
            are_all_true_prompt: prompt to check if all assertions are true
            verbose: whether to print verbose output
            **kwargs: additional arguments
        r   )r*   r   r^   )r#   )	rA   r   r   r   r    r!   r   kwargschains	            r"   from_llmz%LLMSummarizationCheckerChain.from_llm   s7    , '$#"
 EE7EfEEr$   )rB   dictreturnr   )re   z	list[str])N)rS   zdict[str, Any]rT   z!CallbackManagerForChainRun | Nonere   zdict[str, str])re   r,   )r   r   r   r	   r   r	   r    r	   r!   r	   r   boolra   r   re   r)   )__name__
__module____qualname____doc____annotations__r   r=   r   r>   r   r?   r    r@   r!   r-   r   r1   r
   model_configr   classmethodrC   propertyrG   rI   r[   r_   rc   r^   r$   r"   r)   r)   E   s   
 &%$(C	!(*/GnG.E^E-CNC*==IsJJV $L
 (#  $&     ! ! :>DD 7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   rf   re   r   )#rj   
__future__r   r:   pathlibr   typingr   langchain_core._apir   langchain_core.callbacksr   langchain_core.language_modelsr   langchain_core.prompts.promptr	   pydanticr
   r   langchain_classic.chains.baser   langchain_classic.chains.llmr   #langchain_classic.chains.sequentialr   __file__parentPROMPTS_DIR	from_filer=   r>   r?   r@   r#   r)   r^   r$   r"   <module>r~      s%   5 "    * ? < 8 0 / 1 ?8n##i/3>33KBT4TU 2.22;AR3RS 111+@T2TU .n..{=V/VW  '	',' ,' +	'
 (' ' 'T 
	U EF5 EFEFr$   