
    ih                        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       G d de             Z(y)    )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                       e Zd ZU dZ ee      Zeed<   	 e	de
fd       Ze	de
fd       Zdeeee
f      de
f fdZed	edefd
       Zedee   ddf fd       Ze	dee
   f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       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       Z"e	de
fd       Z# xZ$S )	ChatAgentzChat Agent.)default_factoryoutput_parserreturnc                      y)z&Prefix to append the observation with.zObservation:  selfs    X/var/www/html/dev/engine/venv/lib/python3.12/site-packages/langchain/agents/chat/base.pyobservation_prefixzChatAgent.observation_prefix(   s         c                      y)z#Prefix to append the llm call with.zThought:r%   r&   s    r(   
llm_prefixzChatAgent.llm_prefix-   s     r*   intermediate_stepsc                 j    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__s      r(   r0   zChatAgent._construct_scratchpad2   sN     !789KL*C0IJJ11A0BD $#r*   kwargsc                     t               S Nr   )clsr6   s     r(   _get_default_output_parserz$ChatAgent._get_default_output_parserA   s    !!r*   toolsNc                 R    t         |   |       t        | j                  |       y )N)
class_namer;   )r/   _validate_toolsr   __name__)r9   r;   r5   s     r(   r>   zChatAgent._validate_toolsE   s    &#s||5Ir*   c                     dgS )NzObservation:r%   r&   s    r(   _stopzChatAgent._stopJ   s    r*   system_message_prefixsystem_message_suffixhuman_messageformat_instructionsinput_variablesc                    dj                  |D cg c]  }|j                   d|j                    c}      }dj                  |D cg c]  }|j                   c}      }	|j                  |	      }dj                  ||||g      }
t	        j
                  |
      t        j
                  |      g}|ddg}t        ||      S c c}w c c}w )	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.
        
z: z, )
tool_namesz

inputr4   )rF   messages)joinnamedescriptionformatr   from_templater   r   )r9   r;   rB   rC   rD   rE   rF   tooltool_stringsrI   templaterK   s               r(   create_promptzChatAgent.create_promptN   s    6 yyQV!WTYYKr$2B2B1C"D!WXYYe<d		<=
188J8O;;%#%	
 (55h?&44]C
 "&(:;O!/HUU# "X<s   "CCllmcallback_managerc
                     | j                  |       | j                  ||||||	      }t        |||      }|D cg c]  }|j                   }}|xs | j	                         } | d|||d|
S c c}w )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.
        )rB   rC   rD   rE   rF   )rU   promptrV   )	llm_chainallowed_toolsr"   r%   )r>   rT   r   rM   r:   )r9   rU   r;   rV   r"   rB   rC   rD   rE   rF   r6   rX   rY   rQ   rI   _output_parsers                   r(   from_llm_and_toolszChatAgent.from_llm_and_tools|   s    D 	E""""7"7' 3+ # 
 -
	
 -22Ddii2
2&J#*H*H*J 
$(
 	
 	
 3s   A0c                     t         r8   )r3   r&   s    r(   _agent_typezChatAgent._agent_type   s    r*   )%r?   
__module____qualname____doc__r   r   r"   r   __annotations__propertyr2   r)   r,   r   r   r	   r0   classmethodr   r:   r   r   r>   rA   r   r   r   r   r   r   rT   r   r
   r   r\   r^   __classcell__)r5   s   @r(   r    r       s/    ',=M'NM$N&C   C  $"&u[#-='>"?$	$ "# ":K " " JHX$6 J4 J J  tCy      &;%:*#6/3+V!+V  #+V  #	+V
 +V !+V "$s),+V 
+V +VZ 
 ;?59%:%:*#6/36
6
 !6
 ##67	6

   126
  #6
  #6
 6
 !6
 "$s),6
 6
 
6
 6
p S  r*   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   #langchain.agents.chat.output_parserr   langchain.agents.chat.promptr   r   r   r   langchain.agents.utilsr   langchain.chains.llmr   r    r%   r*   r(   <module>ru      ss    7 7 * - 8 < 5 
 *  @ ; @  ? ) %
U U
Ur*   