models.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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(id: Optional[str] = None, user=Depends(get_verified_user)):
  17. if id:
  18. model = Models.get_model_by_id(id)
  19. if model:
  20. return [model]
  21. else:
  22. raise HTTPException(
  23. status_code=status.HTTP_401_UNAUTHORIZED,
  24. detail=ERROR_MESSAGES.NOT_FOUND,
  25. )
  26. else:
  27. return Models.get_all_models()
  28. ############################
  29. # AddNewModel
  30. ############################
  31. @router.post("/add", response_model=Optional[ModelModel])
  32. async def add_new_model(
  33. request: Request,
  34. form_data: ModelForm,
  35. user=Depends(get_admin_user),
  36. ):
  37. if form_data.id in request.app.state.MODELS:
  38. raise HTTPException(
  39. status_code=status.HTTP_401_UNAUTHORIZED,
  40. detail=ERROR_MESSAGES.MODEL_ID_TAKEN,
  41. )
  42. else:
  43. model = Models.insert_new_model(form_data, user.id)
  44. if model:
  45. return model
  46. else:
  47. raise HTTPException(
  48. status_code=status.HTTP_401_UNAUTHORIZED,
  49. detail=ERROR_MESSAGES.DEFAULT(),
  50. )
  51. ############################
  52. # UpdateModelById
  53. ############################
  54. @router.post("/update", response_model=Optional[ModelModel])
  55. async def update_model_by_id(
  56. request: Request,
  57. id: str,
  58. form_data: ModelForm,
  59. user=Depends(get_admin_user),
  60. ):
  61. model = Models.get_model_by_id(id)
  62. if model:
  63. model = Models.update_model_by_id(id, form_data)
  64. return model
  65. else:
  66. if form_data.id in request.app.state.MODELS:
  67. model = Models.insert_new_model(form_data, user.id)
  68. if model:
  69. return model
  70. else:
  71. raise HTTPException(
  72. status_code=status.HTTP_401_UNAUTHORIZED,
  73. detail=ERROR_MESSAGES.DEFAULT(),
  74. )
  75. else:
  76. raise HTTPException(
  77. status_code=status.HTTP_401_UNAUTHORIZED,
  78. detail=ERROR_MESSAGES.DEFAULT(),
  79. )
  80. ############################
  81. # DeleteModelById
  82. ############################
  83. @router.delete("/delete", response_model=bool)
  84. async def delete_model_by_id(id: str, user=Depends(get_admin_user)):
  85. result = Models.delete_model_by_id(id)
  86. return result