
    NgA                    J   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           G 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.0create_json_chat_agentz1.0)alternativeremovalc                      e Zd ZU dZ ee          Zded<   	 eZ	ded<   	 e
d%d
            Zed&d            Zed&d            Zed&d            Ze
d' fd            Ze
eeddfd(d            Zd)dZe
ddeedfd*d$            Z xZS )+ConversationalChatAgentr   )default_factoryr   output_parserstrtemplate_tool_responsekwargsr   returnc                    t                      S Nr   )clsr+   s     e/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/agents/conversational_chat/base.py_get_default_output_parserz2ConversationalChatAgent._get_default_output_parser+   s     """    c                    t           r.   )NotImplementedErrorselfs    r0   _agent_typez#ConversationalChatAgent._agent_type/   s    !!r2   c                    dS )z]Prefix to append the observation with.

        Returns:
            "Observation: "
        zObservation:  r5   s    r0   observation_prefixz*ConversationalChatAgent.observation_prefix3   s	     r2   c                    dS )zVPrefix to append the llm call with.

        Returns:
            "Thought: "
        zThought:r9   r5   s    r0   
llm_prefixz"ConversationalChatAgent.llm_prefix<   s	     zr2   toolsSequence[BaseTool]Nonec                t    t                                          |           t          | j        |           d S r.   )super_validate_toolsr    __name__)r/   r=   	__class__s     r0   rB   z'ConversationalChatAgent._validate_toolsE   s3    &&&#CL%88888r2   Nsystem_messagehuman_messageinput_variablesOptional[List[str]]Optional[BaseOutputParser]r   c                   d                     d |D                       }d                     d |D                       }|p|                                 }|                    |                                          }	|	                    ||          }
|g d}t	          j        |          t          d	
          t          j        |
          t          d
          g}t          ||          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                2    g | ]}d |j          d|j         S )z> z: )namedescription.0tools     r0   
<listcomp>z9ConversationalChatAgent.create_prompt.<locals>.<listcomp>b   s.    DDDd1$)11t/11DDDr2   z, c                    g | ]	}|j         
S r9   rM   rO   s     r0   rR   z9ConversationalChatAgent.create_prompt.<locals>.<listcomp>d   s    <<<d	<<<r2   )format_instructions)
tool_namesr=   N)inputchat_historyagent_scratchpadrX   )variable_namerY   )rG   messages)	joinr1   formatget_format_instructionsr   from_templater   r   r   )r/   r=   rE   rF   rG   r(   tool_stringsrV   _output_parserrU   final_promptr[   s               r0   create_promptz%ConversationalChatAgent.create_promptJ   s   . yyDDeDDD
 
 YY<<e<<<==
&J#*H*H*J*J+22 . F F H H 3 
 
 +11! 2 
 
 "KKKO'5nEEn===&4\BB.@AAA	
 "/HUUUUr2   intermediate_stepsList[Tuple[AgentAction, str]]List[BaseMessage]c                    g }|D ]k\  }}|                     t          |j                             t          | j                            |                    }|                     |           l|S )zJConstruct the scratchpad that lets the agent continue its thought process.)content)observation)appendr   logr   r*   r]   )r6   rd   thoughtsactionri   rF   s         r0   _construct_scratchpadz-ConversationalChatAgent._construct_scratchpadv   s     ')#5 	+ 	+FKOOIfj999:::(3::{:SS  M OOM****r2   llmr   callback_managerOptional[BaseCallbackManager]Optional[AgentOutputParser]r   c                    |                      |           |p|                                 }	|                     |||||	          }
t          ||
|          }d |D             } | 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.
            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.
        )rE   rF   rG   r(   )ro   promptrp   c                    g | ]	}|j         
S r9   rT   rO   s     r0   rR   z>ConversationalChatAgent.from_llm_and_tools.<locals>.<listcomp>   s    222Ddi222r2   )	llm_chainallowed_toolsr(   r9   )rB   r1   rc   r!   )r/   ro   r=   rp   r(   rE   rF   rG   r+   ra   rt   rv   rV   s                r0   from_llm_and_toolsz*ConversationalChatAgent.from_llm_and_tools   s    6 	E"""&J#*H*H*J*J"")'+( # 
 
 -
 
 
	
 32E222
s 
$(
 
 	
 
 	
r2   )r+   r   r,   r   )r,   r)   )r=   r>   r,   r?   )r=   r>   rE   r)   rF   r)   rG   rH   r(   rI   r,   r   )rd   re   r,   rf   )ro   r   r=   r>   rp   rq   r(   rr   rE   r)   rF   r)   rG   rH   r+   r   r,   r   )rC   
__module____qualname____doc__r   r   r(   __annotations__r   r*   classmethodr1   propertyr7   r:   r<   rB   r   r   rc   rn   rx   __classcell__)rD   s   @r0   r&   r&   "   s        NN',u=N'O'O'OMOOOO&"88888)# # # [# " " " X"    X    X 9 9 9 9 9 [9  %#/348)V )V )V )V [)VV    
 ;?59$#/3.
 .
 .
 .
 [.
 .
 .
 .
 .
r2   r&   N)0r{   
__future__r   typingr   r   r   r   r	   langchain_core._apir
   langchain_core.agentsr   langchain_core.callbacksr   langchain_core.language_modelsr   langchain_core.messagesr   r   r   langchain_core.output_parsersr   langchain_core.promptsr   langchain_core.prompts.chatr   r   r   r   langchain_core.toolsr   pydanticr   langchain.agents.agentr   r   2langchain.agents.conversational_chat.output_parserr   +langchain.agents.conversational_chat.promptr   r   r   langchain.agents.utilsr    langchain.chainsr!   r&   r9   r2   r0   <module>r      s   J J " " " " " " 7 7 7 7 7 7 7 7 7 7 7 7 7 7 * * * * * * - - - - - - 8 8 8 8 8 8 < < < < < < H H H H H H H H H H : : : : : : 5 5 5 5 5 5            * ) ) ) ) )       ; ; ; ; ; ; ; ; P P P P P P         
 ? > > > > > % % % % % % G!95IIIO
 O
 O
 O
 O
e O
 O
 JIO
 O
 O
r2   