a
    ~g                     @   s   d dl mZ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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 d dlmZ d dlm Z m!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z' ededdG dd deZ(dS )    )AnyListOptionalSequenceTuple)
deprecated)AgentAction)BaseCallbackManager)BaseLanguageModel)BasePromptTemplate)ChatPromptTemplateHumanMessagePromptTemplateSystemMessagePromptTemplate)BaseTool)Field)AGENT_DEPRECATION_WARNING)AgentAgentOutputParserChatOutputParser)FORMAT_INSTRUCTIONSHUMAN_MESSAGESYSTEM_MESSAGE_PREFIXSYSTEM_MESSAGE_SUFFIX)validate_tools_single_input)LLMChainz0.1.0z1.0)messageremovalc                       sD  e Zd ZU dZeedZeed< e	e
dddZe	e
dddZeeee
f  e
d	 fd
dZeeedddZeee dd fddZe	ee
 dddZeeeeedfee e
e
e
e
eee
  edddZeddeeeedfeee ee  ee e
e
e
e
eee
  ee!dddZ"e	e
dddZ#  Z$S )	ChatAgentzChat Agent.)default_factoryoutput_parser)returnc                 C   s   dS )z&Prefix to append the observation with.zObservation:  selfr"   r"   _/var/www/html/emsaiapi.evdpl.com/venv/lib/python3.9/site-packages/langchain/agents/chat/base.pyobservation_prefix(   s    zChatAgent.observation_prefixc                 C   s   dS )z#Prefix to append the llm call with.zThought:r"   r#   r"   r"   r%   
llm_prefix-   s    zChatAgent.llm_prefix)intermediate_stepsr!   c                    s4   t  |}t|tstd|r,d| S |S d S )Nz*agent_scratchpad should be of type string.zhThis was your previous work (but I haven't seen any of it! I only see what you return as final answer):
)super_construct_scratchpad
isinstancestr
ValueError)r$   r(   agent_scratchpad	__class__r"   r%   r*   2   s    
zChatAgent._construct_scratchpad)kwargsr!   c                 K   s   t  S Nr   )clsr1   r"   r"   r%   _get_default_output_parserA   s    z$ChatAgent._get_default_output_parserN)toolsr!   c                    s   t  | t| j|d d S )N)
class_namer5   )r)   _validate_toolsr   __name__)r3   r5   r/   r"   r%   r7   E   s    zChatAgent._validate_toolsc                 C   s   dgS )NzObservation:r"   r#   r"   r"   r%   _stopJ   s    zChatAgent._stop)r5   system_message_prefixsystem_message_suffixhuman_messageformat_instructionsinput_variablesr!   c                 C   sv   d dd |D }d dd |D }|j|d}d ||||g}	t|	t|g}
|du rjd	d
g}t||
dS )ag  Create a prompt from a list of tools.

        Args:
            tools: A list of tools.
            system_message_prefix: The system message prefix.
                Default is SYSTEM_MESSAGE_PREFIX.
            system_message_suffix: The system message suffix.
                Default is SYSTEM_MESSAGE_SUFFIX.
            human_message: The human message. Default is HUMAN_MESSAGE.
            format_instructions: The format instructions.
                Default is FORMAT_INSTRUCTIONS.
            input_variables: The input variables. Default is None.

        Returns:
            A prompt template.
        
c                 S   s   g | ]}|j  d |j qS )z: )namedescription.0toolr"   r"   r%   
<listcomp>i       z+ChatAgent.create_prompt.<locals>.<listcomp>z, c                 S   s   g | ]
}|j qS r"   r@   rB   r"   r"   r%   rE   j   rF   )
tool_namesz

Ninputr.   )r>   messages)joinformatr   from_templater   r   )r3   r5   r:   r;   r<   r=   r>   tool_stringsrH   templaterJ   r"   r"   r%   create_promptN   s     	zChatAgent.create_prompt)llmr5   callback_managerr    r:   r;   r<   r=   r>   r1   r!   c
                 K   s^   |  | | j||||||	d}t|||d}dd |D }|pF|  }| f |||d|
S )a=  Construct an agent from an LLM and tools.

        Args:
            llm: The language model.
            tools: A list of tools.
            callback_manager: The callback manager. Default is None.
            output_parser: The output parser. Default is None.
            system_message_prefix: The system message prefix.
                Default is SYSTEM_MESSAGE_PREFIX.
            system_message_suffix: The system message suffix.
                Default is SYSTEM_MESSAGE_SUFFIX.
            human_message: The human message. Default is HUMAN_MESSAGE.
            format_instructions: The format instructions.
                Default is FORMAT_INSTRUCTIONS.
            input_variables: The input variables. Default is None.
            kwargs: Additional keyword arguments.

        Returns:
            An agent.
        )r:   r;   r<   r=   r>   )rQ   promptrR   c                 S   s   g | ]
}|j qS r"   rG   rB   r"   r"   r%   rE      rF   z0ChatAgent.from_llm_and_tools.<locals>.<listcomp>)	llm_chainallowed_toolsr    )r7   rP   r   r4   )r3   rQ   r5   rR   r    r:   r;   r<   r=   r>   r1   rS   rT   rH   _output_parserr"   r"   r%   from_llm_and_tools|   s.    "
zChatAgent.from_llm_and_toolsc                 C   s   t d S r2   )r-   r#   r"   r"   r%   _agent_type   s    zChatAgent._agent_type)%r8   
__module____qualname____doc__r   r   r    r   __annotations__propertyr,   r&   r'   r   r   r   r*   classmethodr   r4   r   r   r7   r9   r   r   r   r   r   r   rP   r
   r	   r   rW   rX   __classcell__r"   r"   r/   r%   r      sj   

-
8r   N))typingr   r   r   r   r   langchain_core._apir   langchain_core.agentsr   langchain_core.callbacksr	   langchain_core.language_modelsr
   langchain_core.promptsr   langchain_core.prompts.chatr   r   r   langchain_core.toolsr   pydanticr   langchain._api.deprecationr   langchain.agents.agentr   r   Z#langchain.agents.chat.output_parserr   langchain.agents.chat.promptr   r   r   r   langchain.agents.utilsr   langchain.chains.llmr   r   r"   r"   r"   r%   <module>   s(   