a
    dg                     @  s   d Z ddlmZ ddl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mZmZ ddlmZ ddlmZ eeZG dd deZ dS )z<Chain that interprets a prompt and executes bash operations.    )annotationsN)AnyDictListOptional)ChainLLMChain)BasePromptTemplateOutputParserException)CallbackManagerForChainRun)BaseLanguageModel)
ConfigDictFieldmodel_validator)BashProcess)PROMPTc                   @  s
  e Zd ZU dZded< dZded< dZded	< d
Zded< eZ	ded< e
edZded< edddZeddedddddZeddedddddZedddd Zeddd!d"Zd/d#d$d%d&d'd(Zeddd)d*Zeefd+ddd d,d-d.ZdS )0LLMBashChaina  Chain that interprets a prompt and executes bash operations.

    Example:
        .. code-block:: python

            from langchain.chains import LLMBashChain
            from langchain_community.llms import OpenAI
            llm_bash = LLMBashChain.from_llm(OpenAI())
    r	   	llm_chainNzOptional[BaseLanguageModel]llmquestionstr	input_keyZanswer
output_keyr
   prompt)default_factoryr   bash_processTZforbid)Zarbitrary_types_allowedextrabefore)moder   r   )valuesreturnc                 C  sJ   d|v rFt d d|vrF|d d urF|dt}t|d |d|d< |S )Nr   zDirectly instantiating an LLMBashChain with an llm is deprecated. Please instantiate with llm_chain or using the from_llm class method.r   r   r   r   )warningswarngetr   r	   )clsr    r    r'   r/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_experimental/llm_bash/base.pyraise_deprecation/   s    zLLMBashChain.raise_deprecationc                 C  s   |d j jd u rtd|S )Nr   zBThe prompt used by llm_chain is expected to have an output_parser.)r   output_parser
ValueError)r&   r    r'   r'   r(   validate_prompt<   s
    zLLMBashChain.validate_promptz	List[str])r!   c                 C  s   | j gS )z2Expect input key.

        :meta private:
        )r   selfr'   r'   r(   
input_keysE   s    zLLMBashChain.input_keysc                 C  s   | j gS )z3Expect output key.

        :meta private:
        )r   r-   r'   r'   r(   output_keysM   s    zLLMBashChain.output_keyszDict[str, Any]z$Optional[CallbackManagerForChainRun]zDict[str, str])inputsrun_managerr!   c           	   
   C  s  |p
t  }|j|| j | jd | jj|| j | d}|j|d| jd | }z| jj	j
}||}W n8 ty } z |j|| jd |W Y d }~n
d }~0 0 | jr|jd| jd |jt|d| jd | j|}|jd| jd |j|d| jd | j|iS )N)verbose)r   	callbacksgreen)colorr3   z
Code: yellowz	
Answer: )r   Zget_noop_managerZon_textr   r3   r   ZpredictZ	get_childstripr   r*   parser   Zon_chain_errorr   r   runr   )	r.   r1   r2   Z_run_managertparserZcommand_listeoutputr'   r'   r(   _callU   s,    
zLLMBashChain._callc                 C  s   dS )NZllm_bash_chainr'   r-   r'   r'   r(   _chain_types   s    zLLMBashChain._chain_typer   )r   r   kwargsr!   c                 K  s   t ||d}| f d|i|S )Nr"   r   r   )r&   r   r   rA   r   r'   r'   r(   from_llmw   s    zLLMBashChain.from_llm)N)__name__
__module____qualname____doc____annotations__r   r   r   r   r   r   r   r   r   Zmodel_configr   classmethodr)   r,   propertyr/   r0   r?   r@   rB   r'   r'   r'   r(   r      s8   


 r   )!rF   
__future__r   loggingr#   typingr   r   r   r   Zlangchain.chains.baser   Zlangchain.chains.llmr	   Zlangchain.schemar
   r   Z langchain_core.callbacks.managerr   Zlangchain_core.language_modelsr   Zpydanticr   r   r   Z$langchain_experimental.llm_bash.bashr   Z&langchain_experimental.llm_bash.promptr   	getLoggerrC   loggerr   r'   r'   r'   r(   <module>   s   
