models.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. from typing import Optional
  2. from open_webui.apps.webui.models.models import (
  3. ModelForm,
  4. ModelModel,
  5. ModelResponse,
  6. Models,
  7. )
  8. from open_webui.constants import ERROR_MESSAGES
  9. from fastapi import APIRouter, Depends, HTTPException, Request, status
  10. from open_webui.utils.utils import get_admin_user, get_verified_user
  11. router = APIRouter()
  12. ###########################
  13. # getModels
  14. ###########################
  15. @router.get("/", response_model=list[ModelResponse])
  16. async def get_models(user=Depends(get_verified_user)):
  17. return Models.get_all_models()
  18. ############################
  19. # AddNewModel
  20. ############################
  21. @router.post("/add", response_model=Optional[ModelModel])
  22. async def add_new_model(
  23. request: Request,
  24. form_data: ModelForm,
  25. user=Depends(get_admin_user),
  26. ):
  27. if form_data.id in request.app.state.MODELS:
  28. raise HTTPException(
  29. status_code=status.HTTP_401_UNAUTHORIZED,
  30. detail=ERROR_MESSAGES.MODEL_ID_TAKEN,
  31. )
  32. else:
  33. model = Models.insert_new_model(form_data, user.id)
  34. if model:
  35. return model
  36. else:
  37. raise HTTPException(
  38. status_code=status.HTTP_401_UNAUTHORIZED,
  39. detail=ERROR_MESSAGES.DEFAULT(),
  40. )
  41. ############################
  42. # GetModelById
  43. ############################
  44. @router.get("/", response_model=Optional[ModelModel])
  45. async def get_model_by_id(id: str, user=Depends(get_verified_user)):
  46. model = Models.get_model_by_id(id)
  47. if model:
  48. return model
  49. else:
  50. raise HTTPException(
  51. status_code=status.HTTP_401_UNAUTHORIZED,
  52. detail=ERROR_MESSAGES.NOT_FOUND,
  53. )
  54. ############################
  55. # UpdateModelById
  56. ############################
  57. @router.post("/update", response_model=Optional[ModelModel])
  58. async def update_model_by_id(
  59. request: Request,
  60. id: str,
  61. form_data: ModelForm,
  62. user=Depends(get_admin_user),
  63. ):
  64. model = Models.get_model_by_id(id)
  65. if model:
  66. model = Models.update_model_by_id(id, form_data)
  67. return model
  68. else:
  69. if form_data.id in request.app.state.MODELS:
  70. model = Models.insert_new_model(form_data, user.id)
  71. if model:
  72. return model
  73. else:
  74. raise HTTPException(
  75. status_code=status.HTTP_401_UNAUTHORIZED,
  76. detail=ERROR_MESSAGES.DEFAULT(),
  77. )
  78. else:
  79. raise HTTPException(
  80. status_code=status.HTTP_401_UNAUTHORIZED,
  81. detail=ERROR_MESSAGES.DEFAULT(),
  82. )
  83. ############################
  84. # DeleteModelById
  85. ############################
  86. @router.delete("/delete", response_model=bool)
  87. async def delete_model_by_id(id: str, user=Depends(get_admin_user)):
  88. result = Models.delete_model_by_id(id)
  89. return result