Spaces:
Running
Running
| from pathlib import Path | |
| import yaml | |
| from langchain.agents import AgentExecutor | |
| from langchain_community.agent_toolkits import create_openapi_agent | |
| from langchain_community.agent_toolkits.openapi.toolkit import OpenAPIToolkit | |
| from langchain_community.tools.json.tool import JsonSpec | |
| from langchain_community.utilities.requests import TextRequestsWrapper | |
| from langflow.base.agents.agent import LCAgentComponent | |
| from langflow.inputs import BoolInput, FileInput, HandleInput | |
| class OpenAPIAgentComponent(LCAgentComponent): | |
| display_name = "OpenAPI Agent" | |
| description = "Agent to interact with OpenAPI API." | |
| name = "OpenAPIAgent" | |
| icon = "LangChain" | |
| inputs = [ | |
| *LCAgentComponent._base_inputs, | |
| HandleInput(name="llm", display_name="Language Model", input_types=["LanguageModel"], required=True), | |
| FileInput(name="path", display_name="File Path", file_types=["json", "yaml", "yml"], required=True), | |
| BoolInput(name="allow_dangerous_requests", display_name="Allow Dangerous Requests", value=False, required=True), | |
| ] | |
| def build_agent(self) -> AgentExecutor: | |
| path = Path(self.path) | |
| if path.suffix in {"yaml", "yml"}: | |
| with path.open(encoding="utf-8") as file: | |
| yaml_dict = yaml.safe_load(file) | |
| spec = JsonSpec(dict_=yaml_dict) | |
| else: | |
| spec = JsonSpec.from_file(path) | |
| requests_wrapper = TextRequestsWrapper() | |
| toolkit = OpenAPIToolkit.from_llm( | |
| llm=self.llm, | |
| json_spec=spec, | |
| requests_wrapper=requests_wrapper, | |
| allow_dangerous_requests=self.allow_dangerous_requests, | |
| ) | |
| agent_args = self.get_agent_kwargs() | |
| # This is bit weird - generally other create_*_agent functions have max_iterations in the | |
| # `agent_executor_kwargs`, but openai has this parameter passed directly. | |
| agent_args["max_iterations"] = agent_args["agent_executor_kwargs"]["max_iterations"] | |
| del agent_args["agent_executor_kwargs"]["max_iterations"] | |
| return create_openapi_agent(llm=self.llm, toolkit=toolkit, **agent_args) | |