
    Ngj                        d Z ddlmZ ddl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mZmZmZ ddlmZ ddZ e
ddd           G d de                      Z dS )z4Chain for question-answering with self-verification.    )annotationsN)AnyDictListOptional)
deprecated)CallbackManagerForChainRun)BaseLanguageModel)PromptTemplate)
ConfigDictmodel_validator)Chain)LLMChain)CHECK_ASSERTIONS_PROMPTCREATE_DRAFT_ANSWER_PROMPTLIST_ASSERTIONS_PROMPTREVISED_ANSWER_PROMPT)SequentialChainllmr
   create_draft_answer_promptr   list_assertions_promptcheck_assertions_promptrevised_answer_promptreturnr   c                    t          | |d          }t          | |d          }t          | |d          }t          | |d          }||||g}	t          |	dgdgd          }
|
S )	N	statement)r   prompt
output_key
assertionschecked_assertionsrevised_statementquestionT)chainsinput_variablesoutput_variablesverbose)r   r   )r   r   r   r   r   create_draft_answer_chainlist_assertions_chaincheck_assertions_chainrevised_answer_chainr#   $question_to_checked_assertions_chains              ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/chains/llm_checker/base.py*_load_question_to_checked_assertions_chainr-      s     !))! ! !
 %%  
 &&'  
 $$&   	"	F ,;#-.	, , ,( 0/    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                  V   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<    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fd-d'            ZdS ).LLMCheckerChaina<  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   r+   NzOptional[BaseLanguageModel]r   r   r   r   r   r   querystr	input_keyresultr   Tforbid)arbitrary_types_allowedextrabefore)modevaluesr   r   r   c           
     R   d|v rt          j        d           d|vr|d         t          |d         |                    dt                    |                    dt
                    |                    dt                    |                    dt                              }||d<   |S )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.r+   r   r   r   r   )warningswarnr-   getr   r   r   r   )clsr=   r+   s      r,   raise_deprecationz!LLMCheckerChain.raise_deprecationl   s     F??M6   7fDD5M- ?u

8:T  

#;=STT

#<>UVV

#:<QRR  5 9 => r.   	List[str]c                    | j         gS )z?Return the singular input key.

        :meta private:
        )r6   selfs    r,   
input_keyszLLMCheckerChain.input_keys   s     r.   c                    | j         gS )z@Return the singular output key.

        :meta private:
        )r   rF   s    r,   output_keyszLLMCheckerChain.output_keys   s       r.   inputsDict[str, Any]run_manager$Optional[CallbackManagerForChainRun]Dict[str, str]c                    |pt          j                    }|| j                 }|                     d|i|                                          }| j        |d         iS )Nr"   )	callbacksr!   )r	   get_noop_managerr6   r+   	get_childr   )rG   rK   rM   _run_managerr"   outputs         r,   _callzLLMCheckerChain._call   si    
 #S&@&Q&S&S$.)::"l.D.D.F.F ; 
 
 (;!<==r.   c                    dS )Nllm_checker_chain rF   s    r,   _chain_typezLLMCheckerChain._chain_type   s    ""r.   r
   kwargsc                <    t          |||||          } | dd|i|S )Nr+   rY   )r-   )rB   r   r   r   r   r   r[   r+   s           r,   from_llmzLLMCheckerChain.from_llm   sP     7*&'%  	- s 
 
1U

 
 	
r.   )r=   r   r   r   )r   rD   )N)rK   rL   rM   rN   r   rO   )r   r5   )r   r
   r   r   r   r   r   r   r   r   r[   r   r   r3   )__name__
__module____qualname____doc____annotations__r   r   r   r   r   r   r   r   r   r6   r   r   model_configr   classmethodrC   propertyrH   rJ   rV   rZ   r]   rY   r.   r,   r3   r3   C   s        	 	 :999'+C++++*1KKKKK-CCCCC.EEEEE,AAAAADIJ: $  L
 _(###   [ $#6       X  ! ! ! X! =A> > > > > # # # X#  6P1G2I0E
 
 
 
 [
 
 
r.   r3   )r   r
   r   r   r   r   r   r   r   r   r   r   )!ra   
__future__r   r?   typingr   r   r   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-   r3   rY   r.   r,   <module>rq      s   : : " " " " " "  , , , , , , , , , , , , * * * * * * ? ? ? ? ? ? < < < < < < 1 1 1 1 1 1 0 0 0 0 0 0 0 0 ' ' ' ' ' ' ) ) ) ) ) )            8 7 7 7 7 7'0 '0 '0 '0T 
	U   t
 t
 t
 t
 t
e t
 t
 t
 t
 t
r.   