perf: DeepSeek

pull/14869/head
feng 2025-02-08 14:53:32 +08:00 committed by ZhaoJiSen
parent b35a55ed54
commit d8db76cc7b
9 changed files with 54 additions and 12 deletions

View File

@ -681,10 +681,12 @@ class Config(dict):
# Chat AI # Chat AI
'CHAT_AI_ENABLED': False, 'CHAT_AI_ENABLED': False,
'CHAT_AI_TYPE': 'gpt',
'GPT_API_KEY': '', 'GPT_API_KEY': '',
'GPT_BASE_URL': '', 'GPT_BASE_URL': '',
'GPT_PROXY': '', 'GPT_PROXY': '',
'GPT_MODEL': 'gpt-3.5-turbo', 'GPT_MODEL': 'gpt-4o-mini',
'DEEPSEEK_MODEL': 'deepseek-chat',
'VIRTUAL_APP_ENABLED': False, 'VIRTUAL_APP_ENABLED': False,
'FILE_UPLOAD_SIZE_LIMIT_MB': 200, 'FILE_UPLOAD_SIZE_LIMIT_MB': 200,

View File

@ -226,6 +226,8 @@ GPT_API_KEY = CONFIG.GPT_API_KEY
GPT_BASE_URL = CONFIG.GPT_BASE_URL GPT_BASE_URL = CONFIG.GPT_BASE_URL
GPT_PROXY = CONFIG.GPT_PROXY GPT_PROXY = CONFIG.GPT_PROXY
GPT_MODEL = CONFIG.GPT_MODEL GPT_MODEL = CONFIG.GPT_MODEL
CHAT_AI_TYPE = CONFIG.CHAT_AI_TYPE
DEEPSEEK_MODEL = CONFIG.DEEPSEEK_MODEL
VIRTUAL_APP_ENABLED = CONFIG.VIRTUAL_APP_ENABLED VIRTUAL_APP_ENABLED = CONFIG.VIRTUAL_APP_ENABLED

View File

