diff --git a/bot/skills/chat.py b/bot/skills/chat.py index fb95a8e..b1b6ef7 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 @@ -17,8 +16,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 +61,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::A6gulYbI", messages=[ {"role": "system", "content": prompt}, { @@ -104,13 +91,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 +141,14 @@ def muse_visit(context: CallbackContext): def summarize(log): - prompt_user = "please summarize the following text in one short sentence:\n" + log + prompt_user = f"Пожалуйста, сформулируй в одном преложении самую интересную тему поднятую в чате:\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, @@ -179,60 +162,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 = [ - "оксана просто постарайся тряси меня еще сильней кричи и не жалей пощёчин возможно я еще живой", - "глеб управляет президентом особенно по выходным то громче сделает то тише то выключит на полчаса", - "я робок говорить не мастер пусть всё поведают тебе мой взгляд трепещущее сердце эрекция в конце концов", - "смотрю на грязные машины газон промокший и тебе пересылаю сообщенья путём почтового дождя", - "молчу поскольку не желаю произносить ненужных слов а нужные слова ни вами ни мной не изобретены", - "олег хорошим человеком работает семнадцать лета в отпуск ездит в копенгаген пинать приветливых датчан", - "как можно столько ошибаться спросил сапера иисус и воскресил его в пять тысяч шестьсот четырнадцатый раз", - "мы побываем в уникальных доисторических местах где со времён палеозоя не происходит ничего", - "жене машину покупаю любовнице вино и торт жена когда нибудь узнает и скажет вова молодец", - "боль отпускала захотелось сначала жить потом дышать потом соседку веру львовну ударить чем нибудь в ответ", - "шутил патологоанатом так искрометно что олег не выдержал и засмеялся придется снова зашивать", - "мне нужно чтобы подлечили мой нездоровый похуизм так вам талон к врачу какому да мне ващето похую" - "аркадию в военкомате велят раздеться до трусов аркадий встал по стойке смирно снимает первые трусы", - "придет пора меня не станет сказал сантехник михаил и этот кран текущий в ванной пусть будет память обо мне", - "меня в кружок антагонистов позвали четверо ребят не объяснив мою задачу ничо ващще не объяснив", - "на чердаке поймали бога он улететь хотел в окно весь перемазанный вареньем похожий чемто на шойгу", - "петру сегодня восемнадцать ну вот и всё подумал он закончилась пора веселья теперь лишь слёзы горе смерть", - "толстухе ногу оторвало но есть и в этом позитив ей потерять во сне не снилось за две секунды семь кило", - "вчера с войны пришол шаинский с одной пластмассовой рукой сел за рояль достал чекушку на нотах сайру разложы", - "скажите где у вас утесы я вся сгораю от стыда куда скажите можно спрятать мне тело жырное своё", -] 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"])