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_ENABLED': False,
'CHAT_AI_TYPE': 'gpt',
'GPT_API_KEY': '',
'GPT_BASE_URL': '',
'GPT_PROXY': '',
'GPT_MODEL': 'gpt-3.5-turbo',
'GPT_MODEL': 'gpt-4o-mini',
'DEEPSEEK_MODEL': 'deepseek-chat',
'VIRTUAL_APP_ENABLED': False,
'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_PROXY = CONFIG.GPT_PROXY
GPT_MODEL = CONFIG.GPT_MODEL
CHAT_AI_TYPE = CONFIG.CHAT_AI_TYPE
DEEPSEEK_MODEL = CONFIG.DEEPSEEK_MODEL
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.permissions import IsValidUser, OnlySuperUser
from .. import serializers
from ..const import ChatAITypeChoices
from ..models import ChatPrompt
from ..prompt import DefaultChatPrompt
@ -41,7 +42,11 @@ class ChatAITestingAPI(GenericAPIView):
)
proxy = config['GPT_PROXY']
tp = config['CHAT_AI_TYPE']
if tp == ChatAITypeChoices.gpt:
model = config['GPT_MODEL']
else:
model = config['DEEPSEEK_MODEL']
kwargs = {
'base_url': config['GPT_BASE_URL'] or None,

View File

@ -5,3 +5,21 @@ class ImportStatus(TextChoices):
ok = 'ok', 'Ok'
pending = 'pending', 'Pending'
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 common.db.models import JMSBaseModel
from common.utils import get_logger
from common.db.utils import Encryptor
from common.utils import get_logger
from .const import ChatAITypeChoices
from .signals import setting_changed
logger = get_logger(__name__)
@ -191,3 +192,9 @@ class ChatPrompt(JMSBaseModel):
def __str__(self):
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 rest_framework import serializers
from assets.const import Protocol
from common.serializers.fields import EncryptedField
from common.utils import date_expired_default
@ -14,6 +13,8 @@ __all__ = [
'ChatAISettingSerializer', 'VirtualAppSerializer', 'AmazonSMSerializer',
]
from settings.const import ChatAITypeChoices, GPTModelChoices, DeepSeekModelChoices
class AnnouncementSerializer(serializers.Serializer):
ID = serializers.CharField(required=False, allow_blank=True, allow_null=True)
@ -119,16 +120,17 @@ class AmazonSMSerializer(serializers.Serializer):
class ChatAISettingSerializer(serializers.Serializer):
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(
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(
allow_blank=True, required=False, label=_('GPT Base URL'),
help_text=_('The base URL of the GPT service. For example: https://api.openai.com/v1')
allow_blank=True, required=False, label=_('Base URL'),
help_text=_('The base URL of the Chat service.')
)
GPT_API_KEY = EncryptedField(
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')
)
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()
VIRTUAL_APP_ENABLED = serializers.BooleanField()
CHAT_AI_ENABLED = serializers.BooleanField()
CHAT_AI_TYPE = serializers.CharField()
GPT_MODEL = serializers.CharField()
FILE_UPLOAD_SIZE_LIMIT_MB = 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.utils import get_logger, lazyproperty
from orgs.utils import tmp_to_root_org
from settings.models import get_chatai_model
from terminal.const import TerminalType as TypeChoices
from users.models import User
from .status import Status
@ -124,7 +125,7 @@ class Terminal(StorageMixin, TerminalStatusMixin, JMSBaseModel):
'GPT_BASE_URL': settings.GPT_BASE_URL,
'GPT_API_KEY': settings.GPT_API_KEY,
'GPT_PROXY': settings.GPT_PROXY,
'GPT_MODEL': settings.GPT_MODEL,
'GPT_MODEL': get_chatai_model(),
}
@staticmethod

View File

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