@ -9,6 +9,7 @@ from rest_framework.response import Response
from common.api import JMSModelViewSet from common.api import JMSModelViewSet
from common.permissions import IsValidUser, OnlySuperUser from common.permissions import IsValidUser, OnlySuperUser
from .. import serializers from .. import serializers
from ..const import ChatAITypeChoices
from ..models import ChatPrompt from ..models import ChatPrompt
from ..prompt import DefaultChatPrompt from ..prompt import DefaultChatPrompt
@ -41,7 +42,11 @@ class ChatAITestingAPI(GenericAPIView):
) )
proxy = config['GPT_PROXY'] proxy = config['GPT_PROXY']
tp = config['CHAT_AI_TYPE']
if tp == ChatAITypeChoices.gpt:
model = config['GPT_MODEL'] model = config['GPT_MODEL']
else:
model = config['DEEPSEEK_MODEL']
kwargs = { kwargs = {
'base_url': config['GPT_BASE_URL'] or None, 'base_url': config['GPT_BASE_URL'] or None,

View File

@ -5,3 +5,21 @@ class ImportStatus(TextChoices):
ok = 'ok', 'Ok' ok = 'ok', 'Ok'
pending = 'pending', 'Pending' pending = 'pending', 'Pending'
error = 'error', 'Error' error = 'error', 'Error'
class ChatAITypeChoices(TextChoices):
gpt = 'gpt', 'GPT'
deep_seek = 'deep-seek', 'DeepSeek'
class GPTModelChoices(TextChoices):
gpt_4o_mini = 'gpt-4o-mini', 'gpt-4o-mini'
gpt_4o = 'gpt-4o', 'gpt-4o'
o3_mini = 'o3-mini', 'o3-mini'
o1_mini = 'o1-mini', 'o1-mini'
o1 = 'o1', 'o1'
class DeepSeekModelChoices(TextChoices):
deepseek_chat = 'deepseek-chat', 'DeepSeek-V3'
deepseek_reasoner = 'deepseek-reasoner', 'DeepSeek-R1'

View File

@ -10,8 +10,9 @@ from django.utils.translation import gettext_lazy as _
from rest_framework.utils.encoders import JSONEncoder from rest_framework.utils.encoders import JSONEncoder
from common.db.models import JMSBaseModel from common.db.models import JMSBaseModel
from common.utils import get_logger
from common.db.utils import Encryptor from common.db.utils import Encryptor
from common.utils import get_logger
from .const import ChatAITypeChoices
from .signals import setting_changed from .signals import setting_changed
logger = get_logger(__name__) logger = get_logger(__name__)
@ -191,3 +192,9 @@ class ChatPrompt(JMSBaseModel):
def __str__(self): def __str__(self):
return self.name return self.name
def get_chatai_model():
if settings.CHAT_AI_TYPE == ChatAITypeChoices.gpt:
return settings.GPT_MODEL
return settings.DEEPSEEK_MODEL

View File

@ -4,7 +4,6 @@ from django.utils import timezone
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers from rest_framework import serializers
from assets.const import Protocol
from common.serializers.fields import EncryptedField from common.serializers.fields import EncryptedField
from common.utils import date_expired_default from common.utils import date_expired_default
@ -14,6 +13,8 @@ __all__ = [
'ChatAISettingSerializer', 'VirtualAppSerializer', 'AmazonSMSerializer', 'ChatAISettingSerializer', 'VirtualAppSerializer', 'AmazonSMSerializer',
] ]
from settings.const import ChatAITypeChoices, GPTModelChoices, DeepSeekModelChoices
class AnnouncementSerializer(serializers.Serializer): class AnnouncementSerializer(serializers.Serializer):
ID = serializers.CharField(required=False, allow_blank=True, allow_null=True) ID = serializers.CharField(required=False, allow_blank=True, allow_null=True)
@ -119,16 +120,17 @@ class AmazonSMSerializer(serializers.Serializer):
class ChatAISettingSerializer(serializers.Serializer): class ChatAISettingSerializer(serializers.Serializer):
PREFIX_TITLE = _('Chat AI') PREFIX_TITLE = _('Chat AI')
API_MODEL = Protocol.gpt_protocols()[Protocol.chatgpt]['setting']['api_mode']
GPT_MODEL_CHOICES = API_MODEL['choices']
GPT_MODEL_DEFAULT = API_MODEL['default']
CHAT_AI_ENABLED = serializers.BooleanField( CHAT_AI_ENABLED = serializers.BooleanField(
required=False, label=_('Chat AI') required=False, label=_('Chat AI')
) )
CHAT_AI_TYPE = serializers.ChoiceField(
default=ChatAITypeChoices.gpt, choices=ChatAITypeChoices.choices,
label=_("Chat AI type"), required=False,
)
GPT_BASE_URL = serializers.CharField( GPT_BASE_URL = serializers.CharField(
allow_blank=True, required=False, label=_('GPT Base URL'), allow_blank=True, required=False, label=_('Base URL'),
help_text=_('The base URL of the GPT service. For example: https://api.openai.com/v1') help_text=_('The base URL of the Chat service.')
) )
GPT_API_KEY = EncryptedField( GPT_API_KEY = EncryptedField(
allow_blank=True, required=False, label=_('API Key'), allow_blank=True, required=False, label=_('API Key'),
@ -138,7 +140,12 @@ class ChatAISettingSerializer(serializers.Serializer):
help_text=_('The proxy server address of the GPT service. For example: http://ip:port') help_text=_('The proxy server address of the GPT service. For example: http://ip:port')
) )
GPT_MODEL = serializers.ChoiceField( GPT_MODEL = serializers.ChoiceField(
default=GPT_MODEL_DEFAULT, choices=GPT_MODEL_CHOICES, label=_("GPT Model"), required=False, default=GPTModelChoices.gpt_4o_mini, choices=GPTModelChoices.choices,
label=_("GPT Model"), required=False,
)
DEEPSEEK_MODEL = serializers.ChoiceField(
default=DeepSeekModelChoices.deepseek_chat, choices=DeepSeekModelChoices.choices,
label=_("DeepSeek Model"), required=False,
) )

View File

@ -63,6 +63,7 @@ class PrivateSettingSerializer(PublicSettingSerializer):
VAULT_ENABLED = serializers.BooleanField() VAULT_ENABLED = serializers.BooleanField()
VIRTUAL_APP_ENABLED = serializers.BooleanField() VIRTUAL_APP_ENABLED = serializers.BooleanField()
CHAT_AI_ENABLED = serializers.BooleanField() CHAT_AI_ENABLED = serializers.BooleanField()
CHAT_AI_TYPE = serializers.CharField()
GPT_MODEL = serializers.CharField() GPT_MODEL = serializers.CharField()
FILE_UPLOAD_SIZE_LIMIT_MB = serializers.IntegerField() FILE_UPLOAD_SIZE_LIMIT_MB = serializers.IntegerField()
FTP_FILE_MAX_STORE = serializers.IntegerField() FTP_FILE_MAX_STORE = serializers.IntegerField()

View File

@ -9,6 +9,7 @@ from common.const.signals import OP_LOG_SKIP_SIGNAL
from common.db.models import JMSBaseModel from common.db.models import JMSBaseModel
from common.utils import get_logger, lazyproperty from common.utils import get_logger, lazyproperty
from orgs.utils import tmp_to_root_org from orgs.utils import tmp_to_root_org
from settings.models import get_chatai_model
from terminal.const import TerminalType as TypeChoices from terminal.const import TerminalType as TypeChoices
from users.models import User from users.models import User
from .status import Status from .status import Status
@ -124,7 +125,7 @@ class Terminal(StorageMixin, TerminalStatusMixin, JMSBaseModel):
'GPT_BASE_URL': settings.GPT_BASE_URL, 'GPT_BASE_URL': settings.GPT_BASE_URL,
'GPT_API_KEY': settings.GPT_API_KEY, 'GPT_API_KEY': settings.GPT_API_KEY,
'GPT_PROXY': settings.GPT_PROXY, 'GPT_PROXY': settings.GPT_PROXY,
'GPT_MODEL': settings.GPT_MODEL, 'GPT_MODEL': get_chatai_model(),
} }
@staticmethod @staticmethod

View File

@ -10,7 +10,6 @@ from common.utils import get_object_or_none
from orgs.utils import tmp_to_root_org from orgs.utils import tmp_to_root_org
from users.notifications import ( from users.notifications import (
ResetPasswordMsg, ResetPasswordSuccessMsg, ResetSSHKeyMsg, ResetPasswordMsg, ResetPasswordSuccessMsg, ResetSSHKeyMsg,
ResetPublicKeySuccessMsg,
) )
from .mixins import UserQuerysetMixin from .mixins import UserQuerysetMixin
from .. import serializers from .. import serializers