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 <hw.chase.17@gmail.com>
This commit is contained in:
Arnaud Gelas 2023-12-05 05:27:22 +01:00 committed by GitHub
parent 8eab4d95c0
commit abbba6c7d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -36,6 +36,7 @@ from langchain.callbacks.base import BaseCallbackManager
from langchain.chains.llm import LLMChain from langchain.chains.llm import LLMChain
from langchain.llms.openai import OpenAI from langchain.llms.openai import OpenAI
from langchain.memory import ReadOnlySharedMemory from langchain.memory import ReadOnlySharedMemory
from langchain.output_parsers.json import parse_json_markdown
from langchain.tools.base import BaseTool from langchain.tools.base import BaseTool
from langchain.tools.requests.tool import BaseRequestsTool from langchain.tools.requests.tool import BaseRequestsTool
from langchain.utilities.requests import RequestsWrapper from langchain.utilities.requests import RequestsWrapper
@ -80,7 +81,7 @@ class RequestsGetToolWithParsing(BaseRequestsTool, BaseTool):
def _run(self, text: str) -> str: def _run(self, text: str) -> str:
try: try:
data = json.loads(text) data = parse_json_markdown(text)
except json.JSONDecodeError as e: except json.JSONDecodeError as e:
raise e raise e
data_params = data.get("params") data_params = data.get("params")
@ -110,7 +111,7 @@ class RequestsPostToolWithParsing(BaseRequestsTool, BaseTool):
def _run(self, text: str) -> str: def _run(self, text: str) -> str:
try: try:
data = json.loads(text) data = parse_json_markdown(text)
except json.JSONDecodeError as e: except json.JSONDecodeError as e:
raise e raise e
response = self.requests_wrapper.post(data["url"], data["data"]) response = self.requests_wrapper.post(data["url"], data["data"])
@ -139,7 +140,7 @@ class RequestsPatchToolWithParsing(BaseRequestsTool, BaseTool):
def _run(self, text: str) -> str: def _run(self, text: str) -> str:
try: try:
data = json.loads(text) data = parse_json_markdown(text)
except json.JSONDecodeError as e: except json.JSONDecodeError as e:
raise e raise e
response = self.requests_wrapper.patch(data["url"], data["data"]) response = self.requests_wrapper.patch(data["url"], data["data"])
@ -168,7 +169,7 @@ class RequestsPutToolWithParsing(BaseRequestsTool, BaseTool):
def _run(self, text: str) -> str: def _run(self, text: str) -> str:
try: try:
data = json.loads(text) data = parse_json_markdown(text)
except json.JSONDecodeError as e: except json.JSONDecodeError as e:
raise e raise e
response = self.requests_wrapper.put(data["url"], data["data"]) response = self.requests_wrapper.put(data["url"], data["data"])
@ -198,7 +199,7 @@ class RequestsDeleteToolWithParsing(BaseRequestsTool, BaseTool):
def _run(self, text: str) -> str: def _run(self, text: str) -> str:
try: try:
data = json.loads(text) data = parse_json_markdown(text)
except json.JSONDecodeError as e: except json.JSONDecodeError as e:
raise e raise e
response = self.requests_wrapper.delete(data["url"]) response = self.requests_wrapper.delete(data["url"])