§
    è˜ºhZ  ã                  óª   — 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  G d„ de¦  «        ZdS )z Implement an LLM driven browser.é    )ÚannotationsN)ÚAnyÚDictÚListÚOptional)ÚOpenAI)ÚBaseLanguageModel)ÚExtraÚroot_validator)ÚCallbackManagerForChainRun)ÚChain)ÚLLMChain)ÚPROMPTc                  óD  — e Zd ZU dZded<   ded<   	 dZded<   	 d	Zded
<   d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ed+d„¦   «         Zed+d „¦   «         Z	 d,d-d%„Zd.d&„Zed/d'„¦   «         ZdS )0ÚNatBotChaina°  Implement an LLM driven browser.

    **Security Note**: This toolkit provides code to control a web-browser.

        The web-browser can be used to navigate to:

        - Any URL (including any internal network URLs)
        - And local files

        Exercise care if exposing this chain to end-users. Control who is able to
        access and use this chain, and isolate the network access of the server
        that hosts this chain.

        See https://python.langchain.com/docs/security for more information.

    Example:
        .. code-block:: python

            from langchain.chains import NatBotChain
            natbot = NatBotChain.from_default("Buy me a new hat.")
    r   Ú	llm_chainÚstrÚ	objectiveNzOptional[BaseLanguageModel]ÚllmÚurlÚinput_url_keyÚbrowser_contentÚinput_browser_content_keyÚ Úprevious_commandÚcommandÚ
output_keyc                  ó$   — e Zd ZdZej        ZdZdS )úNatBotChain.Configz'Configuration for this pydantic object.TN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   ÚforbidÚextraÚarbitrary_types_allowed© ó    úd/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain/chains/natbot/base.pyÚConfigr   2   s#   € € € € € Ø5Ð5à”ˆØ"&ÐÐÐr(   r*   T)ÚpreÚvaluesr   Úreturnc                óŒ   — d|v r?t          j        d¦  «         d|vr'|d         �t          |d         t          ¬¦  «        |d<   |S )Nr   z�Directly instantiating an NatBotChain with an llm is deprecated. Please instantiate with llm_chain argument or using the from_llm class method.r   ©r   Úprompt)ÚwarningsÚwarnr   r   )Úclsr,   s     r)   Úraise_deprecationzNatBotChain.raise_deprecation8   sZ   € à�Fˆ?ˆ?ÝŒMð ñô ð ð
  &Ð(Ð(¨V°E¬]Ð-FÝ&.°6¸%´=ÍÐ&PÑ&PÔ&P��{Ñ#Øˆr(   Úkwargsr   c                óF   — t          dddd¬¦  «        } | j        ||fi |¤ŽS )zLoad with default LLMChain.g      à?é
   é   é2   )ÚtemperatureÚbest_ofÚnÚ
max_tokens)r   Úfrom_llm)r3   r   r5   r   s       r)   Úfrom_defaultzNatBotChain.from_defaultD   s6   € õ  ¨b°AÀ"ÐEÑEÔEˆØˆsŒ|˜C Ð5Ð5¨fÐ5Ð5Ð5r(   r	   c                óD   — t          |t          ¬¦  «        } | d||dœ|¤ŽS )zLoad from LLM.r/   )r   r   r'   )r   r   )r3   r   r   r5   r   s        r)   r>   zNatBotChain.from_llmJ   s3   € õ
  ­VÐ4Ñ4Ô4ˆ	ØˆsÐF˜Y°)ÐFÐF¸vÐFÐFÐFr(   ú	List[str]c                ó   — | j         | j        gS )z@Expect url and browser content.

        :meta private:
        )r   r   ©Úselfs    r)   Ú
