From 52df4d338f52b5b654afa775ad8de877cb3ce86b Mon Sep 17 00:00:00 2001 From: Dmitry Afanasyev <71835315+Balshgit@users.noreply.github.com> Date: Fri, 29 Sep 2023 15:29:06 +0300 Subject: [PATCH] add start entry test (#20) --- bot_microservice/constants.py | 2 +- bot_microservice/core/commands.py | 6 +- bot_microservice/settings/.env.template | 26 ++++++++- .../tests/integration/bot/test_bot_updates.py | 58 +++++++++++++++++-- deploy/Dockerfile | 20 ------- 5 files changed, 83 insertions(+), 29 deletions(-) diff --git a/bot_microservice/constants.py b/bot_microservice/constants.py index d96bdb4..5f34d23 100644 --- a/bot_microservice/constants.py +++ b/bot_microservice/constants.py @@ -3,7 +3,7 @@ from enum import StrEnum AUDIO_SEGMENT_DURATION = 120 * 1000 API_PREFIX = "/api" -CHAT_GPT_BASE_URI = "backend-api/v2/conversation" +CHAT_GPT_BASE_URI = "/backend-api/v2/conversation" class BotStagesEnum(StrEnum): diff --git a/bot_microservice/core/commands.py b/bot_microservice/core/commands.py index bf64e4b..9f24fda 100644 --- a/bot_microservice/core/commands.py +++ b/bot_microservice/core/commands.py @@ -37,9 +37,9 @@ async def about_bot(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: if not update.effective_message: return None await update.effective_message.reply_text( - "Бот использует бесплатную модель Chat-GPT3.5 для ответов на вопросы. " - "Принимает запросы на разных языках. \n\nБот так же умеет переводить голосовые сообщения в текст. " - "Просто пришлите голосовуху и получите поток сознания без запятых в виде текста", + f"Бот использует бесплатную модель {settings.GPT_MODEL} для ответов на вопросы. " + f"Принимает запросы на разных языках.\n\nБот так же умеет переводить русские голосовые сообщения в текст. " + f"Просто пришлите голосовуху и получите поток сознания в виде текста, но без знаков препинания", parse_mode="Markdown", ) diff --git a/bot_microservice/settings/.env.template b/bot_microservice/settings/.env.template index 80c5072..1826721 100644 --- a/bot_microservice/settings/.env.template +++ b/bot_microservice/settings/.env.template @@ -15,6 +15,8 @@ TELEGRAM_API_TOKEN="123456789:AABBCCDDEEFFaabbccddeeff-1234567890" DOMAIN="https://mydomain.com" URL_PREFIX="/gpt" +GPT_BASE_HOST="http://chat_service:8858" + # set to true to start with webhook. Else bot will start on polling method START_WITH_WEBHOOK="false" @@ -24,4 +26,26 @@ WORKERS_COUNT=1 RELOAD="true" DEBUG="true" -GPT_MODEL="gpt-3.5-turbo-stream-AItianhuSpace" +GPT_MODEL="gpt-3.5-turbo-stream-DeepAi" + +# "gpt-3.5-turbo-stream-openai" +# "gpt-3.5-turbo-Aichat" +# "gpt-4-ChatgptAi" +# "gpt-3.5-turbo-weWordle" +# "gpt-3.5-turbo-acytoo" +# "gpt-3.5-turbo-stream-DeepAi" +# "gpt-3.5-turbo-stream-H2o" +# "gpt-3.5-turbo-stream-yqcloud" +# "gpt-OpenAssistant-stream-HuggingChat" +# "gpt-4-turbo-stream-you" +# "gpt-3.5-turbo-AItianhu" +# "gpt-3-stream-binjie" +# "gpt-3.5-turbo-stream-CodeLinkAva" +# "gpt-4-stream-ChatBase" +# "gpt-3.5-turbo-stream-aivvm" +# "gpt-3.5-turbo-16k-stream-Ylokh" +# "gpt-3.5-turbo-stream-Vitalentum" +# "gpt-3.5-turbo-stream-GptGo" +# "gpt-3.5-turbo-stream-AItianhuSpace" +# "gpt-3.5-turbo-stream-Aibn" +# "gpt-3.5-turbo-ChatgptDuo" diff --git a/bot_microservice/tests/integration/bot/test_bot_updates.py b/bot_microservice/tests/integration/bot/test_bot_updates.py index 756e3b5..cdcb7fe 100644 --- a/bot_microservice/tests/integration/bot/test_bot_updates.py +++ b/bot_microservice/tests/integration/bot/test_bot_updates.py @@ -12,7 +12,7 @@ from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update from constants import BotStagesEnum from core.bot import BotApplication, BotQueue from main import Application -from settings.config import AppSettings +from settings.config import AppSettings, settings from tests.integration.bot.conftest import mocked_ask_question_api from tests.integration.bot.networking import MockedRequest from tests.integration.factories.bot import ( @@ -101,6 +101,40 @@ async def test_help_command( ) +async def test_start_entry( + main_application: Application, + test_settings: AppSettings, +) -> None: + with mock.patch.object( + telegram._bot.Bot, "send_message", return_value=lambda *args, **kwargs: (args, kwargs) + ) as mocked_send_message: + bot_update = BotUpdateFactory(message=BotMessageFactory.create_instance(text="/start")) + + await main_application.bot_app.application.process_update( + update=Update.de_json(data=bot_update, bot=main_application.bot_app.bot) + ) + + assert_that(mocked_send_message.call_args.kwargs).is_equal_to( + { + "text": "Выберете команду:", + "chat_id": bot_update["message"]["chat"]["id"], + "reply_markup": InlineKeyboardMarkup( + inline_keyboard=( + ( + InlineKeyboardButton(callback_data="about_me", text="Обо мне"), + InlineKeyboardButton(callback_data="website", text="Веб версия"), + ), + ( + InlineKeyboardButton(callback_data="help", text="Помощь"), + InlineKeyboardButton(callback_data="about_bot", text="О боте"), + ), + ) + ), + }, + include=["text", "chat_id", "reply_markup"], + ) + + async def test_about_me_callback_action( main_application: Application, test_settings: AppSettings, @@ -134,9 +168,9 @@ async def test_about_bot_callback_action( ) assert mocked_reply_text.call_args.args == ( - "Бот использует бесплатную модель Chat-GPT3.5 для ответов на вопросы. Принимает запросы на разных языках. " - "\n\nБот так же умеет переводить голосовые сообщения в текст. Просто пришлите голосовуху и получите поток " - "сознания без запятых в виде текста", + f"Бот использует бесплатную модель {settings.GPT_MODEL} для ответов на вопросы. " + f"Принимает запросы на разных языках.\n\nБот так же умеет переводить русские голосовые сообщения в текст. " + f"Просто пришлите голосовуху и получите поток сознания в виде текста, но без знаков препинания", ) assert mocked_reply_text.call_args.kwargs == {"parse_mode": "Markdown"} @@ -178,3 +212,19 @@ async def test_ask_question_action( }, include=["text", "chat_id"], ) + + +async def test_no_update_message( + main_application: Application, + test_settings: AppSettings, +) -> None: + with mock.patch.object( + telegram._bot.Bot, "send_message", return_value=lambda *args, **kwargs: (args, kwargs) + ) as mocked_send_message: + bot_update = BotUpdateFactory(message=None) + + await main_application.bot_app.application.process_update( + update=Update.de_json(data=bot_update, bot=main_application.bot_app.bot) + ) + + assert mocked_send_message.called is False diff --git a/deploy/Dockerfile b/deploy/Dockerfile index 9c7dc11..31d7d43 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -63,23 +63,3 @@ COPY --from=compile-image /app/.venv /app/.venv USER ${USER} ENV PATH="/app/.venv/bin:$PATH" - - -##===================== chat-service ================================ -#FROM compile-image as chat-service -# -#RUN printf "================ Start build chat-service. with USER: ${USER} ===============" -# -#WORKDIR /app/ -# -## Copying bot service -#COPY --chown=${USER}:${USER} ../chat_gpt_microservice /app/ -# -#COPY --from=compile-image /app/.venv /app/.venv -#ENV PATH="/app/.venv/bin:$PATH" -# -#USER ${USER} -# -#RUN chmod -R 777 translations -# -#CMD ["python3", "./run.py"] \ No newline at end of file