|
from typing import Optional |
|
from fastapi import APIRouter, Depends, HTTPException, status, Request |
|
from pydantic import BaseModel |
|
|
|
from open_webui.apps.webui.models.users import Users, UserModel |
|
from open_webui.apps.webui.models.feedbacks import ( |
|
FeedbackModel, |
|
FeedbackResponse, |
|
FeedbackForm, |
|
Feedbacks, |
|
) |
|
|
|
from open_webui.constants import ERROR_MESSAGES |
|
from open_webui.utils.utils import get_admin_user, get_verified_user |
|
|
|
router = APIRouter() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.get("/config") |
|
async def get_config(request: Request, user=Depends(get_admin_user)): |
|
return { |
|
"ENABLE_EVALUATION_ARENA_MODELS": request.app.state.config.ENABLE_EVALUATION_ARENA_MODELS, |
|
"EVALUATION_ARENA_MODELS": request.app.state.config.EVALUATION_ARENA_MODELS, |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UpdateConfigForm(BaseModel): |
|
ENABLE_EVALUATION_ARENA_MODELS: Optional[bool] = None |
|
EVALUATION_ARENA_MODELS: Optional[list[dict]] = None |
|
|
|
|
|
@router.post("/config") |
|
async def update_config( |
|
request: Request, |
|
form_data: UpdateConfigForm, |
|
user=Depends(get_admin_user), |
|
): |
|
config = request.app.state.config |
|
if form_data.ENABLE_EVALUATION_ARENA_MODELS is not None: |
|
config.ENABLE_EVALUATION_ARENA_MODELS = form_data.ENABLE_EVALUATION_ARENA_MODELS |
|
if form_data.EVALUATION_ARENA_MODELS is not None: |
|
config.EVALUATION_ARENA_MODELS = form_data.EVALUATION_ARENA_MODELS |
|
return { |
|
"ENABLE_EVALUATION_ARENA_MODELS": config.ENABLE_EVALUATION_ARENA_MODELS, |
|
"EVALUATION_ARENA_MODELS": config.EVALUATION_ARENA_MODELS, |
|
} |
|
|
|
|
|
class FeedbackUserResponse(FeedbackResponse): |
|
user: Optional[UserModel] = None |
|
|
|
|
|
@router.get("/feedbacks/all", response_model=list[FeedbackUserResponse]) |
|
async def get_all_feedbacks(user=Depends(get_admin_user)): |
|
feedbacks = Feedbacks.get_all_feedbacks() |
|
return [ |
|
FeedbackUserResponse( |
|
**feedback.model_dump(), user=Users.get_user_by_id(feedback.user_id) |
|
) |
|
for feedback in feedbacks |
|
] |
|
|
|
|
|
@router.delete("/feedbacks/all") |
|
async def delete_all_feedbacks(user=Depends(get_admin_user)): |
|
success = Feedbacks.delete_all_feedbacks() |
|
return success |
|
|
|
|
|
@router.get("/feedbacks/all/export", response_model=list[FeedbackModel]) |
|
async def get_all_feedbacks(user=Depends(get_admin_user)): |
|
feedbacks = Feedbacks.get_all_feedbacks() |
|
return [ |
|
FeedbackModel( |
|
**feedback.model_dump(), user=Users.get_user_by_id(feedback.user_id) |
|
) |
|
for feedback in feedbacks |
|
] |
|
|
|
|
|
@router.get("/feedbacks/user", response_model=list[FeedbackUserResponse]) |
|
async def get_feedbacks(user=Depends(get_verified_user)): |
|
feedbacks = Feedbacks.get_feedbacks_by_user_id(user.id) |
|
return feedbacks |
|
|
|
|
|
@router.delete("/feedbacks", response_model=bool) |
|
async def delete_feedbacks(user=Depends(get_verified_user)): |
|
success = Feedbacks.delete_feedbacks_by_user_id(user.id) |
|
return success |
|
|
|
|
|
@router.post("/feedback", response_model=FeedbackModel) |
|
async def create_feedback( |
|
request: Request, |
|
form_data: FeedbackForm, |
|
user=Depends(get_verified_user), |
|
): |
|
feedback = Feedbacks.insert_new_feedback(user_id=user.id, form_data=form_data) |
|
if not feedback: |
|
raise HTTPException( |
|
status_code=status.HTTP_400_BAD_REQUEST, |
|
detail=ERROR_MESSAGES.DEFAULT(), |
|
) |
|
|
|
return feedback |
|
|
|
|
|
@router.get("/feedback/{id}", response_model=FeedbackModel) |
|
async def get_feedback_by_id(id: str, user=Depends(get_verified_user)): |
|
feedback = Feedbacks.get_feedback_by_id_and_user_id(id=id, user_id=user.id) |
|
|
|
if not feedback: |
|
raise HTTPException( |
|
status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND |
|
) |
|
|
|
return feedback |
|
|
|
|
|
@router.post("/feedback/{id}", response_model=FeedbackModel) |
|
async def update_feedback_by_id( |
|
id: str, form_data: FeedbackForm, user=Depends(get_verified_user) |
|
): |
|
feedback = Feedbacks.update_feedback_by_id_and_user_id( |
|
id=id, user_id=user.id, form_data=form_data |
|
) |
|
|
|
if not feedback: |
|
raise HTTPException( |
|
status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND |
|
) |
|
|
|
return feedback |
|
|
|
|
|
@router.delete("/feedback/{id}") |
|
async def delete_feedback_by_id(id: str, user=Depends(get_verified_user)): |
|
if user.role == "admin": |
|
success = Feedbacks.delete_feedback_by_id(id=id) |
|
else: |
|
success = Feedbacks.delete_feedback_by_id_and_user_id(id=id, user_id=user.id) |
|
|
|
if not success: |
|
raise HTTPException( |
|
status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND |
|
) |
|
|
|
return success |
|
|