
    Ng                       d 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 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 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$  e	ded           G d de                      Z%dS )zDAn agent designed to hold a conversation in addition to using tools.    )annotations)AnyListOptionalSequence)
deprecated)BaseCallbackManager)BaseLanguageModel)PromptTemplate)BaseTool)Field)AGENT_DEPRECATION_WARNING)AgentAgentOutputParser)	AgentTypeConvoOutputParser)FORMAT_INSTRUCTIONSPREFIXSUFFIX)validate_tools_single_input)LLMChainz0.1.0z1.0)messageremovalc            	          e Zd ZU dZdZded<   	  ee          Zded<   	 e		 d$d%d            Z
ed&d            Zed&d            Zed&d            Ze	eeedddfd'd            Ze	d( fd            Ze	ddeeedddfd)d#            Z xZS )*ConversationalAgentz>An agent that holds a conversation in addition to using tools.AIstr	ai_prefix)default_factoryr   output_parserkwargsr   returnc                "    t          |          S )Nr   r   )clsr   r"   s      `/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/agents/conversational/base.py_get_default_output_parserz.ConversationalAgent._get_default_output_parser$   s     !95555    c                    t           j        S )z Return Identifier of agent type.)r    CONVERSATIONAL_REACT_DESCRIPTIONselfs    r'   _agent_typezConversationalAgent._agent_type*   s     99r)   c                    dS )z]Prefix to append the observation with.

        Returns:
            "Observation: "
        zObservation:  r,   s    r'   observation_prefixz&ConversationalAgent.observation_prefix/   s	     r)   c                    dS )zVPrefix to append the llm call with.

        Returns:
            "Thought: "
        zThought:r0   r,   s    r'   
llm_prefixzConversationalAgent.llm_prefix8   s	     zr)   HumanNtoolsSequence[BaseTool]prefixsuffixformat_instructionshuman_prefixinput_variablesOptional[List[str]]r   c                   d                     d |D                       }d                     d |D                       }	|                    |	||          }d                     ||||g          }
|g d}t          |
|	          S )
au  Create prompt in the style of the zero-shot agent.

        Args:
            tools: List of tools the agent will have access to, used to format the
                prompt.
            prefix: String to put before the list of tools. Defaults to PREFIX.
            suffix: String to put after the list of tools. Defaults to SUFFIX.
            format_instructions: Instructions on how to use the tools. Defaults to
                FORMAT_INSTRUCTIONS
            ai_prefix: String to use before AI output. Defaults to "AI".
            human_prefix: String to use before human output.
                Defaults to "Human".
            input_variables: List of input variables the final prompt will expect.
                Defaults to ["input", "chat_history", "agent_scratchpad"].

        Returns:
            A PromptTemplate with the template assembled from the pieces here.
        
c                2    g | ]}d |j          d|j         S )z> z: )namedescription.0tools     r'   
<listcomp>z5ConversationalAgent.create_prompt.<locals>.<listcomp>_   s.    DDDd1$)11t/11DDDr)   z, c                    g | ]	}|j         
S r0   r@   rB   s     r'   rE   z5ConversationalAgent.create_prompt.<locals>.<listcomp>a   s    <<<d	<<<r)   )
tool_namesr   r:   z

N)inputchat_historyagent_scratchpad)templater;   )joinformatr   )r&   r5   r7   r8   r9   r   r:   r;   tool_stringsrH   rL   s              r'   create_promptz!ConversationalAgent.create_promptA   s    : yyDDeDDD
 
 YY<<e<<<==
188!Y\ 9 
 
 ;;6I6RSS"KKKOxQQQQr)   Nonec                t    t                                          |           t          | j        |           d S )N)super_validate_toolsr   __name__)r&   r5   	__class__s     r'   rT   z#ConversationalAgent._validate_toolsj   s3    &&&#CL%88888r)   llmr
   callback_managerOptional[BaseCallbackManager]Optional[AgentOutputParser]r   c           	         |                      |           |                     |||	||||
          }t          |||          }d |D             }|p|                     |          } | d||||d|S )a  Construct an agent from an LLM and tools.

        Args:
            llm: The language model to use.
            tools: A list of tools to use.
            callback_manager: The callback manager to use. Default is None.
            output_parser: The output parser to use. Default is None.
            prefix: The prefix to use in the prompt. Default is PREFIX.
            suffix: The suffix to use in the prompt. Default is SUFFIX.
            format_instructions: The format instructions to use.
                Default is FORMAT_INSTRUCTIONS.
            ai_prefix: The prefix to use before AI output. Default is "AI".
            human_prefix: The prefix to use before human output.
                Default is "Human".
            input_variables: The input variables to use. Default is None.
            **kwargs: Any additional keyword arguments to pass to the agent.

        Returns:
            An agent.
        )r   r:   r7   r8   r9   r;   )rW   promptrX   c                    g | ]	}|j         
S r0   rG   rB   s     r'   rE   z:ConversationalAgent.from_llm_and_tools.<locals>.<listcomp>   s    222Ddi222r)   r%   )	llm_chainallowed_toolsr   r!   r0   )rT   rP   r   r(   )r&   rW   r5   rX   r!   r7   r8   r9   r   r:   r;   r"   r\   r^   rH   _output_parsers                   r'   from_llm_and_toolsz&ConversationalAgent.from_llm_and_toolso   s    F 	E"""""% 3+ # 
 
 -
 
 
	
 32E222
& 
#*H*H +I +
 +
 s 
$(	
 

 
 
 	
r)   )r   )r   r   r"   r   r#   r   )r#   r   )r5   r6   r7   r   r8   r   r9   r   r   r   r:   r   r;   r<   r#   r   )r5   r6   r#   rQ   )rW   r
   r5   r6   rX   rY   r!   rZ   r7   r   r8   r   r9   r   r   r   r:   r   r;   r<   r"   r   r#   r   )rU   
__module____qualname____doc__r   __annotations__r   r   r!   classmethodr(   propertyr.   r1   r3   r   r   r   rP   rT   ra   __classcell__)rV   s   @r'   r   r      s         IHI)',u=N'O'O'OMOOOO&"6 6 6 6 [6
 : : : X:    X    X  #6#/3&R &R &R &R [&RP 9 9 9 9 9 [9 
 ;?59#6#/3;
 ;
 ;
 ;
 [;
 ;
 ;
 ;
 ;
r)   r   N)&rd   
__future__r   typingr   r   r   r   langchain_core._apir   langchain_core.callbacksr	   langchain_core.language_modelsr
   langchain_core.promptsr   langchain_core.toolsr   pydanticr   langchain._api.deprecationr   langchain.agents.agentr   r   langchain.agents.agent_typesr   -langchain.agents.conversational.output_parserr   &langchain.agents.conversational.promptr   r   r   langchain.agents.utilsr   langchain.chainsr   r   r0   r)   r'   <module>rx      s   J J " " " " " " 0 0 0 0 0 0 0 0 0 0 0 0 * * * * * * 8 8 8 8 8 8 < < < < < < 1 1 1 1 1 1 ) ) ) ) ) )       @ @ @ @ @ @ ; ; ; ; ; ; ; ; 2 2 2 2 2 2 K K K K K K V V V V V V V V V V > > > > > > % % % % % % %  
O
 O
 O
 O
 O
% O
 O
 
O
 O
 O
r)   