From c3456744021671f72ea1ece73edb1348c399c03a Mon Sep 17 00:00:00 2001 From: feng <1304903146@qq.com> Date: Tue, 8 Apr 2025 17:12:07 +0800 Subject: [PATCH] perf: Resurrection kael --- apps/accounts/api/account/account.py | 10 +++++ apps/assets/const/gpt.py | 38 +++++++++++++++++++ .../migrations/0019_auto_20250403_1759.py | 19 ++++++++++ apps/settings/serializers/public.py | 1 + 4 files changed, 68 insertions(+) create mode 100644 apps/assets/migrations/0019_auto_20250403_1759.py diff --git a/apps/accounts/api/account/account.py b/apps/accounts/api/account/account.py index 8b39db771..df4edba86 100644 --- a/apps/accounts/api/account/account.py +++ b/apps/accounts/api/account/account.py @@ -11,6 +11,7 @@ from accounts.const import ChangeSecretRecordStatusChoice from accounts.filters import AccountFilterSet, NodeFilterBackend from accounts.mixins import AccountRecordViewLogMixin from accounts.models import Account, ChangeSecretRecord +from assets.const.gpt import create_or_update_chatx_resources from assets.models import Asset, Node from authentication.permissions import UserConfirmation, ConfirmType from common.api.mixin import ExtraFilterFieldsMixin @@ -18,6 +19,7 @@ from common.drf.filters import AttrRulesFilterBackend from common.permissions import IsValidUser from common.utils import lazyproperty, get_logger from orgs.mixins.api import OrgBulkModelViewSet +from orgs.utils import tmp_to_root_org from rbac.permissions import RBACPermission logger = get_logger(__file__) @@ -43,6 +45,7 @@ class AccountViewSet(OrgBulkModelViewSet): 'clear_secret': 'accounts.change_account', 'move_to_assets': 'accounts.create_account', 'copy_to_assets': 'accounts.create_account', + 'chat': 'accounts.view_account', } export_as_zip = True @@ -145,6 +148,13 @@ class AccountViewSet(OrgBulkModelViewSet): def copy_to_assets(self, request, *args, **kwargs): return self._copy_or_move_to_assets(request, move=False) + @action(methods=['get'], detail=False, url_path='chat') + def chat(self, request, *args, **kwargs): + with tmp_to_root_org(): + account = create_or_update_chatx_resources() + serializer = self.get_serializer(account) + return Response(serializer.data) + class AccountSecretsViewSet(AccountRecordViewLogMixin, AccountViewSet): """ diff --git a/apps/assets/const/gpt.py b/apps/assets/const/gpt.py index b3b078031..9ef98f486 100644 --- a/apps/assets/const/gpt.py +++ b/apps/assets/const/gpt.py @@ -1,7 +1,10 @@ from django.utils.translation import gettext_lazy as _ +from orgs.models import Organization from .base import BaseType +CHATX_NAME = 'ChatX' + class GPTTypes(BaseType): CHATGPT = 'chatgpt', _('ChatGPT') @@ -52,3 +55,38 @@ class GPTTypes(BaseType): return [ cls.CHATGPT, ] + + +def create_or_update_chatx_resources(chatx_name=CHATX_NAME, org_id=Organization.SYSTEM_ID): + from django.apps import apps + + platform_model = apps.get_model('assets', 'Platform') + asset_model = apps.get_model('assets', 'Asset') + account_model = apps.get_model('accounts', 'Account') + + platform, _ = platform_model.objects.update_or_create( + name=chatx_name, + defaults={ + 'internal': True, + 'type': chatx_name, + 'category': 'ai', + } + ) + asset, __ = asset_model.objects.update_or_create( + address=chatx_name, + defaults={ + 'name': chatx_name, + 'platform': platform, + 'org_id': org_id + } + ) + + account, __ = account_model.objects.update_or_create( + username=chatx_name, + defaults={ + 'name': chatx_name, + 'asset': asset, + 'org_id': org_id + } + ) + return account diff --git a/apps/assets/migrations/0019_auto_20250403_1759.py b/apps/assets/migrations/0019_auto_20250403_1759.py new file mode 100644 index 000000000..12b7c0c43 --- /dev/null +++ b/apps/assets/migrations/0019_auto_20250403_1759.py @@ -0,0 +1,19 @@ +# Generated by Django 4.1.13 on 2025-04-03 09:59 + +from django.db import migrations + +from assets.const.gpt import create_or_update_chatx_resources + + +def migrate_chat_platform_asset_account(apps, schema_editor): + create_or_update_chatx_resources() + + +class Migration(migrations.Migration): + dependencies = [ + ('assets', '0018_rename_domain_zone'), + ] + + operations = [ + migrations.RunPython(migrate_chat_platform_asset_account) + ] \ No newline at end of file diff --git a/apps/settings/serializers/public.py b/apps/settings/serializers/public.py index d3a1b1761..2509e2c3d 100644 --- a/apps/settings/serializers/public.py +++ b/apps/settings/serializers/public.py @@ -65,6 +65,7 @@ class PrivateSettingSerializer(PublicSettingSerializer): CHAT_AI_ENABLED = serializers.BooleanField() CHAT_AI_TYPE = serializers.CharField() GPT_MODEL = serializers.CharField() + DEEPSEEK_MODEL = serializers.CharField() FILE_UPLOAD_SIZE_LIMIT_MB = serializers.IntegerField() FTP_FILE_MAX_STORE = serializers.IntegerField() LOKI_LOG_ENABLED = serializers.BooleanField()