|
from flask_restful import Resource, reqparse |
|
from werkzeug.exceptions import Forbidden |
|
|
|
from controllers.console import api |
|
from controllers.console.wraps import account_initialization_required, setup_required |
|
from core.model_runtime.entities.model_entities import ModelType |
|
from core.model_runtime.errors.validate import CredentialsValidateFailedError |
|
from libs.login import current_user, login_required |
|
from models.account import TenantAccountRole |
|
from services.model_load_balancing_service import ModelLoadBalancingService |
|
|
|
|
|
class LoadBalancingCredentialsValidateApi(Resource): |
|
@setup_required |
|
@login_required |
|
@account_initialization_required |
|
def post(self, provider: str): |
|
if not TenantAccountRole.is_privileged_role(current_user.current_tenant.current_role): |
|
raise Forbidden() |
|
|
|
tenant_id = current_user.current_tenant_id |
|
|
|
parser = reqparse.RequestParser() |
|
parser.add_argument("model", type=str, required=True, nullable=False, location="json") |
|
parser.add_argument( |
|
"model_type", |
|
type=str, |
|
required=True, |
|
nullable=False, |
|
choices=[mt.value for mt in ModelType], |
|
location="json", |
|
) |
|
parser.add_argument("credentials", type=dict, required=True, nullable=False, location="json") |
|
args = parser.parse_args() |
|
|
|
|
|
model_load_balancing_service = ModelLoadBalancingService() |
|
|
|
result = True |
|
error = None |
|
|
|
try: |
|
model_load_balancing_service.validate_load_balancing_credentials( |
|
tenant_id=tenant_id, |
|
provider=provider, |
|
model=args["model"], |
|
model_type=args["model_type"], |
|
credentials=args["credentials"], |
|
) |
|
except CredentialsValidateFailedError as ex: |
|
result = False |
|
error = str(ex) |
|
|
|
response = {"result": "success" if result else "error"} |
|
|
|
if not result: |
|
response["error"] = error |
|
|
|
return response |
|
|
|
|
|
class LoadBalancingConfigCredentialsValidateApi(Resource): |
|
@setup_required |
|
@login_required |
|
@account_initialization_required |
|
def post(self, provider: str, config_id: str): |
|
if not TenantAccountRole.is_privileged_role(current_user.current_tenant.current_role): |
|
raise Forbidden() |
|
|
|
tenant_id = current_user.current_tenant_id |
|
|
|
parser = reqparse.RequestParser() |
|
parser.add_argument("model", type=str, required=True, nullable=False, location="json") |
|
parser.add_argument( |
|
"model_type", |
|
type=str, |
|
required=True, |
|
nullable=False, |
|
choices=[mt.value for mt in ModelType], |
|
location="json", |
|
) |
|
parser.add_argument("credentials", type=dict, required=True, nullable=False, location="json") |
|
args = parser.parse_args() |
|
|
|
|
|
model_load_balancing_service = ModelLoadBalancingService() |
|
|
|
result = True |
|
error = None |
|
|
|
try: |
|
model_load_balancing_service.validate_load_balancing_credentials( |
|
tenant_id=tenant_id, |
|
provider=provider, |
|
model=args["model"], |
|
model_type=args["model_type"], |
|
credentials=args["credentials"], |
|
config_id=config_id, |
|
) |
|
except CredentialsValidateFailedError as ex: |
|
result = False |
|
error = str(ex) |
|
|
|
response = {"result": "success" if result else "error"} |
|
|
|
if not result: |
|
response["error"] = error |
|
|
|
return response |
|
|
|
|
|
|
|
api.add_resource( |
|
LoadBalancingCredentialsValidateApi, |
|
"/workspaces/current/model-providers/<string:provider>/models/load-balancing-configs/credentials-validate", |
|
) |
|
|
|
api.add_resource( |
|
LoadBalancingConfigCredentialsValidateApi, |
|
"/workspaces/current/model-providers/<string:provider>/models/load-balancing-configs/<string:config_id>/credentials-validate", |
|
) |
|
|