a
    ag                     @   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)messageZ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!   h/var/www/html/cobodadashboardai.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   )clsr0   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_namer4   )r(   _validate_toolsr   __name__)r2   r4   r.   r!   r$   r6   E   s    zChatAgent._validate_toolsc                 C   s   dgS )NzObservation:r!   r"   r!   r!   r$   _stopJ   s    zChatAgent._stop)r4   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.0Ztoolr!   r!   r$   
<listcomp>i       z+ChatAgent.create_prompt.<locals>.<listcomp>z, c                 S   s   g | ]
}|j qS r!   r?   rA   r!   r!   r$   rC   j   rD   )
tool_namesz

Ninputr-   )r=   messages)joinformatr   Zfrom_templater   r   )r2   r4   r9   r:   r;   r<   r=   Ztool_stringsrF   templaterH   r!   r!   r$   create_promptN   s     	zChatAgent.create_prompt)llmr4   callback_managerr   r9   r:   r;   r<   r=   r0   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.
        )r9   r:   r;   r<   r=   )rM   promptrN   c                 S   s   g | ]
}|j qS r!   rE   rA   r!   r!   r$   rC      rD   z0ChatAgent.from_llm_and_tools.<locals>.<listcomp>)	llm_chainZallowed_toolsr   )r6   rL   r   r3   )r2   rM   r4   rN   r   r9   r:   r;   r<   r=   r0   rO   rP   rF   Z_output_parserr!   r!   r$   from_llm_and_tools|   s.    "
zChatAgent.from_llm_and_toolsc                 C   s   t d S r1   )r,   r"   r!   r!   r$   _agent_type   s    zChatAgent._agent_type)%r7   
__module____qualname____doc__r   r   r   r   __annotations__propertyr+   r%   r&   r   r   r   r)   classmethodr   r3   r   r   r6   r8   r   r   r   r   r   r   rL   r
   r	   r   rQ   rR   __classcell__r!   r!   r.   r$   r      sj   

-
8r   N))typingr   r   r   r   r   Zlangchain_core._apir   Zlangchain_core.agentsr   Zlangchain_core.callbacksr	   Zlangchain_core.language_modelsr
   Zlangchain_core.promptsr   Zlangchain_core.prompts.chatr   r   r   Zlangchain_core.toolsr   Zpydanticr   Zlangchain._api.deprecationr   Zlangchain.agents.agentr   r   Z#langchain.agents.chat.output_parserr   Zlangchain.agents.chat.promptr   r   r   r   Zlangchain.agents.utilsr   Zlangchain.chains.llmr   r   r!   r!   r!   r$   <module>   s(   