From 7bc5f03e143198213986cc4f5a271bd262974cff Mon Sep 17 00:00:00 2001 From: Paillat Date: Tue, 15 Aug 2023 12:42:18 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20fix(functionscalls.py):=20fix=20?= =?UTF-8?q?typo=20in=20FunctionCallError=20class=20name=20=E2=9C=A8=20feat?= =?UTF-8?q?(functionscalls.py):=20add=20call=5Ffunction=20function=20to=20?= =?UTF-8?q?handle=20function=20calls=20with=20name=20and=20arguments=20?= =?UTF-8?q?=F0=9F=94=A7=20fix(makeprompt.py):=20remove=20individual=20func?= =?UTF-8?q?tion=20imports=20from=20functionscalls=20and=20use=20call=5Ffun?= =?UTF-8?q?ction=20instead?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/functionscalls.py | 11 ++++++++ src/makeprompt.py | 63 ++----------------------------------------- 2 files changed, 13 insertions(+), 61 deletions(-) diff --git a/src/functionscalls.py b/src/functionscalls.py index a86fc11..2f36b95 100644 --- a/src/functionscalls.py +++ b/src/functionscalls.py @@ -299,6 +299,17 @@ async def send_ascii_art_image( await message_in_channel_in_wich_to_send.channel.send(message) +async def call_function(message: discord.Message, function_call): + name = function_call.get("name", "") + if name == "": + raise FuntionCallError("No name provided") + arguments = function_call.get("arguments", {}) + if name not in functions_matching: + raise FuntionCallError("Invalid function name") + function = functions_matching[name] + await function(message, arguments) + + functions_matching = { "add_reaction_to_last_message": add_reaction_to_last_message, "reply_to_last_message": reply_to_last_message, diff --git a/src/makeprompt.py b/src/makeprompt.py index a0da3ca..14bde52 100644 --- a/src/makeprompt.py +++ b/src/makeprompt.py @@ -8,17 +8,7 @@ import json from src.config import curs_data, max_uses, curs_premium, gpt_3_5_turbo_prompt from src.utils.misc import moderate from src.utils.openaicaller import openai_caller -from src.functionscalls import ( - add_reaction_to_last_message, - reply_to_last_message, - send_a_stock_image, - create_a_thread, - send_a_gif, - send_ascii_art_text, - send_ascii_art_image, - functions, - server_normal_channel_functions, -) +from src.functionscalls import call_function, functions, server_normal_channel_functions async def replace_mentions(content, bot): @@ -146,56 +136,7 @@ async def chatgpt_process( print(f"response: {response}") if response.get("function_call"): function_call = response.get("function_call") - name = function_call.get("name", "") - arguments = function_call.get("arguments", {}) - print(f"arguments: {arguments}") - arguments = json.loads(arguments) - if name == "add_reaction_to_last_message": - if arguments.get("emoji"): - emoji = arguments.get("emoji") - reply = arguments.get("message", "") - await add_reaction_to_last_message(message, emoji, reply) - if name == "reply_to_last_message": - if arguments.get("message"): - reply = arguments.get("message") - await reply_to_last_message(message, reply) - if name == "send_a_stock_image": - if arguments.get("query"): - query = arguments.get("query") - reply = arguments.get("message", "") - await send_a_stock_image(message, query, reply) - if name == "create_a_thread": - if arguments.get("name") and arguments.get("message"): - name = arguments.get("name") - reply = arguments.get("message", "") - if isinstance(message.channel, discord.TextChannel): - await create_a_thread(message.channel, name, reply) - else: - await message.channel.send( - "`A server normal text channel only function has been called in a non standard channel. Please retry`", - delete_after=10, - ) - if name == "send_a_gif": - if arguments.get("query"): - query = arguments.get("query") - reply = arguments.get("message", "") - limit = arguments.get("limit", 15) - await send_a_gif(message, query, reply, limit) - if name == "send_ascii_art_text": - if arguments.get("text"): - text = arguments.get("text") - font = arguments.get("font", "standard") - reply = arguments.get("message", "") - await send_ascii_art_text(message, text, font, reply) - if name == "send_ascii_art_image": - if arguments.get("query"): - query = arguments.get("query") - reply = arguments.get("message", "") - await send_ascii_art_image(message, query, reply) - if name == "": - await message.channel.send( - "The function call is empty. Please retry.", delete_after=10 - ) + await call_function(message, function_call) else: content = response.get("content", "") while len(content) != 0: