
    3fid                        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 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 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)    )Sequence)Any)
deprecated)AgentAction)BaseCallbackManager)BaseLanguageModel)BasePromptTemplate)ChatPromptTemplateHumanMessagePromptTemplateSystemMessagePromptTemplate)BaseTool)Field)override)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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
   dz  defd       Zeddeeeedfdedee   de dz  dedz  de
de
de
de
dee
   dz  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    `/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_classic/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                 n    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__s       r&   r.   zChatAgent._construct_scratchpad4   sQ     !789KL*C0>CS/!11A0BD
  r(   kwargsc                     t               S Nr   )clsr5   s     r&   _get_default_output_parserz$ChatAgent._get_default_output_parserD   s      !!r(   toolsNc                 R    t         |   |       t        | j                  |       y )N)
class_namer:   )r-   _validate_toolsr   __name__)r8   r:   r4   s     r&   r=   zChatAgent._validate_toolsI   s    &#s||5Ir(   c                     dgS )NzObservation:r#   r$   s    r&   _stopzChatAgent._stopN   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| d| d| }
t	        j
                  |
      t        j
                  |      g}|ddg}t        ||      S c c}w c c}w )	a  Create a prompt from a list of tools.

        Args:
            tools: A list of tools.
            system_message_prefix: The system message prefix.
            system_message_suffix: The system message suffix.
            human_message: The `HumanMessage`.
            format_instructions: The format instructions.
            input_variables: The input variables.

        Returns:
            A prompt template.
        
z: z, )
tool_namesz

inputr2   )rE   messages)joinnamedescriptionformatr   from_templater   r
   )r8   r:   rA   rB   rC   rD   rE   tooltool_stringsrH   templaterJ   s               r&   create_promptzChatAgent.create_promptR   s    . yyQV!WTYYKr$2B2B1C"D!WXYYe<d		<=
188J8O$%TnD"#4$%' 	 (55h?&44]C
 "&(:;O!/HUU "X<s   "B>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.
            output_parser: The output parser.
            system_message_prefix: The system message prefix.
            system_message_suffix: The system message suffix.
            human_message: The `HumanMessage`.
            format_instructions: The format instructions.
            input_variables: The input variables.
            kwargs: Additional keyword arguments.

        Returns:
            An agent.
        )rA   rB   rC   rD   rE   )rT   promptrU   )	llm_chainallowed_toolsr    r#   )r=   rS   r   rL   r9   )r8   rT   r:   rU   r    rA   rB   rC   rD   rE   r5   rW   rX   rP   rH   _output_parsers                   r&   from_llm_and_toolszChatAgent.from_llm_and_toolsz   s    > 	E""""7"7' 3+ # 
 -
	
 -22Ddii2
2&J#*H*H*J 
$(
 	
 	
 3s   A0c                     t         r7   )r1   r$   s    r&   _agent_typezChatAgent._agent_type   s    r(   )%r>   
__module____qualname____doc__r   r   r    r   __annotations__propertyr0   r'   r*   listtupler   r.   classmethodr   r   r9   r   r   r=   r@   r   r   r   r   r	   rS   r   r   r   r[   r]   __classcell__)r4   s   @r&   r   r      s7    ',=M'NM$N&C   C    {C'7!89  
   "# ":K "  " JHX$6 J4 J J  tCy      &;%:*#6,0%V!%V  #%V  #	%V
 %V !%V cT)%V 
%V %VN 
 8<26%:%:*#6,03
3
 !3
 .4	3

 )4/3
  #3
  #3
 3
 !3
 cT)3
 3
 
3
 3
j S  r(   r   N))collections.abcr   typingr   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   typing_extensionsr   "langchain_classic._api.deprecationr   langchain_classic.agents.agentr   r   +langchain_classic.agents.chat.output_parserr   $langchain_classic.agents.chat.promptr   r   r   r   langchain_classic.agents.utilsr   langchain_classic.chains.llmr   r   r#   r(   r&   <module>rx      sw    $  * - 8 < 5 
 *  & H C H  G 1 %
N N
Nr(   