§
    è˜ºh  ã                  óÊ   — 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mZ ddl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 G d„ de¦  «        ZdS )z4Chain for question-answering with self-verification.é    )ÚannotationsN)ÚAnyÚDictÚListÚOptional)ÚBaseLanguageModel)ÚPromptTemplate)ÚExtraÚroot_validator)ÚCallbackManagerForChainRun)Ú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              úi/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain/chains/llm_checker/base.pyÚ*_load_question_to_checked_assertions_chainr,      sÇ   € õ !)ØØ)Øð!ñ !ô !Ðõ
 %ØØ%Øðñ ô Ðõ
 &ØØ&Ø'ðñ ô Ðõ
 $ØØ$Ø&ðñ ô Ðð 	"ØØØð	€Fõ ,;ØØ#˜Ø-Ð.Øð	,ñ ,ô ,Ð(ð 0Ð/ó    c                  óF  — 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<    G d„ d¦  «        Z ed¬¦  «        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   c                  ó$   — e Zd ZdZej        ZdZdS )úLLMCheckerChain.Configz'Configuration for this pydantic object.TN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   ÚforbidÚextraÚarbitrary_types_allowed© r-   r+   ÚConfigr5   \   s#   € € € € € Ø5Ð5à”ˆØ"&ÐÐÐr-   r>   T)ÚpreÚvaluesr   r   c           
     óR  — d|v r¢t          j        d¦  «         d|vrŠ|d         �‚t          |d         |                     dt          ¦  «        |                     dt
          ¦  «        |                     dt          ¦  «        |                     dt          ¦  «        ¦  «        }||d<   |S )Nr   z¥Directly 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_deprecationb   sÁ   € à�Fˆ?ˆ?ÝŒMð6ñô ð ð 7¸fÐDÐDØ˜5”MÐ-õ ?Ø˜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:
        )r2   ©Úselfs    r+   Ú
input_keyszLLMCheckerChain.input_keys~   s   € ð ”ÐÐr-   c                ó   — | j         gS )z@Return the singular output key.

        :meta private:
        )r   rI   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_managerr2   r*   Ú	get_childr   )rJ   rN   rP   Ú_run_managerr!   Úoutputs         r+   Ú_callzLLMCheckerChain._callŽ   si   € ð
 #ÐSÕ&@Ô&QÑ&SÔ&SˆØ˜$œ.Ô)ˆà×:Ò:Ø˜Ð"¨l×.DÒ.DÑ.FÔ.Fð ;ñ 
ô 
ˆð ” Ð(;Ô!<Ð=Ð=r-   c                ó   — dS )NÚllm_checker_chainr=   rI   s    r+   Ú_chain_typezLLMCheckerChain._chain_type›   s   € à"Ð"r-   r   Úkwargsr   c                ó<   — t          |||||¦  «        } | dd|i|¤ŽS )Nr*   r=   )r,   )rE   r   r   r   r   r   r]   r*   s           r+   Úfrom_llmzLLMCheckerChain.from_llmŸ   sP   € õ 7ØØ*Ø&Ø'Ø%ñô ð 	-ð ˆsð 
ð 
Ø1Uð
àð
ð 
ð 	
r-   )r@   r   r   r   )r   rG   )N)rN   rO   rP   rQ   r   rR   )r   r1   )r   r   r   r	   r   r	   r   r	   r   r	   r]   r   r   r/   )r6   r7   r8   r9   Ú__annotations__r   r   r   r   r   r   r   r   r   r2   r   r>   r   rF   ÚpropertyrK   rM   rY   r\   Úclassmethodr_   r=   r-   r+   r/   r/   A   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ÐÐÐÑð'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ð €^˜ÐÑÔðð ð ñ Ôðð6 ð ð  ð  ñ „Xð ð ð!ð !ð !ñ „Xð!ð =Að>ð >ð >ð >ð >ð ð#ð #ð #ñ „Xð#ð ð 6PØ1GØ2IØ0Eð
ð 
ð 
ð 
ñ „[ð
ð 
ð 
r-   r/   )r   r   r   r	   r   r	   r   r	   r   r	   r   r   )r9   Ú
__future__r   rB   Útypingr   r   r   r   Úlangchain_core.language_modelsr   Úlangchain_core.promptsr	   Úlangchain_core.pydantic_v1r
   r   Úlangchain.callbacks.managerr   Úlangchain.chains.baser   Úlangchain.chains.llmr   Ú#langchain.chains.llm_checker.promptr   r   r   r   Úlangchain.chains.sequentialr   r,   r/   r=   r-   r+   ú<module>rm      s_  ðØ :Ð :Ø "Ð "Ð "Ð "Ð "Ð "à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à <Ð <Ð <Ð <Ð <Ð <Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <à BÐ BÐ BÐ BÐ BÐ BØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7ð'0ð '0ð '0ð '0ðTt
ð t
ð t
ð t
ð t
�eñ t
ô t
ð t
ð t
ð t
r-   