
    3fia                        d Z ddlmZ ddl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y)z Implement an LLM driven browser.    )annotationsN)Any)
deprecated)CallbackManagerForChainRun)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://docs.langchain.com/oss/python/security-policy for more information.

    Example:
        ```python
        from langchain_classic.chains import NatBotChain

        natbot = NatBotChain.from_default("Buy me a new hat.")
        ```
    r	   	llm_chainstr	objectiveNzBaseLanguageModel | None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 r:t        j                  d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.   )
stacklevelr   )warningswarnr   r   )clsvaluess     b/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_classic/chains/natbot/base.py_raise_deprecationzNatBotChain._raise_deprecationD   sT     F?MM  	 &(VE]-F&,ve}&<?P&P{#    c                    d}t        |      )zLoad with default LLMChain.zThis method is no longer implemented. Please use from_llm.model = OpenAI(temperature=0.5, best_of=10, n=3, max_tokens=50)For example, NatBotChain.from_llm(model, objective))NotImplementedError)r)   r   kwargsmsgs       r+   from_defaultzNatBotChain.from_defaultR   s    B 	
 "#&&r-   c                @    t         |z  t               z  } | d||d|S )zLoad from LLM.)r   r    )r   r   )r)   r   r   r0   r   s        r+   from_llmzNatBotChain.from_llm\   s*     SL?#44	FY)FvFFr-   c                2    | j                   | j                  gS )zExpect url and browser content.)r   r   selfs    r+   
input_keyszNatBotChain.input_keysg   s     ""D$B$BCCr-   c                    | j                   gS )zReturn command.)r   r7   s    r+   output_keyszNatBotChain.output_keysl   s       r-   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   )r8   inputsrun_manager_run_managerr   r   llm_cmds          r+   _callzNatBotChain._callq   s    
 #S&@&Q&Q&ST''( !?!?@..''!^^4Cy$($9$9#25D#9	  !7!7!9: ( 
 --/ '))r-   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:
            ```python
            browser_content = "...."
            llm_command = natbot.run("www.google.com", browser_content)
            ```
        )r   r   r   )r8   r   r   _inputss       r+   executezNatBotChain.execute   s6    " **O
 G}T__--r-   c                     y)Nnat_bot_chainr4   r7   s    r+   _chain_typezNatBotChain._chain_type   s    r-   )r*   dictreturnr   )r   r   r0   r   rP   r   )r   r   r   r   r0   r   rP   r   )rP   z	list[str])N)rD   dict[str, str]rE   z!CallbackManagerForChainRun | NonerP   rQ   )r   r   r   r   rP   r   )rP   r   )__name__
__module____qualname____doc____annotations__r   r   r   r   r   r
   model_configr   classmethodr,   r2   r5   propertyr9   r;   rH   rK   rN   r4   r-   r+   r   r      s=   . N:$(C	!(*M3%6s6cJ $L
 (#
  $
 ' ' GG G 	G
 
G G D D ! ! :>** 7* 
	**.,  r-   r   )rU   
__future__r   r'   typingr   langchain_core._apir   langchain_core.callbacksr   langchain_core.language_modelsr   langchain_core.output_parsersr   langchain_core.runnablesr	   pydanticr
   r   langchain_classic.chains.baser   &langchain_classic.chains.natbot.promptr   r   r4   r-   r+   <module>rd      sY    & "   * ? < 9 - 0 / 9 
	>
 	A% A	Ar-   