
    ih9                       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 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  e
ddd       G d de             Zej=                          y)z Implement an LLM driven browser.    )annotationsN)AnyDictListOptional)
deprecated)	BaseCache)CallbackManagerForChainRun)	Callbacks)BaseLanguageModel)StrOutputParser)Runnable)
ConfigDictmodel_validator)Chain)PROMPTz0.2.13zImporting NatBotChain from langchain is deprecated and will be removed in langchain 1.0. Please import from langchain_community instead: from langchain_community.chains.natbot import NatBotChain. You may need to pip install -U langchain-community.z1.0)sincemessageremovalc                  6   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<    e
dd      Z ed      e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y)&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_keyTforbid)arbitrary_types_allowedextrabefore)modec                ~    d|v r8t        j                  d       d|vr|d   t        |d   z  t               z  |d<   |S )Nr   zDirectly instantiating an NatBotChain with an llm is deprecated. Please instantiate with llm_chain argument or using the from_llm class method.r   )warningswarnr   r   )clsvaluess     Z/var/www/html/dev/engine/venv/lib/python3.12/site-packages/langchain/chains/natbot/base.pyraise_deprecationzNatBotChain.raise_deprecationE   sO     F?MM 
 &(VE]-F&,ve}&<?P&P{#    c                    t        d      )zLoad with default LLMChain.zThis method is no longer implemented. Please use from_llm.llm = OpenAI(temperature=0.5, best_of=10, n=3, max_tokens=50)For example, NatBotChain.from_llm(llm, objective))NotImplementedError)r,   r   kwargss      r.   from_defaultzNatBotChain.from_defaultR   s     "@
 	
r0   c                @    t         |z  t               z  } | d||d|S )zLoad from LLM.)r   r    )r   r   )r,   r   r   r3   r   s        r.   from_llmzNatBotChain.from_llm[   s*    
 SL?#44	FY)FvFFr0   c                2    | j                   | j                  gS )z@Expect url and browser content.

        :meta private:
        )r   r   selfs    r.   
input_keyszNatBotChain.input_keysc   s     ""D$B$BCCr0   c                    | j                   gS )z0Return command.

        :meta private:
        )r#   r9   s    r.   output_keyszNatBotChain.output_keysk   s       r0   c                P   |xs t        j                         }|| j                     }|| j                     }| j                  j                  | j                  |d d | j                  |d d dd|j                         i      }|j                         }|| _        | j                  |iS )Nd   i  )r   r   r!   r   	callbacks)config)r
   get_noop_managerr   r   r   invoker   r!   	get_childstripr#   )r:   inputsrun_manager_run_managerr   r   llm_cmds          r.   _callzNatBotChain._calls   s    
 #S&@&Q&Q&ST''( !?!?@..''!^^4Cy$($9$9#25D#9	  !7!7!9: ( 
 --/ '))r0   c                `    | 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#   )r:   r   r   _inputss       r.   executezNatBotChain.execute   s6    " **O
 G}T__--r0   c                     y)Nnat_bot_chainr6   r9   s    r.   _chain_typezNatBotChain._chain_type   s    r0   )r-   r   returnr   )r   r   r3   r   rQ   r   )r   r   r   r   r3   r   rQ   r   )rQ   z	List[str])N)rF   Dict[str, str]rG   z$Optional[CallbackManagerForChainRun]rQ   rR   )r   r   r   r   rQ   r   )rQ   r   )__name__
__module____qualname____doc____annotations__r   r   r   r!   r#   r   model_configr   classmethodr/   r4   r7   propertyr;   r=   rJ   rM   rP   r6   r0   r.   r   r      s8   , N:'+C	$+*M3%6s6cJ $L
 (#	  $	 
 
 G#G03G?BG	G G D D ! ! =A** :* 
	**.,  r0   r   )rV   
__future__r   r*   typingr   r   r   r   langchain_core._apir   langchain_core.cachesr	   langchain_core.callbacksr
   r   langchain_core.language_modelsr   langchain_core.output_parsersr   langchain_core.runnablesr   pydanticr   r   langchain.chains.baser   langchain.chains.natbot.promptr   r   model_rebuildr6   r0   r.   <module>rg      sq    & "  , , * 8 ? ; < 9 - 0 ' 1 
	>
 	A% A	AH    r0   