From abbba6c7d831b4d7fc6ad7e091c579815c122dd9 Mon Sep 17 00:00:00 2001 From: Arnaud Gelas Date: Tue, 5 Dec 2023 05:27:22 +0100 Subject: [PATCH] openapi/planner.py: Deal with json in markdown output cases (#13576) - **Description:** In openapi/planner deal with json in markdown output cases - **Issue:** In some cases LLMs could return json in markdown which can't be loaded. - **Dependencies:** - **Tag maintainer:** @eyurtsev - **Twitter handle:** --------- Co-authored-by: Harrison Chase --- .../agents/agent_toolkits/openapi/planner.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libs/langchain/langchain/agents/agent_toolkits/openapi/planner.py b/libs/langchain/langchain/agents/agent_toolkits/openapi/planner.py index 530418e2884..754201f5bdc 100644 --- a/libs/langchain/langchain/agents/agent_toolkits/openapi/planner.py +++ b/libs/langchain/langchain/agents/agent_toolkits/openapi/planner.py @@ -36,6 +36,7 @@ from langchain.callbacks.base import BaseCallbackManager from langchain.chains.llm import LLMChain from langchain.llms.openai import OpenAI from langchain.memory import ReadOnlySharedMemory +from langchain.output_parsers.json import parse_json_markdown from langchain.tools.base import BaseTool from langchain.tools.requests.tool import BaseRequestsTool from langchain.utilities.requests import RequestsWrapper @@ -80,7 +81,7 @@ class RequestsGetToolWithParsing(BaseRequestsTool, BaseTool): def _run(self, text: str) -> str: try: - data = json.loads(text) + data = parse_json_markdown(text) except json.JSONDecodeError as e: raise e data_params = data.get("params") @@ -110,7 +111,7 @@ class RequestsPostToolWithParsing(BaseRequestsTool, BaseTool): def _run(self, text: str) -> str: try: - data = json.loads(text) + data = parse_json_markdown(text) except json.JSONDecodeError as e: raise e response = self.requests_wrapper.post(data["url"], data["data"]) @@ -139,7 +140,7 @@ class RequestsPatchToolWithParsing(BaseRequestsTool, BaseTool): def _run(self, text: str) -> str: try: - data = json.loads(text) + data = parse_json_markdown(text) except json.JSONDecodeError as e: raise e response = self.requests_wrapper.patch(data["url"], data["data"]) @@ -168,7 +169,7 @@ class RequestsPutToolWithParsing(BaseRequestsTool, BaseTool): def _run(self, text: str) -> str: try: - data = json.loads(text) + data = parse_json_markdown(text) except json.JSONDecodeError as e: raise e response = self.requests_wrapper.put(data["url"], data["data"]) @@ -198,7 +199,7 @@ class RequestsDeleteToolWithParsing(BaseRequestsTool, BaseTool): def _run(self, text: str) -> str: try: - data = json.loads(text) + data = parse_json_markdown(text) except json.JSONDecodeError as e: raise e response = self.requests_wrapper.delete(data["url"])