Compare commits

..

2 Commits

Author SHA1 Message Date
xds
e79b191463 + fixes 2026-02-03 09:34:34 +03:00
xds
8fd9f9b8c8 + fixes 2026-02-03 09:34:10 +03:00

View File

@@ -317,8 +317,9 @@ async def generate_image(
char: Character = await dao.chars.get_character(char_id) char: Character = await dao.chars.get_character(char_id)
# Начинаем список с фото персонажа # Начинаем список с фото персонажа
media_group_bytes = [await bot.download(char.character_image_doc_tg_id)] file_byes = await bot.download(char.character_image_doc_tg_id)
media_group_bytes = [file_byes.read()]
file_byes.close()
if media: if media:
# Скачиваем файлы # Скачиваем файлы
# tasks вернут список объектов BytesIO # tasks вернут список объектов BytesIO
@@ -345,18 +346,22 @@ async def generate_image(
quality=Quality[data['quality']], quality=Quality[data['quality']],
) )
images = [] images = []
if generated_images_io: if generated_images_io:
for img_io in generated_images_io: for img_io in generated_images_io:
# Читаем байты
content = img_io.read()
# Сразу закрываем поток от адаптера, освобождая память
img_io.close()
images.append( images.append(
BufferedInputFile( BufferedInputFile(
img_io.read(), content,
filename=f"img_{random.randint(1000, 9999)}.png" filename=f"img_{random.randint(1000, 9999)}.png"
) )
) )
# Важно: img_io здесь тоже BytesIO. После отправки aiogram закроет его сам,
# либо он удалится GC. Но если список generated_images_io большой,
# он висит в памяти до выхода из функции.
return images return images
@@ -367,8 +372,13 @@ async def handle_text(message: Message, gemini: GoogleAdapter, state: FSMContext
await wait_msg.edit_text(await gen_start_text(message=message, gemini=gemini, state=state, dao=dao, bot=bot)) await wait_msg.edit_text(await gen_start_text(message=message, gemini=gemini, state=state, dao=dao, bot=bot))
async def gen_start_text(message: Message, gemini: GoogleAdapter, state: FSMContext, dao: DAO, bot: Bot) -> str: async def gen_start_text(message: Message, gemini: GoogleAdapter, state: FSMContext, dao: DAO, bot: Bot,
char_id: str = None) -> str:
await bot.send_chat_action(message.chat.id, "typing") await bot.send_chat_action(message.chat.id, "typing")
prompt = message.text
if char_id:
char = await dao.chars.get_character(message.chat.id)
prompt += char.character_bio
result = await asyncio.to_thread(gemini.generate_text, prompt=message.text) result = await asyncio.to_thread(gemini.generate_text, prompt=message.text)
if result: if result:
return result return result