o
    `+ iz                     @   s   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
 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 )    )Sequence)AnyOptional)
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                       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    f/home/app/PaddleOCR-VL-test/.venv_paddleocr/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                    s4   t  |}t|tsd}t||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msg	__class__r    r#   r)   3   s   
zChatAgent._construct_scratchpadkwargsc                 K   s   t  S Nr   )clsr1   r    r    r#   _get_default_output_parserC      z$ChatAgent._get_default_output_parsertoolsNc                    s   t  | t| j|d d S )N)
class_namer6   )r(   _validate_toolsr   __name__)r3   r6   r/   r    r#   r8   G   s   zChatAgent._validate_toolsc                 C   s   dgS )NzObservation:r    r!   r    r    r#   _stopL   r5   zChatAgent._stopsystem_message_prefixsystem_message_suffixhuman_messageformat_instructionsinput_variablesc                 C   s~   d dd |D }d dd |D }|j|d}| d| d| d| }	t|	t|g}
|du r9d	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>k   s    z+ChatAgent.create_prompt.<locals>.<listcomp>z, c                 S      g | ]}|j qS r    rA   rC   r    r    r#   rE   l       )
tool_namesz

Ninputr-   )r?   messages)joinformatr   Zfrom_templater   r
   )r3   r6   r;   r<   r=   r>   r?   Ztool_stringsrI   templaterK   r    r    r#   create_promptP   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>   r?   )rP   promptrQ   c                 S   rF   r    rG   rC   r    r    r#   rE      rH   z0ChatAgent.from_llm_and_tools.<locals>.<listcomp>)	llm_chainZallowed_toolsr   Nr    )r8   rO   r   r4   )r3   rP   r6   rQ   r   r;   r<   r=   r>   r?   r1   rR   rS   rI   Z_output_parserr    r    r#   from_llm_and_toolsw   s.   
"zChatAgent.from_llm_and_toolsc                 C   s   t r2   )r,   r!   r    r    r#   _agent_type   s   zChatAgent._agent_type)%r9   
__module____qualname____doc__r   r   r   r   __annotations__propertyr+   r$   r&   listtupler   r)   classmethodr   r4   r   r   r8   r:   r   r   r   r   r   r	   rO   r   r   r   rT   rU   __classcell__r    r    r/   r#   r      s   
 
&	

8r   N)(collections.abcr   typingr   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,    