o
    Jjgm                     @   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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d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AgentOutputParserChatOutputParser)FORMAT_INSTRUCTIONSHUMAN_MESSAGESYSTEM_MESSAGE_PREFIXSYSTEM_MESSAGE_SUFFIX)validate_tools_single_input)LLMChainz0.1.0create_react_agentz1.0)alternativeremovalc                       sl  e Zd ZU dZeedZeed< 	 e	de
fddZe	de
fddZd	eeee
f  de
f fd
dZededefddZedee ddf fddZe	dee
 fddZeeeeedfdee de
de
de
de
deee
  defddZeddeeeedfdedee dee  dee de
de
de
de
deee
  dede!fddZ"e	de
fd d!Z#  Z$S )"	ChatAgentzChat Agent.)default_factoryoutput_parserreturnc                 C      dS )z&Prefix to append the observation with.zObservation:  selfr#   r#   R/var/www/html/zoom/venv/lib/python3.10/site-packages/langchain/agents/chat/base.pyobservation_prefix#      zChatAgent.observation_prefixc                 C   r"   )z#Prefix to append the llm call with.zThought:r#   r$   r#   r#   r&   
llm_prefix(   r(   zChatAgent.llm_prefixintermediate_stepsc                    s0   t  |}t|tstd|rd| S |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,   -   s   
zChatAgent._construct_scratchpadkwargsc                 K   s   t  S Nr   )clsr3   r#   r#   r&   _get_default_output_parser<      z$ChatAgent._get_default_output_parsertoolsNc                    s   t  | t| j|d d S )N)
class_namer8   )r+   _validate_toolsr   __name__)r5   r8   r1   r#   r&   r:   @   s   zChatAgent._validate_toolsc                 C   s   dgS )NzObservation:r#   r$   r#   r#   r&   _stopE   r7   zChatAgent._stopsystem_message_prefixsystem_message_suffixhuman_messageformat_instructionsinput_variablesc                 C   sv   d dd |D }d dd |D }|j|d}d ||||g}	t|	t|g}
|du r5d	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>d   s    z+ChatAgent.create_prompt.<locals>.<listcomp>z, c                 S      g | ]}|j qS r#   rC   rE   r#   r#   r&   rH   e       )
tool_namesz

Ninputr0   )rA   messages)joinformatr   from_templater   r   )r5   r8   r=   r>   r?   r@   rA   tool_stringsrL   templaterN   r#   r#   r&   create_promptI   s    	zChatAgent.create_promptllmcallback_managerc
                 K   s^   |  | | j||||||	d}t|||d}dd |D }|p#|  }| d|||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@   rA   )rU   promptrV   c                 S   rI   r#   rJ   rE   r#   r#   r&   rH      rK   z0ChatAgent.from_llm_and_tools.<locals>.<listcomp>)	llm_chainallowed_toolsr    Nr#   )r:   rT   r   r6   )r5   rU   r8   rV   r    r=   r>   r?   r@   rA   r3   rW   rX   rL   _output_parserr#   r#   r&   from_llm_and_toolsw   s.   
"zChatAgent.from_llm_and_toolsc                 C   s   t r4   )r/   r$   r#   r#   r&   _agent_type   s   zChatAgent._agent_type)%r;   
__module____qualname____doc__r   r   r    r   __annotations__propertyr.   r'   r)   r   r   r   r,   classmethodr   r6   r   r   r:   r<   r   r   r   r   r   r   rT   r
   r	   r   r[   r\   __classcell__r#   r#   r1   r&   r      s   
 
-	

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.agents.agentr   r   #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     