mirror of
https://github.com/Balshgit/gpt_chat_bot.git
synced 2025-09-10 17:20:41 +03:00
* remove fastapi users dependency * add user service to chatbot service * add user save on bot info command * add user model to admin * fix tests
113 lines
3.7 KiB
Python
113 lines
3.7 KiB
Python
from fastapi import APIRouter, Body, Depends, Path
|
||
from starlette import status
|
||
from starlette.responses import JSONResponse, Response
|
||
from telegram import Update
|
||
|
||
from api.bot.deps import get_bot_queue, get_chatgpt_service, get_update_from_request
|
||
from api.bot.serializers import (
|
||
ChatGptModelSerializer,
|
||
ChatGptModelsPrioritySerializer,
|
||
GETChatGptModelsSerializer,
|
||
LightChatGptModel,
|
||
)
|
||
from core.bot.app import BotQueue
|
||
from core.bot.services import ChatGptService
|
||
from settings.config import settings
|
||
|
||
router = APIRouter()
|
||
|
||
|
||
@router.post(
|
||
f"/{settings.token_part}",
|
||
name="bot:process_bot_updates",
|
||
response_class=Response,
|
||
status_code=status.HTTP_202_ACCEPTED,
|
||
summary="process bot updates",
|
||
include_in_schema=False,
|
||
)
|
||
async def process_bot_updates(
|
||
tg_update: Update = Depends(get_update_from_request),
|
||
queue: BotQueue = Depends(get_bot_queue),
|
||
) -> None:
|
||
await queue.put_updates_on_queue(tg_update)
|
||
|
||
|
||
@router.get(
|
||
"/chatgpt/models",
|
||
name="bot:models_list",
|
||
response_class=JSONResponse,
|
||
response_model=list[ChatGptModelSerializer],
|
||
status_code=status.HTTP_200_OK,
|
||
summary="list of models",
|
||
)
|
||
async def models_list(
|
||
chatgpt_service: ChatGptService = Depends(get_chatgpt_service),
|
||
) -> JSONResponse:
|
||
"""Получить список всех моделей"""
|
||
models = await chatgpt_service.get_chatgpt_models()
|
||
return JSONResponse(
|
||
content=GETChatGptModelsSerializer(data=models).model_dump(), status_code=status.HTTP_200_OK # type: ignore
|
||
)
|
||
|
||
|
||
@router.put(
|
||
"/chatgpt/models/{model_id}/priority",
|
||
name="bot:change_model_priority",
|
||
response_class=Response,
|
||
status_code=status.HTTP_202_ACCEPTED,
|
||
summary="change gpt model priority",
|
||
)
|
||
async def change_model_priority(
|
||
model_id: int = Path(..., gt=0, description="Id модели для обновления приореитета"),
|
||
chatgpt_service: ChatGptService = Depends(get_chatgpt_service),
|
||
gpt_model: ChatGptModelsPrioritySerializer = Body(...),
|
||
) -> None:
|
||
"""Изменить приоритет модели в выдаче"""
|
||
await chatgpt_service.change_chatgpt_model_priority(model_id=model_id, priority=gpt_model.priority)
|
||
|
||
|
||
@router.put(
|
||
"/chatgpt/models/priority/reset",
|
||
name="bot:reset_models_priority",
|
||
response_class=Response,
|
||
status_code=status.HTTP_202_ACCEPTED,
|
||
summary="reset all model priority to default",
|
||
)
|
||
async def reset_models_priority(
|
||
chatgpt_service: ChatGptService = Depends(get_chatgpt_service),
|
||
) -> None:
|
||
"""Сбросить приоритеты у всех моделей на дефолтное значение - 0"""
|
||
await chatgpt_service.reset_all_chatgpt_models_priority()
|
||
|
||
|
||
@router.post(
|
||
"/chatgpt/models",
|
||
name="bot:add_new_model",
|
||
response_model=ChatGptModelSerializer,
|
||
status_code=status.HTTP_201_CREATED,
|
||
summary="add new model",
|
||
)
|
||
async def add_new_model(
|
||
chatgpt_service: ChatGptService = Depends(get_chatgpt_service),
|
||
gpt_model: LightChatGptModel = Body(...),
|
||
) -> JSONResponse:
|
||
"""Добавить новую модель"""
|
||
model = await chatgpt_service.add_chatgpt_model(gpt_model=gpt_model.model, priority=gpt_model.priority)
|
||
|
||
return JSONResponse(content=model, status_code=status.HTTP_201_CREATED)
|
||
|
||
|
||
@router.delete(
|
||
"/chatgpt/models/{model_id}",
|
||
name="bot:delete_gpt_model",
|
||
response_class=Response,
|
||
status_code=status.HTTP_204_NO_CONTENT,
|
||
summary="delete gpt model",
|
||
)
|
||
async def delete_model(
|
||
model_id: int = Path(..., gt=0, description="Id модели для удаления"),
|
||
chatgpt_service: ChatGptService = Depends(get_chatgpt_service),
|
||
) -> None:
|
||
"""Удалить gpt модель"""
|
||
await chatgpt_service.delete_chatgpt_model(model_id=model_id)
|