|
|
|
@@ -1,5 +1,6 @@ |
|
|
|
# -*- coding:utf-8 -*- |
|
|
|
import json |
|
|
|
import logging |
|
|
|
from datetime import datetime |
|
|
|
|
|
|
|
from flask_login import login_required, current_user |
|
|
|
@@ -11,7 +12,9 @@ from controllers.console import api |
|
|
|
from controllers.console.app.error import AppNotFoundError, ProviderNotInitializeError |
|
|
|
from controllers.console.setup import setup_required |
|
|
|
from controllers.console.wraps import account_initialization_required |
|
|
|
from core.model_providers.error import ProviderTokenNotInitError, LLMBadRequestError |
|
|
|
from core.model_providers.model_factory import ModelFactory |
|
|
|
from core.model_providers.model_provider_factory import ModelProviderFactory |
|
|
|
from core.model_providers.models.entity.model_params import ModelType |
|
|
|
from events.app_event import app_was_created, app_was_deleted |
|
|
|
from libs.helper import TimestampField |
|
|
|
@@ -124,24 +127,34 @@ class AppListApi(Resource): |
|
|
|
if current_user.current_tenant.current_role not in ['admin', 'owner']: |
|
|
|
raise Forbidden() |
|
|
|
|
|
|
|
default_model = ModelFactory.get_default_model( |
|
|
|
tenant_id=current_user.current_tenant_id, |
|
|
|
model_type=ModelType.TEXT_GENERATION |
|
|
|
) |
|
|
|
|
|
|
|
if default_model: |
|
|
|
default_model_provider = default_model.provider_name |
|
|
|
default_model_name = default_model.model_name |
|
|
|
else: |
|
|
|
raise ProviderNotInitializeError( |
|
|
|
f"No Text Generation Model available. Please configure a valid provider " |
|
|
|
f"in the Settings -> Model Provider.") |
|
|
|
try: |
|
|
|
default_model = ModelFactory.get_text_generation_model( |
|
|
|
tenant_id=current_user.current_tenant_id |
|
|
|
) |
|
|
|
except (ProviderTokenNotInitError, LLMBadRequestError): |
|
|
|
default_model = None |
|
|
|
except Exception as e: |
|
|
|
logging.exception(e) |
|
|
|
default_model = None |
|
|
|
|
|
|
|
if args['model_config'] is not None: |
|
|
|
# validate config |
|
|
|
model_config_dict = args['model_config'] |
|
|
|
model_config_dict["model"]["provider"] = default_model_provider |
|
|
|
model_config_dict["model"]["name"] = default_model_name |
|
|
|
|
|
|
|
# get model provider |
|
|
|
model_provider = ModelProviderFactory.get_preferred_model_provider( |
|
|
|
current_user.current_tenant_id, |
|
|
|
model_config_dict["model"]["provider"] |
|
|
|
) |
|
|
|
|
|
|
|
if not model_provider: |
|
|
|
if not default_model: |
|
|
|
raise ProviderNotInitializeError( |
|
|
|
f"No Default System Reasoning Model available. Please configure " |
|
|
|
f"in the Settings -> Model Provider.") |
|
|
|
else: |
|
|
|
model_config_dict["model"]["provider"] = default_model.model_provider.provider_name |
|
|
|
model_config_dict["model"]["name"] = default_model.name |
|
|
|
|
|
|
|
model_configuration = AppModelConfigService.validate_configuration( |
|
|
|
tenant_id=current_user.current_tenant_id, |
|
|
|
@@ -169,10 +182,22 @@ class AppListApi(Resource): |
|
|
|
app = App(**model_config_template['app']) |
|
|
|
app_model_config = AppModelConfig(**model_config_template['model_config']) |
|
|
|
|
|
|
|
model_dict = app_model_config.model_dict |
|
|
|
model_dict['provider'] = default_model_provider |
|
|
|
model_dict['name'] = default_model_name |
|
|
|
app_model_config.model = json.dumps(model_dict) |
|
|
|
# get model provider |
|
|
|
model_provider = ModelProviderFactory.get_preferred_model_provider( |
|
|
|
current_user.current_tenant_id, |
|
|
|
app_model_config.model_dict["provider"] |
|
|
|
) |
|
|
|
|
|
|
|
if not model_provider: |
|
|
|
if not default_model: |
|
|
|
raise ProviderNotInitializeError( |
|
|
|
f"No Default System Reasoning Model available. Please configure " |
|
|
|
f"in the Settings -> Model Provider.") |
|
|
|
else: |
|
|
|
model_dict = app_model_config.model_dict |
|
|
|
model_dict['provider'] = default_model.model_provider.provider_name |
|
|
|
model_dict['name'] = default_model.name |
|
|
|
app_model_config.model = json.dumps(model_dict) |
|
|
|
|
|
|
|
app.name = args['name'] |
|
|
|
app.mode = args['mode'] |