Source code for langchain.agents.agent_toolkits.openapi.toolkit

"""Requests toolkit."""
from __future__ import annotations

from typing import Any, List

from langchain.agents.agent import AgentExecutor
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.agents.agent_toolkits.json.base import create_json_agent
from langchain.agents.agent_toolkits.json.toolkit import JsonToolkit
from langchain.agents.agent_toolkits.openapi.prompt import DESCRIPTION
from langchain.agents.tools import Tool
from langchain.llms.base import BaseLLM
from langchain.requests import TextRequestsWrapper
from langchain.tools import BaseTool
from langchain.tools.json.tool import JsonSpec
from langchain.tools.requests.tool import (
    RequestsDeleteTool,
    RequestsGetTool,
    RequestsPatchTool,
    RequestsPostTool,
    RequestsPutTool,
)


class RequestsToolkit(BaseToolkit):
    """Toolkit for making requests."""

    requests_wrapper: TextRequestsWrapper

    def get_tools(self) -> List[BaseTool]:
        """Return a list of tools."""
        return [
            RequestsGetTool(requests_wrapper=self.requests_wrapper),
            RequestsPostTool(requests_wrapper=self.requests_wrapper),
            RequestsPatchTool(requests_wrapper=self.requests_wrapper),
            RequestsPutTool(requests_wrapper=self.requests_wrapper),
            RequestsDeleteTool(requests_wrapper=self.requests_wrapper),
        ]


[docs]class OpenAPIToolkit(BaseToolkit): """Toolkit for interacting with a OpenAPI api.""" json_agent: AgentExecutor requests_wrapper: TextRequestsWrapper
[docs] def get_tools(self) -> List[BaseTool]: """Get the tools in the toolkit.""" json_agent_tool = Tool( name="json_explorer", func=self.json_agent.run, description=DESCRIPTION, ) request_toolkit = RequestsToolkit(requests_wrapper=self.requests_wrapper) return [*request_toolkit.get_tools(), json_agent_tool]
[docs] @classmethod def from_llm( cls, llm: BaseLLM, json_spec: JsonSpec, requests_wrapper: TextRequestsWrapper, **kwargs: Any, ) -> OpenAPIToolkit: """Create json agent from llm, then initialize.""" json_agent = create_json_agent(llm, JsonToolkit(spec=json_spec), **kwargs) return cls(json_agent=json_agent, requests_wrapper=requests_wrapper)