|
@@ -8,49 +8,46 @@ from open_webui.apps.webui.models.models import (
|
|
)
|
|
)
|
|
from open_webui.constants import ERROR_MESSAGES
|
|
from open_webui.constants import ERROR_MESSAGES
|
|
from fastapi import APIRouter, Depends, HTTPException, Request, status
|
|
from fastapi import APIRouter, Depends, HTTPException, Request, status
|
|
-from open_webui.utils.utils import get_admin_user, get_verified_user
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+from open_webui.utils.utils import get_admin_user, get_verified_user, has_access
|
|
|
|
|
|
router = APIRouter()
|
|
router = APIRouter()
|
|
|
|
|
|
|
|
+
|
|
###########################
|
|
###########################
|
|
-# getModels
|
|
|
|
|
|
+# GetModels
|
|
###########################
|
|
###########################
|
|
|
|
|
|
|
|
|
|
@router.get("/", response_model=list[ModelResponse])
|
|
@router.get("/", response_model=list[ModelResponse])
|
|
async def get_models(id: Optional[str] = None, user=Depends(get_verified_user)):
|
|
async def get_models(id: Optional[str] = None, user=Depends(get_verified_user)):
|
|
- if id:
|
|
|
|
- model = Models.get_model_by_id(id)
|
|
|
|
- if model:
|
|
|
|
- return [model]
|
|
|
|
- else:
|
|
|
|
- raise HTTPException(
|
|
|
|
- status_code=status.HTTP_401_UNAUTHORIZED,
|
|
|
|
- detail=ERROR_MESSAGES.NOT_FOUND,
|
|
|
|
- )
|
|
|
|
|
|
+ if user.role == "admin":
|
|
|
|
+ return Models.get_models()
|
|
else:
|
|
else:
|
|
- return Models.get_all_models()
|
|
|
|
|
|
+ return Models.get_models_by_user_id(user.id)
|
|
|
|
|
|
|
|
|
|
############################
|
|
############################
|
|
-# AddNewModel
|
|
|
|
|
|
+# CreateNewModel
|
|
############################
|
|
############################
|
|
|
|
|
|
|
|
|
|
-@router.post("/add", response_model=Optional[ModelModel])
|
|
|
|
-async def add_new_model(
|
|
|
|
- request: Request,
|
|
|
|
|
|
+@router.post("/create", response_model=Optional[ModelModel])
|
|
|
|
+async def create_new_model(
|
|
form_data: ModelForm,
|
|
form_data: ModelForm,
|
|
- user=Depends(get_admin_user),
|
|
|
|
|
|
+ user=Depends(get_verified_user),
|
|
):
|
|
):
|
|
- if form_data.id in request.app.state.MODELS:
|
|
|
|
|
|
+
|
|
|
|
+ model = Models.get_model_by_id(form_data.id)
|
|
|
|
+ if model:
|
|
raise HTTPException(
|
|
raise HTTPException(
|
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
detail=ERROR_MESSAGES.MODEL_ID_TAKEN,
|
|
detail=ERROR_MESSAGES.MODEL_ID_TAKEN,
|
|
)
|
|
)
|
|
|
|
+
|
|
else:
|
|
else:
|
|
model = Models.insert_new_model(form_data, user.id)
|
|
model = Models.insert_new_model(form_data, user.id)
|
|
-
|
|
|
|
if model:
|
|
if model:
|
|
return model
|
|
return model
|
|
else:
|
|
else:
|
|
@@ -60,37 +57,49 @@ async def add_new_model(
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
+###########################
|
|
|
|
+# GetModelById
|
|
|
|
+###########################
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+@router.get("/id/{id}", response_model=Optional[ModelResponse])
|
|
|
|
+async def get_model_by_id(id: str, user=Depends(get_verified_user)):
|
|
|
|
+ model = Models.get_model_by_id(id)
|
|
|
|
+ if model:
|
|
|
|
+ if (
|
|
|
|
+ user.role == "admin"
|
|
|
|
+ or model.user_id == user.id
|
|
|
|
+ or has_access(user.id, "read", model.access_control)
|
|
|
|
+ ):
|
|
|
|
+ return model
|
|
|
|
+ else:
|
|
|
|
+ raise HTTPException(
|
|
|
|
+ status_code=status.HTTP_401_UNAUTHORIZED,
|
|
|
|
+ detail=ERROR_MESSAGES.NOT_FOUND,
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+
|
|
############################
|
|
############################
|
|
# UpdateModelById
|
|
# UpdateModelById
|
|
############################
|
|
############################
|
|
|
|
|
|
|
|
|
|
-@router.post("/update", response_model=Optional[ModelModel])
|
|
|
|
|
|
+@router.post("/id/{id}/update", response_model=Optional[ModelModel])
|
|
async def update_model_by_id(
|
|
async def update_model_by_id(
|
|
- request: Request,
|
|
|
|
id: str,
|
|
id: str,
|
|
form_data: ModelForm,
|
|
form_data: ModelForm,
|
|
- user=Depends(get_admin_user),
|
|
|
|
|
|
+ user=Depends(get_verified_user),
|
|
):
|
|
):
|
|
model = Models.get_model_by_id(id)
|
|
model = Models.get_model_by_id(id)
|
|
- if model:
|
|
|
|
- model = Models.update_model_by_id(id, form_data)
|
|
|
|
- return model
|
|
|
|
- else:
|
|
|
|
- if form_data.id in request.app.state.MODELS:
|
|
|
|
- model = Models.insert_new_model(form_data, user.id)
|
|
|
|
- if model:
|
|
|
|
- return model
|
|
|
|
- else:
|
|
|
|
- raise HTTPException(
|
|
|
|
- status_code=status.HTTP_401_UNAUTHORIZED,
|
|
|
|
- detail=ERROR_MESSAGES.DEFAULT(),
|
|
|
|
- )
|
|
|
|
- else:
|
|
|
|
- raise HTTPException(
|
|
|
|
- status_code=status.HTTP_401_UNAUTHORIZED,
|
|
|
|
- detail=ERROR_MESSAGES.DEFAULT(),
|
|
|
|
- )
|
|
|
|
|
|
+
|
|
|
|
+ if not model:
|
|
|
|
+ raise HTTPException(
|
|
|
|
+ status_code=status.HTTP_401_UNAUTHORIZED,
|
|
|
|
+ detail=ERROR_MESSAGES.NOT_FOUND,
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ model = Models.update_model_by_id(id, form_data)
|
|
|
|
+ return model
|
|
|
|
|
|
|
|
|
|
############################
|
|
############################
|
|
@@ -98,7 +107,20 @@ async def update_model_by_id(
|
|
############################
|
|
############################
|
|
|
|
|
|
|
|
|
|
-@router.delete("/delete", response_model=bool)
|
|
|
|
-async def delete_model_by_id(id: str, user=Depends(get_admin_user)):
|
|
|
|
|
|
+@router.delete("/id/{id}/delete", response_model=bool)
|
|
|
|
+async def delete_model_by_id(id: str, user=Depends(get_verified_user)):
|
|
|
|
+ model = Models.get_model_by_id(id)
|
|
|
|
+ if not model:
|
|
|
|
+ raise HTTPException(
|
|
|
|
+ status_code=status.HTTP_401_UNAUTHORIZED,
|
|
|
|
+ detail=ERROR_MESSAGES.NOT_FOUND,
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ if model.user_id != user.id:
|
|
|
|
+ raise HTTPException(
|
|
|
|
+ status_code=status.HTTP_401_UNAUTHORIZED,
|
|
|
|
+ detail=ERROR_MESSAGES.UNAUTHORIZED,
|
|
|
|
+ )
|
|
|
|
+
|
|
result = Models.delete_model_by_id(id)
|
|
result = Models.delete_model_by_id(id)
|
|
return result
|
|
return result
|