Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions apps/chat/views/v2/chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from django.core.cache import cache
from django.http import HttpResponse, StreamingHttpResponse
from django.utils.translation import gettext_lazy as _
from drf_spectacular.utils import extend_schema
from drf_spectacular.utils import OpenApiResponse, extend_schema
from drf_spectacular.types import OpenApiTypes
from drf_spectacular.utils import OpenApiParameter
from rest_framework.parsers import MultiPartParser
Expand Down Expand Up @@ -46,7 +46,7 @@
from common.constants.cache_version import Cache_Version
from common.exception.app_exception import AppAuthenticationFailed, AppApiException
from common.log.log import _get_ip_address, log
from common.result import result
from common.result import DefaultResultSerializer, result
from common.utils.rsa_util import decrypt
from knowledge.models import FileSourceType
from maxkb.const import CONFIG
Expand Down Expand Up @@ -238,7 +238,13 @@ class OpenView(APIView):
summary=_("Get the session id according to the application id"),
operation_id=_("Get the session id according to the application id"), # type: ignore
parameters=ChatOpenAPI.get_parameters(),
responses=None,
responses={
200: None,
401: OpenApiResponse(
response=DefaultResultSerializer,
description=_("Authentication required"),
),
},
tags=[_("Chat")], # type: ignore
)
@has_permissions(ChatPermissionConstants.get_aggregate_permissions())
Expand Down
19 changes: 16 additions & 3 deletions apps/chat/views/v2/chat_record.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"""

from django.utils.translation import gettext_lazy as _
from drf_spectacular.utils import extend_schema
from drf_spectacular.utils import OpenApiResponse, extend_schema
from rest_framework.request import Request
from rest_framework.views import APIView

Expand All @@ -29,6 +29,7 @@
)
from common import result
from common.auth import ChatTokenAuth
from common.result import DefaultResultSerializer


class VoteView(APIView):
Expand Down Expand Up @@ -65,7 +66,13 @@ class HistoricalConversationView(APIView):
summary=_("Get historical conversation"),
operation_id=_("Get historical conversation"), # type: ignore
parameters=HistoricalConversationAPI.get_parameters(),
responses=HistoricalConversationAPI.get_response(),
responses={
200: HistoricalConversationAPI.get_response(),
401: OpenApiResponse(
response=DefaultResultSerializer,
description=_("Authentication required"),
),
},
tags=[_("Chat")], # type: ignore
)
def get(self, request: Request):
Expand Down Expand Up @@ -153,7 +160,13 @@ class PageView(APIView):
summary=_("Get historical conversation by page"),
operation_id=_("Get historical conversation by page"), # type: ignore
parameters=PageHistoricalConversationAPI.get_parameters(),
responses=PageHistoricalConversationAPI.get_response(),
responses={
200: PageHistoricalConversationAPI.get_response(),
401: OpenApiResponse(
response=DefaultResultSerializer,
description=_("Authentication required"),
),
},
tags=[_("Chat")], # type: ignore
)
def get(self, request: Request, current_page: int, page_size: int):
Expand Down
12 changes: 9 additions & 3 deletions apps/chat/views/v3/chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from django.core.cache import cache
from django.http import HttpResponse, StreamingHttpResponse
from django.utils.translation import gettext_lazy as _
from drf_spectacular.utils import extend_schema
from drf_spectacular.utils import OpenApiResponse, extend_schema
from drf_spectacular.types import OpenApiTypes
from drf_spectacular.utils import OpenApiParameter
from rest_framework.parsers import MultiPartParser
Expand Down Expand Up @@ -46,7 +46,7 @@
from common.constants.cache_version import Cache_Version
from common.exception.app_exception import AppApiException
from common.log.log import _get_ip_address, log, record_log
from common.result import result
from common.result import DefaultResultSerializer, result
from common.utils.rsa_util import decrypt
from knowledge.models import FileSourceType
from maxkb.const import CONFIG
Expand Down Expand Up @@ -469,7 +469,13 @@ class ChatUserProfileView(APIView):
description=_("Get current user information"),
operation_id=_("V3 Get current user information"), # type: ignore
tags=[_("V3 Chat User")], # type: ignore
responses=UserProfileAPI.get_response(),
responses={
200: UserProfileAPI.get_response(),
401: OpenApiResponse(
response=DefaultResultSerializer,
description=_("Authentication required"),
),
},
)
def get(self, request: Request):
return result.success(ChatUserProfileSerializer().profile(request.user.profile))
Expand Down
20 changes: 16 additions & 4 deletions apps/chat/views/v3/chat_user_api_key.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@

from common.auth import ChatTokenAuth
from common.log.log import log
from common.result import result
from drf_spectacular.utils import extend_schema
from common.result import DefaultResultSerializer, result
from drf_spectacular.utils import OpenApiResponse, extend_schema
from rest_framework.request import Request
from rest_framework.views import APIView

Expand All @@ -20,7 +20,13 @@ class ChatUserApiKeyView(APIView):
description=_("Create ChatUserAPIKey"),
summary=_("Create ChatUserAPIKey"),
operation_id="V3 Create ChatUserAPIKey",
responses=None,
responses={
200: None,
401: OpenApiResponse(
response=DefaultResultSerializer,
description=_("Authentication required"),
),
},
tags=[_("V3 Chat User API Key")], # type: ignore
)
@log(menu="Chat User API Key", operate="Add chat user API key")
Expand All @@ -32,7 +38,13 @@ def post(self, request: Request):
description=_("Get ChatUserAPIKey"),
summary=_("Get ChatUserAPIKey"),
operation_id="V3 Get ChatUserAPIKey",
responses=None,
responses={
200: None,
401: OpenApiResponse(
response=DefaultResultSerializer,
description=_("Authentication required"),
),
},
tags=[_("V3 Chat User API Key")], # type: ignore
)
@log(menu="Chat User API Key", operate="Get chat user API key")
Expand Down
65 changes: 41 additions & 24 deletions apps/common/result/api.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
# coding=utf-8
"""
@project: MaxKB
@Author:虎虎
@file: api.py
@date:2025/4/14 15:20
@desc:
@project: MaxKB
@Author:虎虎
@file: api.py
@date:2025/4/14 15:20
@desc:
"""

import copy

from django.utils.translation import gettext_lazy as _
from rest_framework import serializers

Expand All @@ -14,43 +17,57 @@ class DefaultResultSerializer(serializers.Serializer):
"""
响应结果
"""
code = serializers.IntegerField(required=True, help_text=_('response code'), label=_('response code'))
message = serializers.CharField(required=False, default="success", help_text=_('error prompt'),
label=_('error prompt'))

code = serializers.IntegerField(required=True, help_text=_("response code"), label=_("response code"))
message = serializers.CharField(
required=False, default="success", help_text=_("error prompt"), label=_("error prompt")
)
data = serializers.BooleanField(required=False, default=True)


class ResultSerializer(serializers.Serializer):
"""
响应结果
"""
code = serializers.IntegerField(required=True, help_text=_('response code'), label=_('response code'))
message = serializers.CharField(required=False, default="success", help_text=_('error prompt'),
label=_('error prompt'))

code = serializers.IntegerField(required=True, help_text=_("response code"), label=_("response code"))
message = serializers.CharField(
required=False, default="success", help_text=_("error prompt"), label=_("error prompt")
)

def get_data(self):
pass

def __init__(self, **kwargs):
self.fields['data'] = self.get_data()
super().__init__(**kwargs)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["data"] = self.get_data()


class PageDataResponse(serializers.Serializer):
"""
分页数据
"""
total = serializers.IntegerField(required=True, label=_('total number of data'))
current = serializers.IntegerField(required=True, label=_('current page'))
size = serializers.IntegerField(required=True, label=_('page size'))

def __init__(self, records, **kwargs):
self.fields['records'] = records
super().__init__(**kwargs)
total = serializers.IntegerField(required=True, label=_("total number of data"))
current = serializers.IntegerField(required=True, label=_("current page"))
size = serializers.IntegerField(required=True, label=_("page size"))

def __init__(self, records=None, *args, **kwargs):
super().__init__(*args, **kwargs)
if records is not None:
self._records_serializer = copy.deepcopy(records)
self.fields["records"] = records

class ResultPageSerializer(ResultSerializer):

def __init__(self, **kwargs):
super().__init__(**kwargs)
self.fields['data'] = PageDataResponse(self.get_data())
class ResultPageSerializer(ResultSerializer):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
records = self.get_data()
if isinstance(records, PageDataResponse):
records = records._records_serializer
page_class = type(
f"{self.__class__.__name__}PageData",
(PageDataResponse,),
{"__module__": PageDataResponse.__module__},
)
self.fields["data"] = page_class(records)
82 changes: 79 additions & 3 deletions apps/models_provider/api/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,82 @@ def get_data(self):
return ModelModelSerializer()


class ModelDetailSerializer(serializers.Serializer):
id = serializers.UUIDField(required=True, label=_("model id"))
provider = serializers.CharField(required=True, label=_("provider"))
name = serializers.CharField(required=True, label=_("model name"))
model_type = serializers.CharField(required=True, label=_("model type"))
model_name = serializers.CharField(required=True, label=_("base model"))
status = serializers.CharField(required=True, label=_("status"))
meta = serializers.DictField(required=False, allow_null=True, label=_("model meta"))
credential = serializers.DictField(required=False, label=_("certification information"))
workspace_id = serializers.CharField(required=True, label=_("workspace id"))
nick_name = serializers.CharField(required=False, allow_blank=True, label=_("nick name"))
username = serializers.CharField(required=False, allow_blank=True, label=_("username"))


class ModelMetaSerializer(serializers.Serializer):
id = serializers.UUIDField(required=True, label=_("model id"))
provider = serializers.CharField(required=True, label=_("provider"))
name = serializers.CharField(required=True, label=_("model name"))
model_type = serializers.CharField(required=True, label=_("model type"))
model_name = serializers.CharField(required=True, label=_("base model"))
status = serializers.CharField(required=True, label=_("status"))
meta = serializers.DictField(required=False, allow_null=True, label=_("model meta"))
workspace_id = serializers.CharField(required=True, label=_("workspace id"))


class ModelSummarySerializer(serializers.Serializer):
id = serializers.UUIDField(required=True, label=_("model id"))
provider = serializers.CharField(required=True, label=_("provider"))
name = serializers.CharField(required=True, label=_("model name"))
model_type = serializers.CharField(required=True, label=_("model type"))
model_name = serializers.CharField(required=True, label=_("base model"))
status = serializers.CharField(required=True, label=_("status"))
meta = serializers.DictField(required=False, allow_null=True, label=_("model meta"))
user = serializers.UUIDField(required=False, label=_("user id"))
user_id = serializers.UUIDField(required=False, label=_("user id"))
username = serializers.CharField(required=False, allow_blank=True, label=_("username"))
nick_name = serializers.CharField(required=False, allow_blank=True, label=_("nick name"))
credential = serializers.CharField(required=False, label=_("certification information"))
model_params_form = serializers.JSONField(required=False, label=_("parameter configuration"))
workspace_id = serializers.CharField(required=False, label=_("workspace id"))
workspace_name = serializers.CharField(required=False, allow_blank=True, label=_("workspace name"))
create_time = serializers.DateTimeField(required=False, label=_("create time"))
update_time = serializers.DateTimeField(required=False, label=_("update time"))
resource_count = serializers.IntegerField(required=False, label=_("resource count"))


class ModelGroupedListSerializer(serializers.Serializer):
shared_model = ModelSummarySerializer(many=True)
model = ModelSummarySerializer(many=True)


class ModelDetailResponse(ResultSerializer):
def get_data(self):
return ModelDetailSerializer()


class ModelMetaResponse(ResultSerializer):
def get_data(self):
return ModelMetaSerializer()


class ModelGroupedListResponse(APIMixin):
@staticmethod
def get_response():
class ModelGroupedListResult(ResultSerializer):
def get_data(self):
return ModelGroupedListSerializer()

return ModelGroupedListResult


class ModelSummaryListResponse(ResultSerializer):
def get_data(self):
return ModelSummarySerializer(many=True)


class ModelListResponse(APIMixin):
@staticmethod
def get_response():
Expand Down Expand Up @@ -118,7 +194,7 @@ def get_request():

@staticmethod
def get_response():
return ModelCreateResponse
return ModelDetailResponse


class ModelEditApi(APIMixin):
Expand All @@ -128,10 +204,10 @@ def get_request():

@staticmethod
def get_response():
return ModelCreateResponse
return ModelDetailResponse


class DefaultModelResponse(APIMixin):
@staticmethod
def get_response():
return DefaultResultSerializer()
return DefaultResultSerializer
2 changes: 1 addition & 1 deletion apps/models_provider/api/provide.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

class ProvideResponse(ResultSerializer):
def get_data(self):
return ProvideSerializer()
return ProvideSerializer(many=True)


class ProvideSerializer(serializers.Serializer):
Expand Down
Loading
Loading