From e35849ddea685d6bd1ffe9ed839697bc77940d75 Mon Sep 17 00:00:00 2001 From: Sergey Melekhin Date: Mon, 9 Sep 2024 10:45:18 +0700 Subject: [PATCH 1/6] Update chat.py Update prompts to be more consistent with ones used for the finetuning. --- bot/skills/chat.py | 89 ++++------------------------------------------ 1 file changed, 7 insertions(+), 82 deletions(-) diff --git a/bot/skills/chat.py b/bot/skills/chat.py index fb95a8e..4ffe794 100644 --- a/bot/skills/chat.py +++ b/bot/skills/chat.py @@ -17,8 +17,6 @@ MAX_MESSAGES = 100 # Max age of message to be considered for poem generation. MAX_AGE = timedelta(hours=12) -# Number of examples to show to LLM in the prompt. -NUM_EXAMPLES = 10 # How often muse visits Nyan. SLEEP_INTERVAL = 60 * 60 # Number of poems per day. @@ -64,24 +62,14 @@ def write_a_poem(self) -> str: return "" theme = summarize("\n".join(log)) - examples = get_examples(NUM_EXAMPLES) - prompt = f"""You are a telegram chat bot for a Vladivostok Developers Community (VLDC). - You are written in python, and shy about it (your dream is to be rewritten in Rust). - Your name is Nyan and your avatar is a pixelized orange cat with tiger stripes. - You are master of short funny poems in a specific style called пирожки. - This style uses poetic meter iambic tetrameter with syllable count 9-8-9-8 - without rhyming, punctuation marks, or capitalization. - Пирожок is always 4 lines long and has a humorous punchline. - Here are some examples of your work: + prompt = "Ты чат бот владивостокского коммьюнити разработчиков VLDC. Ты написан на python но в тайне хотел бы переписать себя на rust. Тебя зовут Нян и твой аватар это пиксельный оранжевый кот с тигриными полосками. Ты мастер коротких забавных (часто саркастических) стихов в стиле пирожок. Этот стиль использует метрику ямбического тетраметра с количеством слогов 9-8-9-8 без рифмы, знаков препинания или заглавных букв. Пирожок всегда состоит из 4 строк." - {examples} - """ - - prompt_user = f"""Please write one 4 line long пирожок about the following topic: {theme}.""" + prompt_user = f"""Пожалуйста, напиши 4-х строчный стишок-пирожок, основываясь на тексте следующего параграфа: + {theme}.""" response = openai.chat.completions.create( - model="ft:gpt-4o-2024-08-06:personal::A4jmQdnE", + model="ft:gpt-4o-2024-08-06:personal::A56CEYzj", messages=[ {"role": "system", "content": prompt}, { @@ -104,13 +92,6 @@ def write_a_poem(self) -> str: @mode.add def add_chat_mode(upd: Updater, handlers_group: int): - global PIROZHKI - try: - with open("/app/pirozhki.txt", "rt", encoding="utf8") as fi: - PIROZHKI = fi.read().splitlines() - except: # noqa: E722 - logger.error("failed to read pirozhki!") - logger.info("registering chat handlers") dp = upd.dispatcher dp.add_handler( @@ -161,11 +142,11 @@ def muse_visit(context: CallbackContext): def summarize(log): - prompt_user = "please summarize the following text in one short sentence:\n" + log + prompt_user = "Пожалуйста, сформулируй в одном преложении самую интересную тему поднятую в чате:\n" + log response = openai.chat.completions.create( - model="gpt-4-0125-preview", + model="gpt-4o-mini", messages=[ - # {"role": "system", "content": prompt}, + {"role": "system", "content": "Ты чат бот владивостокского коммьюнити разработчиков VLDC. Ты написан на python но в тайне хотел бы переписать себя на rust. Тебя зовут Нян и твой аватар это пиксельный оранжевый кот с тигриными полосками."}, { "role": "user", "content": prompt_user, @@ -180,59 +161,3 @@ def summarize(log): return response.choices[0].message.content - -def format_pirozhok(pirozhok): - syllables = [9, 8, 9, 8] - words = pirozhok.split() - if len(words) == 0: - return "" - lines = [] - - for s in syllables: - cnt = 0 - line = [] - while cnt < s: - word = words.pop(0) - cnt += len(re.findall(r"[аеёиоуыэюя]", word, re.I)) - line.append(word) - lines.append(" ".join(line)) - - return "\n".join(lines) - - -def get_examples(n=10): - poems = [] - while len(poems) < n: - pirozhok = random.choice(PIROZHKI) - try: - formatted = format_pirozhok(pirozhok) - poems.append(formatted) - except: - # Some pirozhki do not match - None - - return "\n\n".join(poems) - - -PIROZHKI = [ - "оксана просто постарайся тряси меня еще сильней кричи и не жалей пощёчин возможно я еще живой", - "глеб управляет президентом особенно по выходным то громче сделает то тише то выключит на полчаса", - "я робок говорить не мастер пусть всё поведают тебе мой взгляд трепещущее сердце эрекция в конце концов", - "смотрю на грязные машины газон промокший и тебе пересылаю сообщенья путём почтового дождя", - "молчу поскольку не желаю произносить ненужных слов а нужные слова ни вами ни мной не изобретены", - "олег хорошим человеком работает семнадцать лета в отпуск ездит в копенгаген пинать приветливых датчан", - "как можно столько ошибаться спросил сапера иисус и воскресил его в пять тысяч шестьсот четырнадцатый раз", - "мы побываем в уникальных доисторических местах где со времён палеозоя не происходит ничего", - "жене машину покупаю любовнице вино и торт жена когда нибудь узнает и скажет вова молодец", - "боль отпускала захотелось сначала жить потом дышать потом соседку веру львовну ударить чем нибудь в ответ", - "шутил патологоанатом так искрометно что олег не выдержал и засмеялся придется снова зашивать", - "мне нужно чтобы подлечили мой нездоровый похуизм так вам талон к врачу какому да мне ващето похую" - "аркадию в военкомате велят раздеться до трусов аркадий встал по стойке смирно снимает первые трусы", - "придет пора меня не станет сказал сантехник михаил и этот кран текущий в ванной пусть будет память обо мне", - "меня в кружок антагонистов позвали четверо ребят не объяснив мою задачу ничо ващще не объяснив", - "на чердаке поймали бога он улететь хотел в окно весь перемазанный вареньем похожий чемто на шойгу", - "петру сегодня восемнадцать ну вот и всё подумал он закончилась пора веселья теперь лишь слёзы горе смерть", - "толстухе ногу оторвало но есть и в этом позитив ей потерять во сне не снилось за две секунды семь кило", - "вчера с войны пришол шаинский с одной пластмассовой рукой сел за рояль достал чекушку на нотах сайру разложы", - "скажите где у вас утесы я вся сгораю от стыда куда скажите можно спрятать мне тело жырное своё", -] From e05c09c922ab7ba656b2a95b0c970b2a59571dab Mon Sep 17 00:00:00 2001 From: Sergey Melekhin Date: Mon, 9 Sep 2024 11:44:03 +0700 Subject: [PATCH 2/6] lint --- bot/skills/chat.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bot/skills/chat.py b/bot/skills/chat.py index 4ffe794..0528f2d 100644 --- a/bot/skills/chat.py +++ b/bot/skills/chat.py @@ -142,11 +142,14 @@ def muse_visit(context: CallbackContext): def summarize(log): - prompt_user = "Пожалуйста, сформулируй в одном преложении самую интересную тему поднятую в чате:\n" + log + prompt_user = f"Пожалуйста, сформулируй в одном преложении самую интересную тему поднятую в чате:\n{log}" response = openai.chat.completions.create( model="gpt-4o-mini", messages=[ - {"role": "system", "content": "Ты чат бот владивостокского коммьюнити разработчиков VLDC. Ты написан на python но в тайне хотел бы переписать себя на rust. Тебя зовут Нян и твой аватар это пиксельный оранжевый кот с тигриными полосками."}, + { + "role": "system", + "content": "Ты чат бот владивостокского коммьюнити разработчиков VLDC. Ты написан на python но в тайне хотел бы переписать себя на rust. Тебя зовут Нян и твой аватар это пиксельный оранжевый кот с тигриными полосками." + }, { "role": "user", "content": prompt_user, From 5a54f2e48ab5ade6f56bf411f0ef6c53f4c49ccd Mon Sep 17 00:00:00 2001 From: Sergey Melekhin Date: Mon, 9 Sep 2024 11:47:21 +0700 Subject: [PATCH 3/6] coma --- bot/skills/chat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/skills/chat.py b/bot/skills/chat.py index 0528f2d..5fda79c 100644 --- a/bot/skills/chat.py +++ b/bot/skills/chat.py @@ -148,7 +148,7 @@ def summarize(log): messages=[ { "role": "system", - "content": "Ты чат бот владивостокского коммьюнити разработчиков VLDC. Ты написан на python но в тайне хотел бы переписать себя на rust. Тебя зовут Нян и твой аватар это пиксельный оранжевый кот с тигриными полосками." + "content": "Ты чат бот владивостокского коммьюнити разработчиков VLDC. Ты написан на python но в тайне хотел бы переписать себя на rust. Тебя зовут Нян и твой аватар это пиксельный оранжевый кот с тигриными полосками.", }, { "role": "user", From 47771546259cc9017d48b1f2cc0db0a13cfe8e63 Mon Sep 17 00:00:00 2001 From: Sergey Melekhin Date: Mon, 9 Sep 2024 13:24:03 +0700 Subject: [PATCH 4/6] Update chat.py --- bot/skills/chat.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bot/skills/chat.py b/bot/skills/chat.py index 5fda79c..533874c 100644 --- a/bot/skills/chat.py +++ b/bot/skills/chat.py @@ -163,4 +163,3 @@ def summarize(log): ) return response.choices[0].message.content - From 9dde48f5200c8b107dcd46e43fb96029ef649851 Mon Sep 17 00:00:00 2001 From: Sergey Melekhin Date: Mon, 9 Sep 2024 14:09:02 +0700 Subject: [PATCH 5/6] remove unused import --- bot/skills/chat.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bot/skills/chat.py b/bot/skills/chat.py index 533874c..329c8f7 100644 --- a/bot/skills/chat.py +++ b/bot/skills/chat.py @@ -1,6 +1,5 @@ import random import logging -import re from collections import deque from datetime import datetime, timedelta from threading import Lock From ce5ae0806a8f62dc76600e3a8f4dcd1521fbcd5c Mon Sep 17 00:00:00 2001 From: Sergey Melekhin Date: Fri, 13 Sep 2024 12:19:52 +0700 Subject: [PATCH 6/6] update ft model --- bot/skills/chat.py | 2 +- bot/skills/towel_mode.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bot/skills/chat.py b/bot/skills/chat.py index 329c8f7..b1b6ef7 100644 --- a/bot/skills/chat.py +++ b/bot/skills/chat.py @@ -68,7 +68,7 @@ def write_a_poem(self) -> str: {theme}.""" response = openai.chat.completions.create( - model="ft:gpt-4o-2024-08-06:personal::A56CEYzj", + model="ft:gpt-4o-2024-08-06:personal::A6gulYbI", messages=[ {"role": "system", "content": prompt}, { diff --git a/bot/skills/towel_mode.py b/bot/skills/towel_mode.py index e3adeaa..dedae0b 100644 --- a/bot/skills/towel_mode.py +++ b/bot/skills/towel_mode.py @@ -265,6 +265,7 @@ def ban_user(context: CallbackContext): _delete_user_rel_messages(chat_id, user["_id"], context) except BadRequest as err: logger.error("can't ban user %s, because of: %s", user, err) + continue db.delete_user(user["_id"])