diff --git a/backend/open_webui/functions.py b/backend/open_webui/functions.py index 7b102d5e56..d38d6b8367 100644 --- a/backend/open_webui/functions.py +++ b/backend/open_webui/functions.py @@ -36,7 +36,8 @@ from open_webui.utils.plugin import ( ) from open_webui.utils.access_control import check_base_model_access -from open_webui.env import GLOBAL_LOG_LEVEL +from open_webui.env import GLOBAL_LOG_LEVEL, BYPASS_MODEL_ACCESS_CONTROL +from open_webui.config import BYPASS_ADMIN_ACCESS_CONTROL from open_webui.utils.misc import ( add_or_update_system_message, @@ -260,7 +261,12 @@ async def generate_function_chat_completion(request, form_data, user, models: di if model_info: if model_info.base_model_id: form_data['model'] = model_info.base_model_id - await check_base_model_access(user, model_info.base_model_id) + await check_base_model_access( + user, + model_info.base_model_id, + bypass_filter=BYPASS_MODEL_ACCESS_CONTROL + or (isinstance(user, UserModel) and user.role == 'admin' and BYPASS_ADMIN_ACCESS_CONTROL), + ) params = model_info.params.model_dump() diff --git a/backend/open_webui/routers/models.py b/backend/open_webui/routers/models.py index 193e58530a..fe7cccf3ce 100644 --- a/backend/open_webui/routers/models.py +++ b/backend/open_webui/routers/models.py @@ -332,6 +332,11 @@ async def import_models( return True else: raise HTTPException(status_code=400, detail='Invalid JSON format') + except HTTPException: + # Preserve intentional HTTP status codes (e.g. 403 from base-model access + # checks, 400 from validation). The broad handler below otherwise masks + # them as 500, which misreports authz failures as server errors. + raise except Exception as e: log.exception(e) raise HTTPException(status_code=500, detail=str(e))