
    Ng                     &   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(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                   .    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                     dS )z&Prefix to append the observation with.zObservation:  selfs    V/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/agents/chat/base.pyobservation_prefixzChatAgent.observation_prefix(   s	         c                     dS )z#Prefix to append the llm call with.zThought:r%   r&   s    r(   
llm_prefixzChatAgent.llm_prefix-   s	     zr*   intermediate_stepsc                     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   sk     !77889KLL*C00 	KIJJJ 	$D1AD D $#r*   kwargsc                     t                      S Nr   )clsr6   s     r(   _get_default_output_parserz$ChatAgent._get_default_output_parserA   s    !!!r*   toolsNc                 v    t                                          |           t          | j        |           d S )N)
class_namer;   )r/   _validate_toolsr   __name__)r9   r;   r5   s     r(   r>   zChatAgent._validate_toolsE   s6    &&&#s|5IIIII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                 Z   d                     d |D                       }d                     d |D                       }|                    |          }d                     ||||g          }	t          j        |	          t	          j        |          g}
|dd	g}t          ||

          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                 0    g | ]}|j          d |j         S )z: )namedescription.0tools     r(   
<listcomp>z+ChatAgent.create_prompt.<locals>.<listcomp>i   s+    !W!W!WTY"D"D$2B"D"D!W!W!Wr*   z, c                     g | ]	}|j         
S r%   rJ   rL   s     r(   rO   z+ChatAgent.create_prompt.<locals>.<listcomp>j   s    <<<d	<<<r*   )
tool_namesz

Ninputr4   )rF   messages)joinformatr   from_templater   r   )r9   r;   rB   rC   rD   rE   rF   tool_stringsrR   templaterT   s              r(   create_promptzChatAgent.create_promptN   s    6 yy!W!WQV!W!W!WXXYY<<e<<<==
188J8OO;;%#%	
 
 (5h??&4]CC
 "&(:;O!/HUUUUr*   llmcallback_managerc
                     |                      |           |                     ||||||	          }t          |||          }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.
        )rB   rC   rD   rE   rF   )r[   promptr\   c                     g | ]	}|j         
S r%   rQ   rL   s     r(   rO   z0ChatAgent.from_llm_and_tools.<locals>.<listcomp>   s    222Ddi222r*   )	llm_chainallowed_toolsr"   r%   )r>   rZ   r   r:   )r9   r[   r;   r\   r"   rB   rC   rD   rE   rF   r6   r^   r`   rR   _output_parsers                  r(   from_llm_and_toolszChatAgent.from_llm_and_tools|   s    D 	E""""""7"7' 3+ # 
 
 -
 
 
	
 32E222
&J#*H*H*J*Js 
$(
 
 	
 
 	
r*   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   rZ   r   r
   r   rc   re   __classcell__)r5   s   @r(   r    r       s         ',u=M'N'N'NM$NNN&C    X C    X$"&u[#-='>"?$	$ $ $ $ $ $ "# ":K " " " [" JHX$6 J4 J J J J J [J  tCy       X   &;%:*#6/3+V +V!+V  #+V  #	+V
 +V !+V "$s),+V 
+V +V +V [+VZ 
 ;?59%:%:*#6/36
 6
6
 !6
 ##67	6

   126
  #6
  #6
 6
 !6
 "$s),6
 6
 
6
 6
 6
 [6
p S    X    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>r|      s   7 7 7 7 7 7 7 7 7 7 7 7 7 7 * * * * * * - - - - - - 8 8 8 8 8 8 < < < < < < 5 5 5 5 5 5         
 * ) ) ) ) )       @ @ @ @ @ @ ; ; ; ; ; ; ; ; @ @ @ @ @ @            ? > > > > > ) ) ) ) ) ) %  
U U U U U U U 
U U Ur*   