Dmitry Afanasyev 1e79c981c2
add user messages count action (#76)
* remove fastapi users dependency

* add user service to chatbot service

* add user save on bot info command

* add user model to admin

* fix tests
2024-01-07 02:14:44 +03:00

113 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)