Skip to content

Commit

Permalink
Merge pull request #322 from C-Pro/feature/upd-model
Browse files Browse the repository at this point in the history
Feature/upd model
  • Loading branch information
C-Pro authored Sep 13, 2024
2 parents 8e70a53 + ce5ae08 commit 52aebde
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 84 deletions.
94 changes: 10 additions & 84 deletions bot/skills/chat.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import random
import logging
import re
from collections import deque
from datetime import datetime, timedelta
from threading import Lock
Expand All @@ -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.
Expand Down Expand Up @@ -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},
{
Expand All @@ -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(
Expand Down Expand Up @@ -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,
Expand All @@ -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 = [
"оксана просто постарайся тряси меня еще сильней кричи и не жалей пощёчин возможно я еще живой",
"глеб управляет президентом особенно по выходным то громче сделает то тише то выключит на полчаса",
"я робок говорить не мастер пусть всё поведают тебе мой взгляд трепещущее сердце эрекция в конце концов",
"смотрю на грязные машины газон промокший и тебе пересылаю сообщенья путём почтового дождя",
"молчу поскольку не желаю произносить ненужных слов а нужные слова ни вами ни мной не изобретены",
"олег хорошим человеком работает семнадцать лета в отпуск ездит в копенгаген пинать приветливых датчан",
"как можно столько ошибаться спросил сапера иисус и воскресил его в пять тысяч шестьсот четырнадцатый раз",
"мы побываем в уникальных доисторических местах где со времён палеозоя не происходит ничего",
"жене машину покупаю любовнице вино и торт жена когда нибудь узнает и скажет вова молодец",
"боль отпускала захотелось сначала жить потом дышать потом соседку веру львовну ударить чем нибудь в ответ",
"шутил патологоанатом так искрометно что олег не выдержал и засмеялся придется снова зашивать",
"мне нужно чтобы подлечили мой нездоровый похуизм так вам талон к врачу какому да мне ващето похую"
"аркадию в военкомате велят раздеться до трусов аркадий встал по стойке смирно снимает первые трусы",
"придет пора меня не станет сказал сантехник михаил и этот кран текущий в ванной пусть будет память обо мне",
"меня в кружок антагонистов позвали четверо ребят не объяснив мою задачу ничо ващще не объяснив",
"на чердаке поймали бога он улететь хотел в окно весь перемазанный вареньем похожий чемто на шойгу",
"петру сегодня восемнадцать ну вот и всё подумал он закончилась пора веселья теперь лишь слёзы горе смерть",
"толстухе ногу оторвало но есть и в этом позитив ей потерять во сне не снилось за две секунды семь кило",
"вчера с войны пришол шаинский с одной пластмассовой рукой сел за рояль достал чекушку на нотах сайру разложы",
"скажите где у вас утесы я вся сгораю от стыда куда скажите можно спрятать мне тело жырное своё",
]
1 change: 1 addition & 0 deletions bot/skills/towel_mode.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"])

Expand Down

0 comments on commit 52aebde

Please sign in to comment.