diff --git a/api/core/tools/provider/builtin/discord/tools/discord_webhook.py b/api/core/tools/provider/builtin/discord/tools/discord_webhook.py index dc148994f3..7fdf791aba 100644 --- a/api/core/tools/provider/builtin/discord/tools/discord_webhook.py +++ b/api/core/tools/provider/builtin/discord/tools/discord_webhook.py @@ -7,27 +7,29 @@ from core.tools.tool.builtin_tool import BuiltinTool class DiscordWebhookTool(BuiltinTool): - def _invoke(self, user_id: str, tool_parameters: dict[str, Any] - ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]: + def _invoke( + self, user_id: str, tool_parameters: dict[str, Any] + ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]: """ - Incoming Webhooks - API Document: - https://discord.com/developers/docs/resources/webhook#execute-webhook + Incoming Webhooks + API Document: + https://discord.com/developers/docs/resources/webhook#execute-webhook """ - content = tool_parameters.get('content', '') + content = tool_parameters.get("content", "") if not content: - return self.create_text_message('Invalid parameter content') + return self.create_text_message("Invalid parameter content") - webhook_url = tool_parameters.get('webhook_url', '') + webhook_url = tool_parameters.get("webhook_url", "") - if not webhook_url.startswith('https://discord.com/api/webhooks/'): + if not webhook_url.startswith("https://discord.com/api/webhooks/"): return self.create_text_message( - f'Invalid parameter webhook_url ${webhook_url}, \ - not a valid Discord webhook URL') + f"Invalid parameter webhook_url ${webhook_url}, \ + not a valid Discord webhook URL" + ) headers = { - 'Content-Type': 'application/json', + "Content-Type": "application/json", } params = {} payload = { @@ -35,15 +37,13 @@ class DiscordWebhookTool(BuiltinTool): } try: - res = httpx.post(webhook_url, headers=headers, - params=params, json=payload) + res = httpx.post(webhook_url, headers=headers, params=params, json=payload) if res.is_success: - return self.create_text_message( - "Text message was sent successfully") + return self.create_text_message("Text message was sent successfully") else: return self.create_text_message( f"Failed to send the text message, \ - status code: {res.status_code}, response: {res.text}") + status code: {res.status_code}, response: {res.text}" + ) except Exception as e: - return self.create_text_message( - "Failed to send message through webhook. {}".format(e)) + return self.create_text_message("Failed to send message through webhook. {}".format(e)) diff --git a/api/libs/json_in_md_parser.py b/api/libs/json_in_md_parser.py index 185ff3f95e..9131408817 100644 --- a/api/libs/json_in_md_parser.py +++ b/api/libs/json_in_md_parser.py @@ -4,25 +4,28 @@ from core.llm_generator.output_parser.errors import OutputParserError def parse_json_markdown(json_string: str) -> dict: - # Remove the triple backticks if present + # Get json from the backticks/braces json_string = json_string.strip() - start_index = json_string.find("```json") - end_index = json_string.find("```", start_index + len("```json")) - - if start_index != -1 and end_index != -1: - extracted_content = json_string[start_index + len("```json") : end_index].strip() - - # Parse the JSON string into a Python dictionary + starts = ["```json", "```", "``", "`", "{"] + ends = ["```", "``", "`", "}"] + end_index = -1 + for s in starts: + start_index = json_string.find(s) + if start_index != -1: + if json_string[start_index] != "{": + start_index += len(s) + break + if start_index != -1: + for e in ends: + end_index = json_string.rfind(e, start_index) + if end_index != -1: + if json_string[end_index] == "}": + end_index += 1 + break + if start_index != -1 and end_index != -1 and start_index < end_index: + extracted_content = json_string[start_index:end_index].strip() + print("content:", extracted_content, start_index, end_index) parsed = json.loads(extracted_content) - elif start_index != -1 and end_index == -1 and json_string.endswith("``"): - end_index = json_string.find("``", start_index + len("```json")) - extracted_content = json_string[start_index + len("```json") : end_index].strip() - - # Parse the JSON string into a Python dictionary - parsed = json.loads(extracted_content) - elif json_string.startswith("{"): - # Parse the JSON string into a Python dictionary - parsed = json.loads(json_string) else: raise Exception("Could not find JSON block in the output.")