From 9e3fac0b943bf8a47546bdc3c61f761c8f2caa12 Mon Sep 17 00:00:00 2001 From: Dmitry Afanasyev <71835315+Balshgit@users.noreply.github.com> Date: Wed, 11 Oct 2023 14:21:50 +0300 Subject: [PATCH] add gpt/chat api prefix (#33) * add gpt/chat api prefix * add chatgpt backend url --- bot_microservice/constants.py | 7 +- bot_microservice/core/bot/commands.py | 2 +- bot_microservice/core/bot/repository.py | 4 +- bot_microservice/settings/.env.ci.runtests | 1 + bot_microservice/settings/.env.local.runtests | 1 + bot_microservice/settings/.env.template | 1 + bot_microservice/settings/config.py | 11 +- bot_microservice/tests/integration/utils.py | 4 +- chatgpt_microservice/client/js/chat.js | 4 +- chatgpt_microservice/deprecated/free_gpt.cpp | 78 +++++++++++ chatgpt_microservice/include/cfg.h | 2 +- chatgpt_microservice/include/free_gpt.h | 1 - chatgpt_microservice/src/free_gpt.cpp | 129 +++++------------- chatgpt_microservice/src/main.cpp | 7 +- 14 files changed, 142 insertions(+), 110 deletions(-) diff --git a/bot_microservice/constants.py b/bot_microservice/constants.py index 0f93633..fcea1a7 100644 --- a/bot_microservice/constants.py +++ b/bot_microservice/constants.py @@ -45,7 +45,6 @@ class ChatGptModelsEnum(StrEnum): gpt_3_5_turbo_stream_Vitalentum = "gpt-3.5-turbo-stream-Vitalentum" gpt_3_5_turbo_stream_GptGo = "gpt-3.5-turbo-stream-GptGo" gpt_3_5_turbo_stream_Aibn = "gpt-3.5-turbo-stream-Aibn" - gpt_3_5_turbo_ChatgptDuo = "gpt-3.5-turbo-ChatgptDuo" gpt_3_5_turbo_stream_FreeGpt = "gpt-3.5-turbo-stream-FreeGpt" gpt_3_5_turbo_stream_Cromicle = "gpt-3.5-turbo-stream-Cromicle" gpt_4_stream_Chatgpt4Online = "gpt-4-stream-Chatgpt4Online" @@ -53,6 +52,7 @@ class ChatGptModelsEnum(StrEnum): gpt_3_5_turbo_stream_ChatgptDemo = "gpt-3.5-turbo-stream-ChatgptDemo" gpt_3_5_turbo_stream_H2o = "gpt-3.5-turbo-stream-H2o" gpt_3_5_turbo_stream_gptforlove = "gpt-3.5-turbo-stream-gptforlove" + gpt_3_5_turbo_ChatgptDuo = "gpt-3.5-turbo-ChatgptDuo" @classmethod def values(cls) -> set[str]: @@ -60,7 +60,4 @@ class ChatGptModelsEnum(StrEnum): @staticmethod def _deprecated() -> set[str]: - return { - "gpt-3.5-turbo-stream-H2o", - "gpt-3.5-turbo-stream-gptforlove", - } + return {"gpt-3.5-turbo-stream-H2o", "gpt-3.5-turbo-stream-gptforlove", "gpt-3.5-turbo-ChatgptDuo"} diff --git a/bot_microservice/core/bot/commands.py b/bot_microservice/core/bot/commands.py index 0384862..880453c 100644 --- a/bot_microservice/core/bot/commands.py +++ b/bot_microservice/core/bot/commands.py @@ -45,7 +45,7 @@ async def about_bot(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: async def website(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: if not update.effective_message: return None - website = urljoin(settings.DOMAIN, f"{settings.URL_PREFIX}/chat/") + website = urljoin(settings.DOMAIN, f"{settings.chat_prefix}/") await update.effective_message.reply_text(f"Веб версия: {website}") diff --git a/bot_microservice/core/bot/repository.py b/bot_microservice/core/bot/repository.py index 589b659..2c2d328 100644 --- a/bot_microservice/core/bot/repository.py +++ b/bot_microservice/core/bot/repository.py @@ -9,7 +9,7 @@ from loguru import logger from sqlalchemy import delete, desc, select, update from sqlalchemy.dialects.sqlite import insert -from constants import CHATGPT_BASE_URI, INVALID_GPT_REQUEST_MESSAGES +from constants import INVALID_GPT_REQUEST_MESSAGES from core.bot.models.chat_gpt import ChatGpt from infra.database.db_adapter import Database from settings.config import AppSettings @@ -86,7 +86,7 @@ class ChatGPTRepository: transport = AsyncHTTPTransport(retries=3) async with AsyncClient(base_url=self.settings.GPT_BASE_HOST, transport=transport, timeout=50) as client: - return await client.post(CHATGPT_BASE_URI, json=data, timeout=50) + return await client.post(self.settings.chatgpt_backend_url, json=data, timeout=50) @staticmethod def _build_request_data(*, question: str, chatgpt_model: str) -> dict[str, Any]: diff --git a/bot_microservice/settings/.env.ci.runtests b/bot_microservice/settings/.env.ci.runtests index 5c70e1d..9830aa1 100644 --- a/bot_microservice/settings/.env.ci.runtests +++ b/bot_microservice/settings/.env.ci.runtests @@ -14,6 +14,7 @@ START_WITH_WEBHOOK="false" # ==== domain settings ==== DOMAIN="http://localhost" URL_PREFIX= +CHAT_PREFIX="/chat" # ==== gpt settings ==== GPT_BASE_HOST="http://localhost" diff --git a/bot_microservice/settings/.env.local.runtests b/bot_microservice/settings/.env.local.runtests index 5c70e1d..9830aa1 100644 --- a/bot_microservice/settings/.env.local.runtests +++ b/bot_microservice/settings/.env.local.runtests @@ -14,6 +14,7 @@ START_WITH_WEBHOOK="false" # ==== domain settings ==== DOMAIN="http://localhost" URL_PREFIX= +CHAT_PREFIX="/chat" # ==== gpt settings ==== GPT_BASE_HOST="http://localhost" diff --git a/bot_microservice/settings/.env.template b/bot_microservice/settings/.env.template index ffc4742..748fa06 100644 --- a/bot_microservice/settings/.env.template +++ b/bot_microservice/settings/.env.template @@ -33,6 +33,7 @@ START_WITH_WEBHOOK="false" # ==== domain settings ==== DOMAIN="https://mydomain.com" URL_PREFIX="/gpt" +CHAT_PREFIX="/chat" # ==== gpt settings ==== GPT_BASE_HOST="http://chatgpt_chat_service:8858" diff --git a/bot_microservice/settings/config.py b/bot_microservice/settings/config.py index 39be065..8a00715 100644 --- a/bot_microservice/settings/config.py +++ b/bot_microservice/settings/config.py @@ -8,7 +8,7 @@ from pydantic import model_validator from pydantic_settings import BaseSettings from yarl import URL -from constants import API_PREFIX +from constants import API_PREFIX, CHATGPT_BASE_URI BASE_DIR = Path(__file__).parent.parent SHARED_DIR = BASE_DIR.resolve().joinpath("shared") @@ -76,6 +76,7 @@ class AppSettings(SentrySettings, LoggingSettings, BaseSettings): START_WITH_WEBHOOK: bool = False DOMAIN: str = "https://localhost" URL_PREFIX: str = "" + CHAT_PREFIX: str = "" DB_NAME: str = "chatgpt.db" DB_ECHO: bool = False @@ -107,6 +108,14 @@ class AppSettings(SentrySettings, LoggingSettings, BaseSettings): return "/" + "/".join([self.URL_PREFIX.strip("/"), API_PREFIX.strip("/")]) return API_PREFIX + @cached_property + def chat_prefix(self) -> str: + return self.URL_PREFIX + self.CHAT_PREFIX + + @cached_property + def chatgpt_backend_url(self) -> str: + return self.chat_prefix + CHATGPT_BASE_URI + @cached_property def token_part(self) -> str: return self.TELEGRAM_API_TOKEN[15:30] diff --git a/bot_microservice/tests/integration/utils.py b/bot_microservice/tests/integration/utils.py index b952cc0..d89668e 100644 --- a/bot_microservice/tests/integration/utils.py +++ b/bot_microservice/tests/integration/utils.py @@ -4,7 +4,7 @@ from typing import Any, Iterator import respx from httpx import Response -from constants import CHATGPT_BASE_URI +from settings.config import settings @contextmanager @@ -16,7 +16,7 @@ def mocked_ask_question_api( assert_all_called=True, base_url=host, ) as respx_mock: - ask_question_route = respx_mock.post(url=CHATGPT_BASE_URI, name="ask_question") + ask_question_route = respx_mock.post(url=settings.chatgpt_backend_url, name="ask_question") ask_question_route.return_value = return_value ask_question_route.side_effect = side_effect yield respx_mock diff --git a/chatgpt_microservice/client/js/chat.js b/chatgpt_microservice/client/js/chat.js index bf195a0..58585b7 100644 --- a/chatgpt_microservice/client/js/chat.js +++ b/chatgpt_microservice/client/js/chat.js @@ -112,7 +112,7 @@ const ask_gpt = async (message) => { await new Promise((r) => setTimeout(r, 1000)); window.scrollTo(0, 0); - const response = await fetch(`/backend-api/v2/conversation`, { + const response = await fetch(`{{api_path}}/backend-api/v2/conversation`, { method: `POST`, signal: window.controller.signal, headers: { @@ -151,7 +151,7 @@ const ask_gpt = async (message) => { if ( chunk.includes( - `