
    h{
                        d 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  G d
 de	      Zy)zHTool for interacting with a single API with natural language definition.    )annotations)AnyOptional)BaseLanguageModel)Tool)OpenAPIEndpointChain)APIOperation)OpenAPISpec)Requestsc                  j    e Zd ZdZe	 	 	 	 	 	 dd       Ze	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Zy)NLAToolzNatural Language API Tool.c                    |j                  dd       d|j                  j                   }d| d|j                  j                   } | ||j                  |      S )zConvert an endpoint chain to an API endpoint tool.

        Args:
            chain: The endpoint chain.
            api_title: The title of the API.

        Returns:
            The API endpoint tool.
         _.zI'm an AI from zG. Instruct what you want, and I'll assist via an API with description: )namefuncdescription)replaceapi_operationoperation_idr   run)clschain	api_titleexpanded_namer   s        i/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/agent_toolkits/nla/tool.pyfrom_open_api_endpoint_chainz$NLATool.from_open_api_endpoint_chain   sq       c*+1U-@-@-M-M,NO 	 i[ )##//02 	
 EII;OO    Nc                    t        j                  |||      }	t        j                  |	|f|||d|}
| j	                  |
|j
                  j                        S )a<  Instantiate the tool from the specified path and method.

        Args:
            llm: The language model to use.
            path: The path of the API.
            method: The method of the API.
            spec: The OpenAPI spec.
            requests: Optional requests object. Default is None.
            verbose: Whether to print verbose output. Default is False.
            return_intermediate_steps: Whether to return intermediate steps.
                Default is False.
            kwargs: Additional arguments.

        Returns:
            The tool.
        )requestsverbosereturn_intermediate_steps)r	   from_openapi_specr   from_api_operationr   infotitle)r   llmpathmethodspecr!   r"   r#   kwargsr   r   s              r   from_llm_and_methodzNLATool.from_llm_and_method*   se    8 %66tT6J$77
 &?
 
 //tyyGGr   )r   r   r   strreturn	'NLATool')NFF)r(   r   r)   r.   r*   r.   r+   r
   r!   zOptional[Requests]r"   boolr#   r1   r,   r   r/   r0   )__name__
__module____qualname____doc__classmethodr   r-    r   r   r   r      s    $P(P58P	P P,  (,*/$H$H $H 	$H
 $H %$H $H $($H $H 
$H $Hr   r   N)r5   
__future__r   typingr   r   langchain_core.language_modelsr   langchain_core.toolsr   (langchain_community.chains.openapi.chainr   2langchain_community.tools.openapi.utils.api_modelsr	   5langchain_community.tools.openapi.utils.openapi_utilsr
   &langchain_community.utilities.requestsr   r   r7   r   r   <module>r@      s.    N "   < % I K M ;?Hd ?Hr   