mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-13 22:09:17 +00:00
feat: 系统设置可配置gpt (#12207)
* feat: 系统设置可配置gpt * perf: 添加gpt的terminal config --------- Co-authored-by: feng <1304903146@qq.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
from .chat import *
|
||||
from .dingtalk import *
|
||||
from .email import *
|
||||
from .feishu import *
|
||||
@@ -5,7 +6,7 @@ from .ldap import *
|
||||
from .public import *
|
||||
from .security import *
|
||||
from .settings import *
|
||||
from .slack import *
|
||||
from .sms import *
|
||||
from .vault import *
|
||||
from .wecom import *
|
||||
from .slack import *
|
||||
|
77
apps/settings/api/chat.py
Normal file
77
apps/settings/api/chat.py
Normal file
@@ -0,0 +1,77 @@
|
||||
import httpx
|
||||
import openai
|
||||
from django.conf import settings
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from rest_framework import status
|
||||
from rest_framework.generics import GenericAPIView
|
||||
from rest_framework.views import Response
|
||||
|
||||
from .. import serializers
|
||||
|
||||
|
||||
class ChatAITestingAPI(GenericAPIView):
|
||||
serializer_class = serializers.ChatAISettingSerializer
|
||||
rbac_perms = {
|
||||
'POST': 'settings.change_chatai'
|
||||
}
|
||||
|
||||
def get_config(self, request):
|
||||
serializer = self.serializer_class(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
data = serializer.validated_data
|
||||
for k, v in data.items():
|
||||
if v:
|
||||
continue
|
||||
# 页面没有传递值, 从 settings 中获取
|
||||
data[k] = getattr(settings, k, None)
|
||||
return data
|
||||
|
||||
def post(self, request):
|
||||
config = self.get_config(request)
|
||||
chat_ai_enabled = config['CHAT_AI_ENABLED']
|
||||
if not chat_ai_enabled:
|
||||
return Response(
|
||||
status=status.HTTP_400_BAD_REQUEST,
|
||||
data={'msg': _('Chat AI is not enabled')}
|
||||
)
|
||||
|
||||
proxy = config['GPT_PROXY']
|
||||
model = config['GPT_MODEL']
|
||||
|
||||
kwargs = {
|
||||
'base_url': config['GPT_BASE_URL'] or None,
|
||||
'api_key': config['GPT_API_KEY'],
|
||||
}
|
||||
if proxy:
|
||||
kwargs['http_client'] = httpx.Client(
|
||||
proxies=proxy,
|
||||
transport=httpx.HTTPTransport(local_address='0.0.0.0')
|
||||
)
|
||||
client = openai.OpenAI(**kwargs)
|
||||
|
||||
ok = False
|
||||
error = ''
|
||||
try:
|
||||
client.chat.completions.create(
|
||||
messages=[
|
||||
{
|
||||
"role": "user",
|
||||
"content": "Say this is a test",
|
||||
}
|
||||
],
|
||||
model=model,
|
||||
)
|
||||
ok = True
|
||||
except openai.APIConnectionError as e:
|
||||
error = str(e.__cause__) # an underlying Exception, likely raised within httpx.
|
||||
except openai.APIStatusError as e:
|
||||
error = str(e.message)
|
||||
except Exception as e:
|
||||
ok, error = False, str(e)
|
||||
|
||||
if ok:
|
||||
_status, msg = status.HTTP_200_OK, _('Test success')
|
||||
else:
|
||||
_status, msg = status.HTTP_400_BAD_REQUEST, error
|
||||
|
||||
return Response(status=_status, data={'msg': msg})
|
@@ -57,6 +57,7 @@ class SettingsApi(generics.RetrieveUpdateAPIView):
|
||||
'cmpp2': serializers.CMPP2SMSSettingSerializer,
|
||||
'custom': serializers.CustomSMSSettingSerializer,
|
||||
'vault': serializers.VaultSettingSerializer,
|
||||
'chat': serializers.ChatAISettingSerializer,
|
||||
'announcement': serializers.AnnouncementSettingSerializer,
|
||||
'ticket': serializers.TicketSettingSerializer,
|
||||
'ops': serializers.OpsSettingSerializer,
|
||||
|
Reference in New Issue
Block a user