Ë
    ´ŒjÛ  ã                  ó
  — d 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 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%y)zDAn agent designed to hold a conversation in addition to using tools.é    )Úannotations)ÚSequence)ÚAnyÚOptional)Ú
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            	      óD  ‡ — 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_parserc                ó   — t        |¬«      S )N©r   r   )Úclsr   Úkwargss      ún/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain/agents/conversational/base.pyÚ_get_default_output_parserz.ConversationalAgent._get_default_output_parser%   s   € ô !¨9Ô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Ñ9Ð9r'   c                 ó   — y)z]Prefix to append the observation with.

        Returns:
            "Observation: "
        zObservation: © r*   s    r%   Úobservation_prefixz&ConversationalAgent.observation_prefix2   s   € ð r'   c                 ó   — y)zVPrefix to append the llm call with.

        Returns:
            "Thought: "
        zThought:r.   r*   s    r%   Ú
llm_prefixzConversationalAgent.llm_prefix;   s   € ð r'   ÚHumanNc           	     óB  — dj                  |D �cg c]  }d|j                  › d|j                  › �‘Œ  c}«      }	dj                  |D �cg c]  }|j                  ‘Œ c}«      }
|j                  |
||¬«      }|› d|	› d|› d|› �}|€g d¢}t	        ||¬«      S c c}w c c}w )	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.
        Ú
z> z: z, )Ú
tool_namesr   Úhuman_prefixz

)ÚinputÚchat_historyÚagent_scratchpad)ÚtemplateÚinput_variables)ÚjoinÚnameÚdescriptionÚformatr
   )r#   ÚtoolsÚprefixÚsuffixÚformat_instructionsr   r6   r;   ÚtoolÚtool_stringsr5   r:   s               r%   Úcreate_promptz!ConversationalAgent.create_promptD   s¿   € ð: —y‘yÙ>CÓD¹e°dˆr�$—)‘)�˜B˜t×/Ñ/Ð0Ò1¸eÑDó
ˆð —Y‘Y±eÓ<±e¨d §	£	°eÑ<Ó=ˆ
Ø1×8Ñ8Ø!ØØ%ð 9ó 
Ðð
 �X˜T , ¨tÐ4GÐ3HÈÈVÈHÐUˆØÐ"ÚKˆOÜ xÀÔQÐQùò Eùâ<s   �#BÁ	Bc                óP   •— t         ‰| �  |«       t        | j                  |«       y )N)ÚsuperÚ_validate_toolsr   Ú__name__)r#   r@   Ú	__class__s     €r%   rI   z#ConversationalAgent._validate_toolso   s   ø€ ä‰Ñ Ô&Ü# C§L¡L°%Õ8r'   c           	     óò   — | 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 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   r6   rA   rB   rC   r;   )ÚllmÚpromptÚcallback_managerr"   )Ú	llm_chainÚallowed_toolsr   r    r.   )rI   rF   r   r=   r&   )r#   rM   r@   rO   r    rA   rB   rC   r   r6   r;   r$   rN   rP   rD   r5   Ú_output_parsers                    r%   Úfrom_llm_and_toolsz&ConversationalAgent.from_llm_and_toolst   s»   € ðF 	×Ñ˜EÔ"Ø×"Ñ"ØØØ%ØØØ 3Ø+ð #ó 
ˆô ØØØ-ô
ˆ	ñ
 -2Ó2©E D�d—i“i¨Eˆ
Ð2Ø&ò 
¨#×*HÑ*HØð +Ió +
ˆñ ð 
ØØ$ØØ(ñ	
ð
 ñ
ð 	
ùò	 3s   ¼A4)r   )r   r   r$   r   Úreturnr   )rT   r   )r@   úSequence[BaseTool]rA   r   rB   r   rC   r   r   r   r6   r   r;   úOptional[list[str]]rT   r
   )r@   rU   rT   ÚNone)rM   r	   r@   rU   rO   zOptional[BaseCallbackManager]r    zOptional[AgentOutputParser]rA   r   rB   r   rC   r   r   r   r6   r   r;   rV   r$   r   rT   r   )rJ   Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r    Úclassmethodr&   Úpropertyr,   r/   r1   r   r   r   rF   rI   rS   Ú__classcell__)rK   s   @r%   r   r      sÒ  ø… ñ Ià€IˆsÓØ)Ù',Ð=NÔ'O€MÐ$ÓOØ&àð ð6àð6ð ð6ð 
ò	6ó ð6ð ò:ó ð:ð òó ðð òó ðð ð ØØ#6ØØ#Ø/3ð(Rà!ð(Rð ð(Rð ð	(Rð
 !ð(Rð ð(Rð ð(Rð -ð(Rð 
ò(Ró ð(RðT ô9ó ð9ð ð
 ;?Ø59ØØØ#6ØØ#Ø/3ð;
àð;
ð "ð;
ð 8ð	;
ð
 3ð;
ð ð;
ð ð;
ð !ð;
ð ð;
ð ð;
ð -ð;
ð ð;
ð 
ò;
ó ô;
r'   r   N)&rZ   Ú
__future__r   Úcollections.abcr   Útypingr   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   r.   r'   r%   Ú<module>ro      sg   ðÙ Jå "å $ß  å *Ý 8Ý <Ý 1Ý )Ý å @ß ;Ý 2Ý Kß VÑ VÝ >Ý %ñ ØØ%Øôô
S
˜%ó S
óñ
S
r'   