This commit is contained in:
Timothy Jaeryang Baek committed 2026-06-25 03:31:45 +01:00
1 parent 35f8bf97e3
commit b5c43968db
32 files changed
+2251 -120

No files matched your search

+63 -4
View File
@@ -4,6 +4,7 @@ from typing import Optional
from fastapi import APIRouter, Depends, HTTPException, Request, status
from fastapi.concurrency import run_in_threadpool
from open_webui.constants import ERROR_MESSAGES
from open_webui.events import EVENTS, publish_event
from open_webui.internal.db import get_async_session
from open_webui.models.config import Config
from open_webui.models.feedbacks import (
@@ -291,7 +292,19 @@ async def update_config(
if form_data.EVALUATION_ARENA_MODELS is not None:
updates['evaluation.arena.models'] = form_data.EVALUATION_ARENA_MODELS
await Config.upsert(updates)
return await get_config_values(EVALUATION_CONFIG_KEYS)
values = await get_config_values(EVALUATION_CONFIG_KEYS)
await publish_event(
request,
EVENTS.CONFIG_UPDATED,
actor=user,
subject_id='evaluation',
data={
'keys': list(updates.keys()),
'arena_enabled': values.get('ENABLE_EVALUATION_ARENA_MODELS'),
'arena_model_count': len(values.get('EVALUATION_ARENA_MODELS') or []),
},
)
return values
@router.get('/feedbacks/models', response_model=list[str])
@@ -305,8 +318,19 @@ async def get_all_feedback_ids(user=Depends(get_admin_user), db: AsyncSession =
@router.delete('/feedbacks/all')
async def delete_all_feedbacks(user=Depends(get_admin_user), db: AsyncSession = Depends(get_async_session)):
async def delete_all_feedbacks(
request: Request,
user=Depends(get_admin_user),
db: AsyncSession = Depends(get_async_session),
):
success = await Feedbacks.delete_all_feedbacks(db=db)
if success:
await publish_event(
request,
EVENTS.FEEDBACK_DELETED_ALL,
actor=user,
subject_id='all',
)
return success
@@ -338,8 +362,19 @@ async def get_user_feedbacks(
@router.delete('/feedbacks', response_model=bool)
async def delete_feedbacks(user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session)):
async def delete_feedbacks(
request: Request,
user=Depends(get_verified_user),
db: AsyncSession = Depends(get_async_session),
):
success = await Feedbacks.delete_feedbacks_by_user_id(user.id, db=db)
if success:
await publish_event(
request,
EVENTS.FEEDBACK_DELETED_ALL,
actor=user,
subject_id=user.id, subject_type='user',
)
return success
@@ -383,6 +418,13 @@ async def create_feedback(
detail=ERROR_MESSAGES.DEFAULT(),
)
await publish_event(
request,
EVENTS.FEEDBACK_CREATED,
actor=user,
subject_id=feedback.id,
data={'rating': getattr(feedback, 'rating', None)},
)
return feedback
@@ -401,6 +443,7 @@ async def get_feedback_by_id(id: str, user=Depends(get_verified_user), db: Async
@router.post('/feedback/{id}', response_model=FeedbackModel)
async def update_feedback_by_id(
request: Request,
id: str,
form_data: FeedbackForm,
user=Depends(get_verified_user),
@@ -414,12 +457,22 @@ async def update_feedback_by_id(
if not feedback:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND)
await publish_event(
request,
EVENTS.FEEDBACK_UPDATED,
actor=user,
subject_id=feedback.id,
data={'rating': getattr(feedback, 'rating', None)},
)
return feedback
@router.delete('/feedback/{id}')
async def delete_feedback_by_id(
id: str, user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session)
request: Request,
id: str,
user=Depends(get_verified_user),
db: AsyncSession = Depends(get_async_session),
):
if user.role == 'admin':
success = await Feedbacks.delete_feedback_by_id(id=id, db=db)
@@ -429,4 +482,10 @@ async def delete_feedback_by_id(
if not success:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND)
await publish_event(
request,
EVENTS.FEEDBACK_DELETED,
actor=user,
subject_id=id,
)
return success