open-webui/backend/apps/webui/routers/models.py

108 lines
2.9 KiB
Python
Raw Normal View History

2024-05-25 01:26:36 +00:00
from fastapi import Depends, FastAPI, HTTPException, status, Request
2024-05-24 07:26:00 +00:00
from datetime import datetime, timedelta
from typing import List, Union, Optional
from fastapi import APIRouter
from pydantic import BaseModel
import json
2024-05-26 08:15:48 +00:00
from apps.webui.models.models import Models, ModelModel, ModelForm, ModelResponse
2024-05-24 07:26:00 +00:00
from utils.utils import get_verified_user, get_admin_user
from constants import ERROR_MESSAGES
router = APIRouter()
###########################
2024-05-24 09:17:48 +00:00
# getModels
2024-05-24 07:26:00 +00:00
###########################
@router.get("/", response_model=List[ModelResponse])
async def get_models(user=Depends(get_verified_user)):
return Models.get_all_models()
############################
# AddNewModel
############################
@router.post("/add", response_model=Optional[ModelModel])
2024-05-25 05:21:57 +00:00
async def add_new_model(
request: Request, form_data: ModelForm, user=Depends(get_admin_user)
):
if form_data.id in request.app.state.MODELS:
2024-05-24 07:26:00 +00:00
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
2024-05-25 05:21:57 +00:00
detail=ERROR_MESSAGES.MODEL_ID_TAKEN,
2024-05-24 07:26:00 +00:00
)
2024-05-25 05:21:57 +00:00
else:
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(),
)
2024-05-24 07:26:00 +00:00
############################
# GetModelById
############################
2024-05-25 20:48:45 +00:00
@router.get("/", response_model=Optional[ModelModel])
2024-05-24 07:26:00 +00:00
async def get_model_by_id(id: str, user=Depends(get_verified_user)):
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,
)
############################
# UpdateModelById
############################
2024-05-25 20:48:45 +00:00
@router.post("/update", response_model=Optional[ModelModel])
2024-05-24 07:26:00 +00:00
async def update_model_by_id(
2024-05-25 01:26:36 +00:00
request: Request, id: str, form_data: ModelForm, user=Depends(get_admin_user)
2024-05-24 07:26:00 +00:00
):
model = Models.get_model_by_id(id)
if model:
model = Models.update_model_by_id(id, form_data)
return model
else:
2024-05-25 01:26:36 +00:00
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(),
)
2024-05-24 07:26:00 +00:00
############################
# DeleteModelById
############################
2024-05-25 20:48:45 +00:00
@router.delete("/delete", response_model=bool)
2024-05-24 07:26:00 +00:00
async def delete_model_by_id(id: str, user=Depends(get_admin_user)):
result = Models.delete_model_by_id(id)
return result