"""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 RequestsWrapper 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: RequestsWrapper 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), ] class OpenAPIToolkit(BaseToolkit): """Toolkit for interacting with a OpenAPI api.""" json_agent: AgentExecutor requests_wrapper: RequestsWrapper 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] @classmethod def from_llm( cls, llm: BaseLLM, json_spec: JsonSpec, requests_wrapper: RequestsWrapper, **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)