Обработка долгих ответов
async def chatting_with_bot(
msg: types.Message,
chat_service: AbstractChatService = Provide[Container.chat_service],
uow: AbstractUnitOfWork = Provide[Container.uow],
) -> None:
tg_abs_chat_id = str(abs(msg.chat.id))
tg_abs_msg_id = str(abs(msg.message_id))
chat_impl = chat_service.get_chat_implementation("telegram", tg_abs_chat_id, uow=uow)
if not chat_impl:
await msg.reply("Sorry, there seems to be no one here to answer you")
loop = asyncio.get_running_loop()
chat = chat_service.get_chat(chat_id=chat_impl.chat_id, uow=uow)
user_content = msg.text.removeprefix(f"@{configs.TG_BOT_NAME}")
try:
user_message, bot_message = await chat_service.send_user_message_to_chatbot(
chat_id=chat.chat_id,
content=user_content,
maker_id=chat.owner.user_id,
reply_to=None,
uow=uow
)
except service_exc.ConflictError:
await msg.reply("It seems there is no one here to answer you. I could, but I can't")
return
except service_exc.ServiceError:
await msg.reply("The Engine has boiled! Contact your system administrator")
return
sending_bot_message = await msg.reply(bot_message.content)
tg_abs_bot_msg_id = str(abs(sending_bot_message.message_id))
Функция chat_service.send_user_message_to_chatbot возвращает некоторый ответ (текст) на некоторое пользовательское сообщение. Под капотом эта функция использует langchain для создания запросов к OpenAI.
Проблема заключается в том, что при получении объемного результата (текста) работы данной функции (от 1000-2000 символов) не срабатывает await msg.reply(bot_message.content) (в чат не приходит сообщение) и возникает ошибка TimeOut, хотя в переменную sending_bot_message я получаю сущность телеграм сообщения.
Логи:
{"type":"aiogram_session","bot":"000000","method":{"offset":275264410,"timeout":10,"allowed_updates":[]},"timeout":70,"api":{"base":"https://api.telegram.org/bot{token}/{method}","file":"https://api.telegram.org/file/bot{token}/{path}","is_local":false,"wrap_local_file":"<aiogram.client.telegram.BareFilesPathWrapper object at 0x7f1ae1da0610>"},"url":"https://api.telegram.org/bot000000/getUpdates","event":"Making request to API","level":"debug","timestamp":1707064556.9849477}
{"type":"aiogram_session","bot":"000000","method":{"chat_id":000000,"text":"ТЕКСТО КОТОРЫЙ ДОЛЖЕН ПОЯВИТЬСЯ В ЧАТЕ КАК ОТВЕТ БОТА","reply_to_message_id":318},"timeout":null,"api":{"base":"https://api.telegram.org/bot{token}/{method}","file":"https://api.telegram.org/file/bot{token}/{path}","is_local":false,"wrap_local_file":"<aiogram.client.telegram.BareFilesPathWrapper object at 0x7f1ae1da0610>"},"url":"https://api.telegram.org/bot000000/sendMessage","error":"TelegramNetworkError('HTTP Client says - ServerDisconnectedError: Server disconnected')","time_spent_ms":60183.444014001,"event":"API error","level":"error","timestamp":1707064565.644201}
INFO:aiogram.event:Update id=275264409 is not handled. Duration 79438 ms by bot id=000000
ERROR:aiogram.event:Cause exception while process update id=275264409 by bot id=000000
TelegramNetworkError: HTTP Client says - ServerDisconnectedError: Server disconnected
Traceback (most recent call last):
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/client/session/aiohttp.py", line 171, in make_request
async with session.post(
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiohttp/client.py", line 1187, in __aenter__
self._resp = await self._coro
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiohttp/client.py", line 601, in _request
await resp.start(conn)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiohttp/client_reqrep.py", line 965, in start
message, payload = await protocol.read() # type: ignore[union-attr]
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiohttp/streams.py", line 622, in read
await self._waiter
aiohttp.client_exceptions.ServerDisconnectedError: Server disconnected
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/dispatcher.py", line 309, in _process_update
response = await self.feed_update(bot, update, **kwargs)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/dispatcher.py", line 158, in feed_update
response = await self.update.wrap_outer_middleware(
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/middlewares/error.py", line 25, in __call__
return await handler(event, data)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/middlewares/user_context.py", line 27, in __call__
return await handler(event, data)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/fsm/middleware.py", line 41, in __call__
return await handler(event, data)
File "/home/allcups/PycharmProjects/spec/src/app/entrypoints/telegram_bot/middlewares/logging.py", line 96, in __call__
await handler(event, data)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/event/telegram.py", line 121, in trigger
return await wrapped_inner(event, kwargs)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/event/handler.py", line 43, in call
return await wrapped()
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/dispatcher.py", line 276, in _listen_update
return await self.propagate_event(update_type=update_type, event=event, **kwargs)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/router.py", line 128, in propagate_event
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/router.py", line 123, in _wrapped
return await self._propagate_event(
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/router.py", line 156, in _propagate_event
response = await router.propagate_event(update_type=update_type, event=event, **kwargs)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/router.py", line 128, in propagate_event
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/router.py", line 123, in _wrapped
return await self._propagate_event(
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/router.py", line 148, in _propagate_event
response = await observer.trigger(event, **kwargs)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/event/telegram.py", line 121, in trigger
return await wrapped_inner(event, kwargs)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/dispatcher/event/handler.py", line 43, in call
return await wrapped()
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/dependency_injector/wiring.py", line 994, in _patched
return await _async_inject(
File "src/dependency_injector/_cwiring.pyx", line 66, in _async_inject
File "/home/allcups/PycharmProjects/spec/src/app/entrypoints/telegram_bot/handlers/groupchat/messages.py", line 49, in chatting_with_bot
sending_bot_message = await msg.reply(bot_message.content)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/methods/base.py", line 84, in emit
return await bot(self)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/client/bot.py", line 441, in __call__
return await self.session(self, method, timeout=request_timeout)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/client/session/base.py", line 257, in __call__
return cast(TelegramType, await middleware(bot, method))
File "/home/allcups/PycharmProjects/spec/src/app/entrypoints/telegram_bot/utils/smart_session.py", line 78, in make_request
raise e
File "/home/allcups/PycharmProjects/spec/src/app/entrypoints/telegram_bot/utils/smart_session.py", line 68, in make_request
res = await super().make_request(bot, method, timeout)
File "/home/allcups/PycharmProjects/spec/src/app/entrypoints/telegram_bot/utils/smart_session.py", line 44, in make_request
raise e
File "/home/allcups/PycharmProjects/spec/src/app/entrypoints/telegram_bot/utils/smart_session.py", line 37, in make_request
res = await super().make_request(bot, method, timeout)
File "/home/allcups/PycharmProjects/spec/.venv/lib/python3.9/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
raise TelegramNetworkError(method=method, message=f"{type(e).__name__}: {e}")
aiogram.exceptions.TelegramNetworkError: HTTP Client says - ServerDisconnectedError: Server disconnected
{"type":"aiogram_session","bot":"000000","method":{"offset":275264410,"timeout":10,"allowed_updates":[]},"timeout":70,"api":{"base":"https://api.telegram.org/bot{token}/{method}","file":"https://api.telegram.org/file/bot{token}/{path}","is_local":false,"wrap_local_file":"<aiogram.client.telegram.BareFilesPathWrapper object at 0x7f1ae1da0610>"},"url":"https://api.telegram.org/bot000000/getUpdates","response":[],"time_spent_ms":10141.04276999933,"event":"API response","level":"debug","timestamp":1707064567.125994}
{"type":"aiogram_session","bot":"000000","method":{"offset":275264410,"timeout":10,"allowed_updates":[]},"timeout":70,"api":{"base":"https://api.telegram.org/bot{token}/{method}","file":"https://api.telegram.org/file/bot{token}/{path}","is_local":false,"wrap_local_file":"<aiogram.client.telegram.BareFilesPathWrapper object at 0x7f1ae1da0610>"},"url":"https://api.telegram.org/bot000000/getUpdates","event":"Making request to API","level":"debug","timestamp":1707064567.1260796}
Версия aiogram - 3.3.0