Добавлены endpoints для управления параметрами формулы, удалены ненужные методы, исправлена документация

This commit is contained in:
2026-01-28 00:55:54 +03:00
parent 671ee4657a
commit f3e31e4310
5 changed files with 264 additions and 55 deletions

View File

@@ -23,7 +23,9 @@ from app.schemas import (
ScoreMetadata,
ScoreRequest,
ScoreResponse,
ScoringParamsResponse,
StatsResponse,
UpdateScoringParamsRequest,
VectorStoreStats,
WarmupResponse,
)
@@ -53,7 +55,7 @@ RAGServiceDep = Annotated[RAGService, Depends(get_service)]
summary="Проверка здоровья сервиса",
tags=["health"],
)
async def health_check(service: RAGServiceDep) -> HealthResponse:
async def health_check(service: RAGServiceDep, _auth: AuthDep) -> HealthResponse:
"""
Проверяет состояние сервиса.
@@ -305,7 +307,6 @@ async def get_stats(service: RAGServiceDep, _auth: AuthDep) -> StatsResponse:
model_name=stats["model_name"],
model_loaded=stats["model_loaded"],
device=stats["device"],
cache_dir=stats["cache_dir"],
vector_store=VectorStoreStats(**stats["vector_store"]),
)
@@ -349,37 +350,80 @@ async def warmup(service: RAGServiceDep, _auth: AuthDep) -> WarmupResponse:
)
@router.post(
"/save",
response_model=dict,
# =============================================================================
# Scoring Parameters
# =============================================================================
@router.get(
"/scoring/params",
response_model=ScoringParamsResponse,
responses={
401: {"model": ErrorResponse, "description": "Не авторизован"},
403: {"model": ErrorResponse, "description": "Доступ запрещён"},
},
summary="Сохранить векторы на диск",
tags=["management"],
summary="Получить параметры формулы расчета score",
tags=["scoring"],
)
async def save_vectors(service: RAGServiceDep, _auth: AuthDep) -> dict:
async def get_scoring_params(
service: RAGServiceDep,
_auth: AuthDep,
) -> ScoringParamsResponse:
"""
Сохраняет векторы на диск.
Возвращает текущие параметры формулы расчета score.
Args:
service: RAG сервис
Returns:
dict: Результат сохранения
ScoringParamsResponse: Текущие параметры формулы
"""
params = service.vector_store.get_scoring_params()
return ScoringParamsResponse(**params)
@router.put(
"/scoring/params",
response_model=ScoringParamsResponse,
responses={
400: {"model": ErrorResponse, "description": "Ошибка в запросе"},
401: {"model": ErrorResponse, "description": "Не авторизован"},
403: {"model": ErrorResponse, "description": "Доступ запрещён"},
},
summary="Обновить параметры формулы расчета score",
tags=["scoring"],
)
async def update_scoring_params(
request: UpdateScoringParamsRequest,
service: RAGServiceDep,
_auth: AuthDep,
) -> ScoringParamsResponse:
"""
Обновляет параметры формулы расчета score.
Можно обновить один или несколько параметров одновременно.
Параметры, которые не указаны, остаются без изменений.
Args:
request: Запрос с новыми параметрами
service: RAG сервис
Returns:
ScoringParamsResponse: Обновленные параметры формулы
Raises:
HTTPException: При невалидных значениях параметров
"""
try:
service.save_vectors()
return {
"success": True,
"message": "Векторы сохранены на диск",
"positive_count": service.vector_store.positive_count,
"negative_count": service.vector_store.negative_count,
}
except Exception as e:
logger.error(f"Ошибка сохранения векторов: {e}")
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail={"detail": str(e), "error_type": "VectorStoreError"},
params = service.vector_store.update_scoring_params(
score_multiplier=request.score_multiplier,
k_min=request.k_min,
k_max=request.k_max,
base_multiplier_factor=request.base_multiplier_factor,
)
return ScoringParamsResponse(**params)
except ValueError as e:
logger.warning(f"Невалидные параметры формулы: {e}")
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail={"detail": str(e), "error_type": "ValueError"},
)