a
    agA                     @  s"  d Z ddlmZ 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mZmZ dd	l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! ddl"m#Z#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dddG dd de#Z/dS )DAn agent designed to hold a conversation in addition to using tools.    )annotations)AnyListOptionalSequenceTuple)
deprecated)AgentAction)BaseCallbackManager)BaseLanguageModel)	AIMessageBaseMessageHumanMessage)BaseOutputParser)BasePromptTemplate)ChatPromptTemplateHumanMessagePromptTemplateMessagesPlaceholderSystemMessagePromptTemplate)BaseTool)Field)AgentAgentOutputParserConvoOutputParser)PREFIXSUFFIXTEMPLATE_TOOL_RESPONSE)validate_tools_single_input)LLMChainz0.1.0Zcreate_json_chat_agentz1.0)alternativeZremovalc                      s   e Zd ZU dZeedZded< eZ	ded< e
dddd	d
ZeddddZeddddZeddddZe
ddd fddZe
eeddfdddddddddZddd d!d"Ze
ddeedfd#dd$d%ddddd&d'	d(d)Z  ZS )*ConversationalChatAgentr   )default_factoryr   output_parserstrtemplate_tool_responser   )kwargsreturnc                 K  s   t  S Nr   )clsr'    r+   w/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain/agents/conversational_chat/base.py_get_default_output_parser+   s    z2ConversationalChatAgent._get_default_output_parser)r(   c                 C  s   t d S r)   )NotImplementedErrorselfr+   r+   r,   _agent_type/   s    z#ConversationalChatAgent._agent_typec                 C  s   dS )z]Prefix to append the observation with.

        Returns:
            "Observation: "
        zObservation: r+   r/   r+   r+   r,   observation_prefix3   s    z*ConversationalChatAgent.observation_prefixc                 C  s   dS )zVPrefix to append the llm call with.

        Returns:
            "Thought: "
        zThought:r+   r/   r+   r+   r,   
llm_prefix<   s    z"ConversationalChatAgent.llm_prefixzSequence[BaseTool]None)toolsr(   c                   s   t  | t| j| d S r)   )super_validate_toolsr   __name__)r*   r5   	__class__r+   r,   r7   E   s    z'ConversationalChatAgent._validate_toolsNzOptional[List[str]]zOptional[BaseOutputParser]r   )r5   system_messagehuman_messageinput_variablesr$   r(   c                 C  s   d dd |D }d dd |D }|p2|  }|j| d}	|	j||d}
|du rbg d	}t|td
dt|
tddg}t||dS )a  Create a prompt for the agent.

        Args:
            tools: The tools to use.
            system_message: The system message to use.
                Defaults to the PREFIX.
            human_message: The human message to use.
                Defaults to the SUFFIX.
            input_variables: The input variables to use. Defaults to None.
            output_parser: The output parser to use. Defaults to None.

        Returns:
            A PromptTemplate.
        
c                 S  s    g | ]}d |j  d|j qS )z> z: )namedescription.0Ztoolr+   r+   r,   
<listcomp>b       z9ConversationalChatAgent.create_prompt.<locals>.<listcomp>z, c                 S  s   g | ]
}|j qS r+   r?   rA   r+   r+   r,   rC   d   rD   )format_instructions)
tool_namesr5   N)inputchat_historyagent_scratchpadrI   )Zvariable_namerJ   )r=   messages)	joinr-   formatZget_format_instructionsr   Zfrom_templater   r   r   )r*   r5   r;   r<   r=   r$   Ztool_stringsrG   _output_parserrF   Zfinal_promptrK   r+   r+   r,   create_promptJ   s&    z%ConversationalChatAgent.create_promptzList[Tuple[AgentAction, str]]zList[BaseMessage])intermediate_stepsr(   c                 C  sF   g }|D ]8\}}| t|jd t| jj|dd}| | q|S )zJConstruct the scratchpad that lets the agent continue its thought process.)content)observation)appendr   logr   r&   rM   )r0   rP   ZthoughtsactionrR   r<   r+   r+   r,   _construct_scratchpadv   s    z-ConversationalChatAgent._construct_scratchpadr   zOptional[BaseCallbackManager]zOptional[AgentOutputParser]r   )	llmr5   callback_managerr$   r;   r<   r=   r'   r(   c                 K  s\   |  | |p|  }	| j|||||	d}
t||
|d}dd |D }| f |||	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.
            system_message: The system message to use. Default is PREFIX.
            human_message: The human message to use. Default is SUFFIX.
            input_variables: The input variables to use. Default is None.
            **kwargs: Any additional arguments.

        Returns:
            An agent.
        )r;   r<   r=   r$   )rW   promptrX   c                 S  s   g | ]
}|j qS r+   rE   rA   r+   r+   r,   rC      rD   z>ConversationalChatAgent.from_llm_and_tools.<locals>.<listcomp>)	llm_chainZallowed_toolsr$   )r7   r-   rO   r    )r*   rW   r5   rX   r$   r;   r<   r=   r'   rN   rY   rZ   rG   r+   r+   r,   from_llm_and_tools   s,    
z*ConversationalChatAgent.from_llm_and_tools)r8   
__module____qualname____doc__r   r   r$   __annotations__r   r&   classmethodr-   propertyr1   r2   r3   r7   r   r   rO   rV   r[   __classcell__r+   r+   r9   r,   r"   "   s6   
+r"   N)0r^   
__future__r   typingr   r   r   r   r   Zlangchain_core._apir	   Zlangchain_core.agentsr
   Zlangchain_core.callbacksr   Zlangchain_core.language_modelsr   Zlangchain_core.messagesr   r   r   Zlangchain_core.output_parsersr   Zlangchain_core.promptsr   Zlangchain_core.prompts.chatr   r   r   r   Zlangchain_core.toolsr   Zpydanticr   Zlangchain.agents.agentr   r   Z2langchain.agents.conversational_chat.output_parserr   Z+langchain.agents.conversational_chat.promptr   r   r   Zlangchain.agents.utilsr   Zlangchain.chainsr    r"   r+   r+   r+   r,   <module>   s&   