§
    è˜ºhz
  ã                   óŽ   — 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 d	ed
ee         dede	fd„ZdS )é    )ÚSequence©Úformat_tool_to_openai_tool)ÚBaseLanguageModel)ÚChatPromptTemplate)ÚRunnableÚRunnablePassthrough)ÚBaseTool©Úformat_to_openai_tool_messages)ÚOpenAIToolsAgentOutputParserÚllmÚtoolsÚpromptÚreturnc                 óú   — dh                      |j        ¦  «        }|rt          d|› �¦  «        ‚|                      d„ |D ¦   «         ¬¦  «        }t	          j        d„ ¬¦  «        |z  |z  t          ¦   «         z  }|S )a¡  Create an agent that uses OpenAI tools.

    Examples:


        .. code-block:: python

            from langchain import hub
            from langchain_community.chat_models import ChatOpenAI
            from langchain.agents import AgentExecutor, create_openai_tools_agent

            prompt = hub.pull("hwchase17/openai-tools-agent")
            model = ChatOpenAI()
            tools = ...

            agent = create_openai_tools_agent(model, tools, prompt)
            agent_executor = AgentExecutor(agent=agent, tools=tools)

            agent_executor.invoke({"input": "hi"})

            # Using with chat history
            from langchain_core.messages import AIMessage, HumanMessage
            agent_executor.invoke(
                {
                    "input": "what's my name?",
                    "chat_history": [
                        HumanMessage(content="hi! my name is bob"),
                        AIMessage(content="Hello Bob! How can I assist you today?"),
                    ],
                }
            )

    Args:
        llm: LLM to use as the agent.
        tools: Tools this agent has access to.
        prompt: The prompt to use, must have input keys of `agent_scratchpad`.

    Returns:
        A runnable sequence representing an agent. It takes as input all the same input
        variables as the prompt passed in does. It returns as output either an
        AgentAction or AgentFinish.

    Úagent_scratchpadz#Prompt missing required variables: c                 ó,   — g | ]}t          |¦  «        ‘ŒS © r   )Ú.0Útools     új/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain/agents/openai_tools/base.pyú
<listcomp>z-create_openai_tools_agent.<locals>.<listcomp>B   s!   € ÐBÐBÐB°DÕ)¨$Ñ/Ô/ÐBÐBÐBó    )r   c                 ó,   — t          | d         ¦  «        S )NÚintermediate_stepsr   )Úxs    r   ú<lambda>z+create_openai_tools_agent.<locals>.<lambda>G   s   € Õ'EØÐ&Ô'ñ(ô (€ r   )r   )Ú
differenceÚinput_variablesÚ
ValueErrorÚbindr	   Úassignr   )r   r   r   Úmissing_varsÚllm_with_toolsÚagents         r   Úcreate_openai_tools_agentr'      s¸   € ð\ 'Ð'×2Ò2°6Ô3IÑJÔJ€LØð OÝÐM¸|ÐMÐMÑNÔNÐNà—X’XØBÐB¸EÐBÑBÔBð ñ ô €Nõ
 	Ô"ðð ð	
ñ 	
ô 	
ð
 ñ	ð ñ	õ 'Ñ
(Ô
(ñ	)ð 
ð €Lr   N)Útypingr   Ú+langchain_community.tools.convert_to_openair   Úlangchain_core.language_modelsr   Úlangchain_core.prompts.chatr   Úlangchain_core.runnablesr   r	   Úlangchain_core.toolsr
   Ú/langchain.agents.format_scratchpad.openai_toolsr   Ú,langchain.agents.output_parsers.openai_toolsr   r'   r   r   r   ú<module>r0      s÷   ðØ Ð Ð Ð Ð Ð à RÐ RÐ RÐ RÐ RÐ RØ <Ð <Ð <Ð <Ð <Ð <Ø :Ð :Ð :Ð :Ð :Ð :Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð VÐ UÐ UÐ UÐ UÐ Uð@Ø	ð@Ø#+¨HÔ#5ð@Ø?Qð@àð@ð @ð @ð @ð @ð @r   