Browse Source

Update json_in_md_parser.py (#8983)

Co-authored-by: crazywoola <427733928@qq.com>
tags/0.9.1-fix1
zhaoyi233 1 year ago
parent
commit
4373777871
No account linked to committer's email address

+ 19
- 19
api/core/tools/provider/builtin/discord/tools/discord_webhook.py View File





class DiscordWebhookTool(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: 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( 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 = { headers = {
'Content-Type': 'application/json',
"Content-Type": "application/json",
} }
params = {} params = {}
payload = { payload = {
} }


try: 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: 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: else:
return self.create_text_message( return self.create_text_message(
f"Failed to send the 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: 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))

+ 20
- 17
api/libs/json_in_md_parser.py View File





def parse_json_markdown(json_string: str) -> dict: 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() 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
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
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) parsed = json.loads(extracted_content)
elif json_string.startswith("{"):
# Parse the JSON string into a Python dictionary
parsed = json.loads(json_string)
else: else:
raise Exception("Could not find JSON block in the output.") raise Exception("Could not find JSON block in the output.")



Loading…
Cancel
Save