Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

load_balancing_config.py 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. from flask_restx import Resource, reqparse
  2. from werkzeug.exceptions import Forbidden
  3. from controllers.console import api
  4. from controllers.console.wraps import account_initialization_required, setup_required
  5. from core.model_runtime.entities.model_entities import ModelType
  6. from core.model_runtime.errors.validate import CredentialsValidateFailedError
  7. from libs.login import current_user, login_required
  8. from models.account import Account, TenantAccountRole
  9. from services.model_load_balancing_service import ModelLoadBalancingService
  10. class LoadBalancingCredentialsValidateApi(Resource):
  11. @setup_required
  12. @login_required
  13. @account_initialization_required
  14. def post(self, provider: str):
  15. assert isinstance(current_user, Account)
  16. if not TenantAccountRole.is_privileged_role(current_user.current_role):
  17. raise Forbidden()
  18. tenant_id = current_user.current_tenant_id
  19. assert tenant_id is not None
  20. parser = reqparse.RequestParser()
  21. parser.add_argument("model", type=str, required=True, nullable=False, location="json")
  22. parser.add_argument(
  23. "model_type",
  24. type=str,
  25. required=True,
  26. nullable=False,
  27. choices=[mt.value for mt in ModelType],
  28. location="json",
  29. )
  30. parser.add_argument("credentials", type=dict, required=True, nullable=False, location="json")
  31. args = parser.parse_args()
  32. # validate model load balancing credentials
  33. model_load_balancing_service = ModelLoadBalancingService()
  34. result = True
  35. error = ""
  36. try:
  37. model_load_balancing_service.validate_load_balancing_credentials(
  38. tenant_id=tenant_id,
  39. provider=provider,
  40. model=args["model"],
  41. model_type=args["model_type"],
  42. credentials=args["credentials"],
  43. )
  44. except CredentialsValidateFailedError as ex:
  45. result = False
  46. error = str(ex)
  47. response = {"result": "success" if result else "error"}
  48. if not result:
  49. response["error"] = error
  50. return response
  51. class LoadBalancingConfigCredentialsValidateApi(Resource):
  52. @setup_required
  53. @login_required
  54. @account_initialization_required
  55. def post(self, provider: str, config_id: str):
  56. assert isinstance(current_user, Account)
  57. if not TenantAccountRole.is_privileged_role(current_user.current_role):
  58. raise Forbidden()
  59. tenant_id = current_user.current_tenant_id
  60. assert tenant_id is not None
  61. parser = reqparse.RequestParser()
  62. parser.add_argument("model", type=str, required=True, nullable=False, location="json")
  63. parser.add_argument(
  64. "model_type",
  65. type=str,
  66. required=True,
  67. nullable=False,
  68. choices=[mt.value for mt in ModelType],
  69. location="json",
  70. )
  71. parser.add_argument("credentials", type=dict, required=True, nullable=False, location="json")
  72. args = parser.parse_args()
  73. # validate model load balancing config credentials
  74. model_load_balancing_service = ModelLoadBalancingService()
  75. result = True
  76. error = ""
  77. try:
  78. model_load_balancing_service.validate_load_balancing_credentials(
  79. tenant_id=tenant_id,
  80. provider=provider,
  81. model=args["model"],
  82. model_type=args["model_type"],
  83. credentials=args["credentials"],
  84. config_id=config_id,
  85. )
  86. except CredentialsValidateFailedError as ex:
  87. result = False
  88. error = str(ex)
  89. response = {"result": "success" if result else "error"}
  90. if not result:
  91. response["error"] = error
  92. return response
  93. # Load Balancing Config
  94. api.add_resource(
  95. LoadBalancingCredentialsValidateApi,
  96. "/workspaces/current/model-providers/<path:provider>/models/load-balancing-configs/credentials-validate",
  97. )
  98. api.add_resource(
  99. LoadBalancingConfigCredentialsValidateApi,
  100. "/workspaces/current/model-providers/<path:provider>/models/load-balancing-configs/<string:config_id>/credentials-validate",
  101. )