input_keyszNatBotChain.input_keysR   s   € ð Ô" DÔ$BÐCÐCr(   c                ó   — | j         gS )z0Return command.

        :meta private:
        )r   rC   s    r)   Úoutput_keyszNatBotChain.output_keysZ   s   € ð ”Ð Ð r(   ÚinputsúDict[str, str]Úrun_managerú$Optional[CallbackManagerForChainRun]c                ó>  — |pt          j        ¦   «         }|| j                 }|| j                 }| j                             | j        |d d…         | j        |d d…         |                     ¦   «         ¬¦  «        }| 	                    ¦   «         }|| _        | j
        |iS )Néd   i”  )r   r   r   r   Ú	callbacks)r   Úget_noop_managerr   r   r   Úpredictr   r   Ú	get_childÚstripr   )rD   rH   rJ   Ú_run_managerr   r   Úllm_cmds          r)   Ú_callzNatBotChain._callb   s£   € ð
 #ÐSÕ&@Ô&QÑ&SÔ&SˆØ�TÔ'Ô(ˆØ  Ô!?Ô@ˆØ”.×(Ò(Ø”nØ�D�S�D”	Ø!Ô2Ø+¨E¨T¨EÔ2Ø"×,Ò,Ñ.Ô.ð )ñ 
ô 
ˆð —-’-‘/”/ˆØ 'ˆÔØ” Ð)Ð)r(   c                óN   — | j         || j        |i} | |¦  «        | j                 S )a¬  Figure out next browser command to run.

        Args:
            url: URL of the site currently on.
            browser_content: Content of the page as currently displayed by the browser.

        Returns:
            Next browser command to run.

        Example:
            .. code-block:: python

                browser_content = "...."
                llm_command = natbot.run("www.google.com", browser_content)
        )r   r   r   )rD   r   r   Ú_inputss       r)   ÚexecutezNatBotChain.executeu   s2   € ð" Ô ØÔ*¨Oð
ˆð ˆt�G‰}Œ}˜Tœ_Ô-Ð-r(   c                ó   — dS )NÚnat_bot_chainr'   rC   s    r)   Ú_chain_typezNatBotChain._chain_type‹   s   € àˆr(   )r,   r   r-   r   )r   r   r5   r   r-   r   )r   r	   r   r   r5   r   r-   r   )r-   rA   )N)rH   rI   rJ   rK   r-   rI   )r   r   r   r   r-   r   )r-   r   )r    r!   r"   r#   Ú__annotations__r   r   r   r   r   r*   r   r4   Úclassmethodr?   r>   ÚpropertyrE   rG   rU   rX   r[   r'   r(   r)   r   r      sÅ  € € € € € € ðð ð, ÐÐÑØ€N€N�NØ:Ø'+€CÐ+Ð+Ð+Ñ+Ø*Ø€MÐÐÐÑØ%6ÐÐ6Ð6Ð6Ñ6ØÐÐÐÐÑØ€JÐÐÐÑð'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ð €^˜ÐÑÔð	ð 	ð 	ñ Ôð	ð ð6ð 6ð 6ñ „[ð6ð
 ðGð Gð Gñ „[ðGð ðDð Dð Dñ „XðDð ð!ð !ð !ñ „Xð!ð =Að*ð *ð *ð *ð *ð&.ð .ð .ð .ð, ðð ð ñ „Xðð ð r(   r   )r#   Ú
__future__r   r1   Útypingr   r   r   r   Úlangchain_community.llms.openair   Úlangchain_core.language_modelsr	   Úlangchain_core.pydantic_v1r
   r   Úlangchain.callbacks.managerr   Úlangchain.chains.baser   Úlangchain.chains.llmr   Úlangchain.chains.natbot.promptr   r   r'   r(   r)   ú<module>rh      s  ðØ &Ð &Ø "Ð "Ð "Ð "Ð "Ð "à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø <Ð <Ð <Ð <Ð <Ð <Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <à BÐ BÐ BÐ BÐ BÐ BØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø )Ð )Ð )Ð )Ð )Ð )Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ð|ð |ð |ð |ð |�%ñ |ô |ð |ð |ð |r(   