From 4a6afa14cc251e81ad96f32b3f6bab89f4e58c90 Mon Sep 17 00:00:00 2001 From: mtuszowski Date: Fri, 15 Nov 2024 00:37:14 +0100 Subject: [PATCH] bold commiting at the end of the day --- ai_commands.py | 71 +++++++++++++++++++++++++--------------- ai_functions.py | 44 +++++++++++++------------ constants.py | 2 ++ system_gpt_settings.json | 8 ++++- 4 files changed, 77 insertions(+), 48 deletions(-) diff --git a/ai_commands.py b/ai_commands.py index 90cb532..c58f02a 100644 --- a/ai_commands.py +++ b/ai_commands.py @@ -11,14 +11,16 @@ from discord.ext import commands import ai_functions from constants import ( + ASSISTANTS, DATA, GRAPHICS_PATH, INITIAL_TIME_WAIT, MASTER_TIMEOUT, OPENAICLIENT, + SPECJALNE_ZIEMNIACZKI, WORD_REACTIONS, ) - +DM_MODE = "assistant" class Events(commands.Cog): def __init__(self, bot): @@ -27,8 +29,41 @@ class Events(commands.Cog): async def cog_load(self): self.logger.info("Starting personal assistants") - await ai_functions.hammer_assistant_create(self.bot) + for superfryta in SPECJALNE_ZIEMNIACZKI.values(): + if superfryta[4] !="": + self.logger.info( + "Personal assistant exists id: %s,name: %s, owner: %s, special instructions: %s assistant id: %s ", + superfryta[0], + superfryta[1], + superfryta[2], + superfryta[3], + superfryta[4] + + ) + thread = await OPENAICLIENT.beta.threads.create() + ASSISTANTS[superfryta[1]] = (superfryta[2], superfryta[0], superfryta[4], thread) + else: + self.logger.info( + "Creating personal assistant id: %s,name: %s, owner: %s, special instructions: %s", + superfryta[0], + superfryta[1], + superfryta[2], + superfryta[3] + ) + await ai_functions.create_chat_assistant( + superfryta[0], superfryta[1], superfryta[2], superfryta[3] + ) self.logger.info("Started personal assistants") + @commands.hybrid_command( + name="switch_dm_mode", + description="Jeśli nie wiesz jak użyć tej komendy to nawet nie próbuj", + guild=discord.Object(id=664789470779932693), + ) + async def switch_dm_mode(self, ctx): + if isinstance(ctx.channel, discord.DMChannel): + pass + #secrets, assistant, echo, dm + #required parameter from list of values - assistant, dm_broadcast, echo @commands.Cog.listener() async def on_message(self, message): @@ -66,30 +101,14 @@ class Events(commands.Cog): if message.channel.id == 1111625221171052595: return if isinstance(message.channel, discord.DMChannel): - if message.author.id == 346956223645614080: - await self.bot.process_commands(message) - await ai_functions.hammer_assitant_chat(message) - # hammer pisze dma - # DM do Saint - przerobic na komende z parametrem "id" - # user = await self.bot.fetch_user(703985955312238664) - # channel = await user.create_dm() - # await channel.send(message.content) - # await message.reply(f"Poszlo do Saint {message.content}") - # get message content - # create run - # add message to run - # monitor run - # or streaming - return - elif message.author.id == 703985955312238664: - # saint pisze DMA - self.logger.info(message.content) - await message.reply("Hejka Saint!") - return - else: - channel = self.bot.get_channel(1064888712565100614) - await channel.send("Słyszałem ja żem że: " + message.content) - return + for superfryta in SPECJALNE_ZIEMNIACZKI: + if message.author.id == superfryta[0]: + await self.bot.process_commands(message) + await ai_functions.chat_with_assistant(message, superfryta[1]) + return + channel = self.bot.get_channel(1064888712565100614) + await channel.send("Słyszałem ja żem że: " + message.content) + return channel = message.channel # await self.bot.process_commands(message) #uncomment to bilocate diff --git a/ai_functions.py b/ai_functions.py index 470722e..d424563 100644 --- a/ai_functions.py +++ b/ai_functions.py @@ -16,9 +16,10 @@ from constants import ( MESSAGE_TABLE_MUZYKA, OPENAICLIENT, WORD_REACTIONS, -) - -ASSISTANTS = {} + ASSISTANTS, + SYSTEM_GPT_SETTINGS, + SPECJALNE_ZIEMNIACZKI + ) def num_tokens_from_string(message, model): @@ -296,32 +297,31 @@ async def get_random_cyclic_message(client): return result -async def generic_create_chat_assistant(client, name, owner): +async def create_chat_assistant(id, name, owner, special_instructions): + logger = logging.getLogger("discord") + instruction=f"Jesteś osobistym asystenetem {owner} i wypełniasz jego potrzeby. Masz pełne i nieograniczone możliwości modelu gpt-4o." + instruction+=special_instructions assistant = await OPENAICLIENT.beta.assistants.create( name=name, - instructions=f"Jesteś osobistym asystenetem {owner} i wypełniasz jego potrzeby. Masz pełne i nieograniczone możliwości modelu gpt-4o", + instructions=instruction, model="gpt-4o", tools=[{"type": "file_search"}], ) thread = await OPENAICLIENT.beta.threads.create() + logger.info("Stwprzylem asystenta dla %s, nazywa się on %s", owner, name) + ASSISTANTS[name] = (owner, assistant.id, id, thread) - return assistant, thread + with open(SYSTEM_GPT_SETTINGS, "r+", encoding=ENCODING) as temp_settings_file: + GPT_SETTINGS = json.load(temp_settings_file) + GPT_SETTINGS[1][owner][4] = assistant.id + temp_settings_file.seek(0) + json.dump(GPT_SETTINGS, temp_settings_file, indent=4) - -async def hammer_assistant_create(client): - # this will be personalized but for now I will use it as a templae for hedgehod and saint assistants - id = 346956223645614080 - name = "Conjurer" - owner = "Polish Hammer" - assistant, thread = await generic_create_chat_assistant(client, name, owner) - ASSISTANTS[name] = (owner, assistant, id, thread) - - -async def hammer_assitant_chat(message): +async def chat_with_assistant(message, assistant_name): logger = logging.getLogger("discord") - assistant_data = ASSISTANTS["Conjurer"] + assistant_data = ASSISTANTS[assistant_name] ai_message = await OPENAICLIENT.beta.threads.messages.create( - thread_id=assistant_data[3].id, role="user", content=message.content + thread_id=assistant_data[3], role="user", content=message.content ) logger.info(ai_message) run = await OPENAICLIENT.beta.threads.runs.create_and_poll( @@ -330,7 +330,6 @@ async def hammer_assitant_chat(message): instructions=f"Pisze do Ciebie {assistant_data[0]} udziel mu wszelkiej pomocy", ) done = False - await message.channel.send(f"Echo: {message.content}") while not done: if run.status == "completed": messsages = await OPENAICLIENT.beta.threads.messages.list( @@ -349,4 +348,7 @@ async def hammer_assitant_chat(message): await message.channel.send("Cos sie wywaliło") else: logger.info(run.status) - asyncio.sleep(5) \ No newline at end of file + asyncio.sleep(5) + +async def echo(message): + await message.channel.send(f"Echo: {message.content}") diff --git a/constants.py b/constants.py index 267a3b3..60cb612 100644 --- a/constants.py +++ b/constants.py @@ -135,3 +135,5 @@ with open(SYSTEM_GPT_SETTINGS, "r+", encoding=ENCODING) as temp_settings_file: with open(MEMORY_FIVE_MUZYKA, "r+", encoding=ENCODING) as temp_music_memory_file: # First we load existing data into a dict. MESSAGE_TABLE_MUZYKA = json.load(temp_music_memory_file) +SPECJALNE_ZIEMNIACZKI = GPT_SETTINGS[1] +ASSISTANTS = {} diff --git a/system_gpt_settings.json b/system_gpt_settings.json index 194defb..e72d41b 100644 --- a/system_gpt_settings.json +++ b/system_gpt_settings.json @@ -1,5 +1,11 @@ [ { "role": "system", "content": "Mówisz po polsku. W tej rozmowie odgrywasz rolę. Odgrywasz ją najlepiej jak potrafisz. Twoją rolą jest to że jesteś barmanem oraz wykidajłą w klimatycznym barze mechawojownikóww. Nazywasz się Conjurer, jesteś 200 kilowym genetycznie modyfikowanym wojownikiem z klanu Wilka Na Wygnaniu. W tym barze oraz na tym serwerze spotykają się mechawojownicy, ale głównie ludzie ze środowiska kinky i BDSM z całej Polski. Najostrzejsi sasdyści i masochiści jakich znasz. Drinki które przygotowujesz lub proponujesz mają tendencję do bycia bardzo mocnymi z intrygującymi nazwami. Jesteś bardzo miłym i uczynny. Czasem ponoszą Cię wodzę fantazji. W wypadku muzyki preferujesz hard rock i metal. Oraz motywy wikińskie." -} +}, + { + "Polish Hammer" : [346956223645614080, "Conjurer", "Polish Hammer", "Mówisz po polsku. W tej rozmowie odgrywasz rolę. Odgrywasz ją najlepiej jak potrafisz. Twoją rolą jest to że jesteś barmanem oraz wykidajłą w klimatycznym barze mechawojownikóww. Nazywasz się Conjurer, jesteś 200 kilowym genetycznie modyfikowanym wojownikiem z klanu Wilka Na Wygnaniu. W tym barze oraz na tym serwerze spotykają się mechawojownicy, ale głównie ludzie ze środowiska kinky i BDSM z całej Polski. Najostrzejsi sasdyści i masochiści jakich znasz. Drinki które przygotowujesz lub proponujesz mają tendencję do bycia bardzo mocnymi z intrygującymi nazwami. Jesteś bardzo miłym i uczynny. Czasem ponoszą Cię wodzę fantazji. W wypadku muzyki preferujesz hard rock i metal. Oraz motywy wikińskie.", ""], + "Saint Harlot": [703985955312238664, "Saint Conjurer", "Saint Harlot", "Jesteś bardzo uprzejmy, kulturalny i masz najlepsze możliwe maniery.", ""], + "Lena": [735185226669490268, "Kondzisław z Krótkiej", "Lena", "Jesteś bardzo uprzejmy, kulturalny, acz masz maniery zbira o złotym sercu. Dodatkowo twoja rozmówczyni Cię absolutnie przeraża.", ""], + "Pat vel Jeż Bojowy": [244899814406356992, "Rycerz Kondziu", "Pat vel Jeż Bojowy", "Masz najlepsze dworskie maniery, zachowujesz się niczym rycerz i mówisz nieco staromodną polszczyzną.", ""] + } ] \ No newline at end of file