Ë
    ´Œjï  ã            
       ó¼   — d dl Z d dlmZ d dlmZmZ d dlmZ dedef   dede	e
eef      f   fd„Zd	edee   f   dedee	e
eef         f   fd
„Zdededefd„Zy)é    N)Ú	Awaitable)ÚAnyÚCallable)ÚtoolÚfunc.Úreturnc                 óT   ‡ — dt         dt        t        t         t        f      fˆ fd„}|S )NÚxr   c                 ó   •— d ‰| «      dœgS ©NÚcustom_tool_call_output)ÚtypeÚoutput© )r
   r   s    €úl/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_openai/tools/custom_tool.pyÚwrappedz#_make_wrapped_func.<locals>.wrapped	   s   ø€ Ø2¹dÀ1»gÑFÐGÐGó    )ÚstrÚlistÚdictr   )r   r   s   ` r   Ú_make_wrapped_funcr      s-   ø€ ðH”3ð Hœ4¤¤S¬# X¡Ñ/õ Hð €Nr   Ú	coroutinec           	      ó`   ‡ — dt         dt         dt        t        t        t         f      fˆ fd„}|S )NÚargsÚkwargsr   c               Ÿ   ó<   •K  —  ‰| i |¤Žƒ d {  –—† }d|dœgS 7 Œ
­wr   r   )r   r   Úresultr   s      €r   r   z(_make_wrapped_coroutine.<locals>.wrapped   s,   øè ø€ Ù  $Ð1¨&Ñ1×1ˆØ2¸fÑEÐFÐFð 2ús   ƒ��)r   r   r   r   )r   r   s   ` r   Ú_make_wrapped_coroutiner      s5   ø€ ðGœSð G¬Cð G´D¼¼cÄ3¸h¹Ñ4Hõ Gð €Nr   r   r   c                  óx   ‡— dt         dt        f   dt        fˆfd„}| rt        | d   «      r‰s || d   «      S |S )aj  Decorator to create an OpenAI custom tool.

    Custom tools allow for tools with (potentially long) freeform string inputs.

    See below for an example using LangGraph:

    .. code-block:: python

        @custom_tool
        def execute_code(code: str) -> str:
            """Execute python code."""
            return "27"


        llm = ChatOpenAI(model="gpt-5", output_version="responses/v1")

        agent = create_react_agent(llm, [execute_code])

        input_message = {"role": "user", "content": "Use the tool to calculate 3^3."}
        for step in agent.stream(
            {"messages": [input_message]},
            stream_mode="values",
        ):
            step["messages"][-1].pretty_print()

    You can also specify a format for a corresponding context-free grammar using the
    ``format`` kwarg:

    .. code-block:: python

        from langchain_openai import ChatOpenAI, custom_tool
        from langgraph.prebuilt import create_react_agent

        grammar = """
        start: expr
        expr: term (SP ADD SP term)* -> add
        | term
        term: factor (SP MUL SP factor)* -> mul
        | factor
        factor: INT
        SP: " "
        ADD: "+"
        MUL: "*"
        %import common.INT
        """

        format = {"type": "grammar", "syntax": "lark", "definition": grammar}

        # highlight-next-line
        @custom_tool(format=format)
        def do_math(input_string: str) -> str:
            """Do a mathematical operation."""
            return "27"


        llm = ChatOpenAI(model="gpt-5", output_version="responses/v1")

        agent = create_react_agent(llm, [do_math])

        input_message = {"role": "user", "content": "Use the tool to calculate 3^3."}
        for step in agent.stream(
            {"messages": [input_message]},
            stream_mode="values",
        ):
            step["messages"][-1].pretty_print()
    r   .r   c                 ó  •— ddi}d‰v r‰j                  d«      |d<    t        dddi‰¤Ž| «      }||_        | j                  |_        t        j                  | «      rt        | «      |_        |S t        | «      |_
        |S )Nr   Úcustom_toolÚformatÚinfer_schemaFr   )Úpopr   ÚmetadataÚ__doc__ÚdescriptionÚinspectÚiscoroutinefunctionr   r   r   r   )r   r%   Útool_objr   s      €r   Ú	decoratorzcustom_tool.<locals>.decorator]   sŠ   ø€ Ø˜MÐ*ˆØ�vÑØ!'§¡¨HÓ!5ˆH�XÑØ5”4Ñ5 UÐ5¨fÑ5°dÓ;ˆØ$ˆÔØ#Ÿ|™|ˆÔÜ×&Ñ& tÔ,Ü!8¸Ó!>ˆHÔð ˆô /¨tÓ4ˆHŒMØˆr   r   )r   r   Úcallable)r   r   r+   s    ` r   r!   r!      sG   ø€ ðHœ ¤c Ñ*ð ¬sõ ñ ”˜˜a™Ô!©&Ù˜˜a™Ó!Ð!àÐr   )r(   Úcollections.abcr   Útypingr   r   Úlangchain_core.toolsr   r   r   r   r   r   r!   r   r   r   Ú<module>r0      s¢   ðÛ Ý %ß  å %ð˜X c¨3 hÑ/ð °H¸SÀ$ÀtÈCÐQTÈHÁ~ÑBVÐ=VÑ4Wó ðØ˜˜Y s™^Ð+Ñ,ðàˆc�9˜T $ s¨C x¡.Ñ1Ñ2Ð2Ñ3óðT�sð T cð T¨cô Tr   