
    @hW                        S r SSKJr  SSKrSSKJrJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SS	KJrJr  SS
KJr  SSKJr  SSKJrJrJrJr  SSKJr              SS jr\" SSSS9 " S S\5      5       rg)z4Chain for question-answering with self-verification.    )annotationsN)AnyOptional)
deprecated)CallbackManagerForChainRun)BaseLanguageModel)PromptTemplate)
ConfigDictmodel_validator)Chain)LLMChain)CHECK_ASSERTIONS_PROMPTCREATE_DRAFT_ANSWER_PROMPTLIST_ASSERTIONS_PROMPTREVISED_ANSWER_PROMPT)SequentialChainc                    [        U USS9n[        U USS9n[        U USS9n[        U USS9nUUUU/n	[        U	S/S/SS9$ )	N	statement)llmprompt
output_key
assertionschecked_assertionsrevised_statementquestionT)chainsinput_variablesoutput_variablesverbose)r   r   )
r   create_draft_answer_promptlist_assertions_promptcheck_assertions_promptrevised_answer_promptcreate_draft_answer_chainlist_assertions_chaincheck_assertions_chainrevised_answer_chainr   s
             Y/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/chains/llm_checker/base.py*_load_question_to_checked_assertions_chainr)      s     !))!
 %%
 &&'
 $$& 	"	F #-.	     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                  T   \ rS rSr% SrS\S'   SrS\S'    \rS\S	'    \	r
S\S
'    \rS\S'    \rS\S'    SrS\S'   SrS\S'   \" SSS9r\" SS9\SS j5       5       r\SS j5       r\SS j5       r S      S!S jjr\S"S j5       r\\\	\\4             S#S jj5       rSrg)$LLMCheckerChainB   a   Chain for question-answering with self-verification.

Example:
    .. code-block:: python

        from langchain_community.llms import OpenAI
        from langchain.chains import LLMCheckerChain
        llm = OpenAI(temperature=0.7)
        checker_chain = LLMCheckerChain.from_llm(llm)
r   $question_to_checked_assertions_chainNzOptional[BaseLanguageModel]r   r	   r    r!   r"   r#   querystr	input_keyresultr   Tforbid)arbitrary_types_allowedextrabefore)modec           
     "   SU;   a  [         R                  " SSS9  SU;  am  US   bg  [        US   UR                  S[        5      UR                  S[
        5      UR                  S[        5      UR                  S	[        5      5      nUUS'   U$ )
Nr   zDirectly instantiating an LLMCheckerChain with an llm is deprecated. Please instantiate with question_to_checked_assertions_chain or using the from_llm class method.   )
stacklevelr1   r    r!   r"   r#   )warningswarnr)   getr   r   r   r   )clsvaluesr1   s      r(   raise_deprecation!LLMCheckerChain.raise_deprecationk   s     F?MM6 	 7fD5M- ?u

86 

#;=ST

#<>UV

#:<QR	 5 9 => r*   c                    U R                   /$ )z/Return the singular input key.

:meta private:
)r4   selfs    r(   
input_keysLLMCheckerChain.input_keys   s     r*   c                    U R                   /$ )z0Return the singular output key.

:meta private:
)r   rF   s    r(   output_keysLLMCheckerChain.output_keys   s       r*   c                    U=(       d    [         R                  " 5       nXR                     nU R                  SU0UR	                  5       S9nU R
                  US   0$ )Nr   )	callbacksr   )r   get_noop_managerr4   r1   	get_childr   )rG   inputsrun_manager_run_managerr   outputs         r(   _callLLMCheckerChain._call   sd    
 #S&@&Q&Q&S..)::"",,. ; 
 (;!<==r*   c                    g)Nllm_checker_chain rF   s    r(   _chain_typeLLMCheckerChain._chain_type   s    "r*   c                4    [        UUUUU5      nU " SSU0UD6$ )Nr1   rY   )r)   )rA   r   r    r!   r"   r#   kwargsr1   s           r(   from_llmLLMCheckerChain.from_llm   s?     7*&'% 	-  
1U

 	
r*   rY   )rB   dictreturnr   )ra   z	list[str])N)rQ   zdict[str, Any]rR   z$Optional[CallbackManagerForChainRun]ra   zdict[str, str])ra   r3   )r   r   r    r	   r!   r	   r"   r	   r#   r	   r]   r   ra   r/   )__name__
__module____qualname____firstlineno____doc____annotations__r   r   r    r   r!   r   r"   r   r#   r4   r   r
   model_configr   classmethodrC   propertyrH   rK   rU   rZ   r^   __static_attributes__rY   r*   r(   r/   r/   B   sd   	 +:9'+C	$+*1KK-CNC.E^E,A>ADIsJ $L
 (#  $:     ! ! =A>> :> 
	> # #  6P1G2I0E

 %3
 !/	

 "0
  .
 
 

 
r*   r/   )r   r   r    r	   r!   r	   r"   r	   r#   r	   ra   r   )rf   
__future__r   r>   typingr   r   langchain_core._apir   langchain_core.callbacksr   langchain_core.language_modelsr   langchain_core.promptsr	   pydanticr
   r   langchain.chains.baser   langchain.chains.llmr   #langchain.chains.llm_checker.promptr   r   r   r   langchain.chains.sequentialr   r)   r/   rY   r*   r(   <module>rw      s    : "    * ? < 1 0 ' )  8&	& .& +& ,	&
 *& &R 
	U w
e w
w
r*   