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
Empty file added apps/homepage/__init__.py
Empty file.
3 changes: 3 additions & 0 deletions apps/homepage/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
284 changes: 284 additions & 0 deletions apps/homepage/api/home_page_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,284 @@
# coding=utf-8
"""
@project: MaxKB
@Author:虎虎
@file: home_page_api.py
@date:2026/5/18 16:02
@desc:
"""

from django.utils.translation import gettext_lazy as _
from drf_spectacular.utils import (
OpenApiParameter,
OpenApiTypes,
inline_serializer,
)
from rest_framework import serializers

from common.mixins.api_mixin import APIMixin


class RankingBaseAPI(APIMixin):

@staticmethod
def get_request():
return None

@staticmethod
def get_parameters():
return [
OpenApiParameter(
name="workspace_id",
type=OpenApiTypes.STR,
location=OpenApiParameter.PATH,
required=True,
description=_("Workspace ID"),
),
OpenApiParameter(
name="current_page",
type=OpenApiTypes.INT,
location=OpenApiParameter.PATH,
required=True,
description=_("Current page"),
),
OpenApiParameter(
name="page_size",
type=OpenApiTypes.INT,
location=OpenApiParameter.PATH,
required=True,
description=_("Page size"),
),
]


class ApplicationTokensRankingAPI(RankingBaseAPI):

@staticmethod
def get_response():
return inline_serializer(
name="ApplicationTokensRankingResponse",
fields={
"code": serializers.IntegerField(help_text=_("Response code")),
"message": serializers.CharField(help_text=_("Response message")),
"data": inline_serializer(
name="ApplicationTokensRankingPage",
fields={
"total": serializers.IntegerField(help_text=_("Total count")),
"records": serializers.ListField(
help_text=_("Application tokens ranking list"),
child=inline_serializer(
name="ApplicationTokensRankingItem",
fields={
"application_id": serializers.CharField(help_text=_("Application ID")),
"application_name": serializers.CharField(help_text=_("Application name")),
"total_tokens": serializers.IntegerField(help_text=_("Total consumed tokens")),
},
),
),
},
),
},
)


class ApplicationQuestionRankingAPI(RankingBaseAPI):

@staticmethod
def get_response():
return inline_serializer(
name="ApplicationQuestionRankingResponse",
fields={
"code": serializers.IntegerField(help_text=_("Response code")),
"message": serializers.CharField(help_text=_("Response message")),
"data": inline_serializer(
name="ApplicationQuestionRankingPage",
fields={
"total": serializers.IntegerField(help_text=_("Total count")),
"records": serializers.ListField(
help_text=_("Application question ranking list"),
child=inline_serializer(
name="ApplicationQuestionRankingItem",
fields={
"application_id": serializers.CharField(help_text=_("Application ID")),
"application_name": serializers.CharField(help_text=_("Application name")),
"chat_record_count": serializers.IntegerField(help_text=_("Question count")),
},
),
),
},
),
},
)


class UserTokensRankingAPI(RankingBaseAPI):

@staticmethod
def get_response(serializer=inline_serializer(name="UserTokensRankingResponse", fields={
"code": serializers.IntegerField(help_text=_("Response code")),
"message": serializers.CharField(help_text=_("Response message")),
"data": inline_serializer(name="UserTokensRankingPage",
fields={"total": serializers.IntegerField(help_text=_("Total count")),
"records": serializers.ListField(help_text=_("User tokens ranking list"),
child=inline_serializer(
name="UserTokensRankingItem", fields={
"chat_user_id": serializers.CharField(
help_text=_("Chat user ID")),
"chat_user_type": serializers.CharField(
help_text=_("Chat user type")),
"total_tokens": serializers.IntegerField(
help_text=_(
"Total consumed tokens")),
"chat_record_count": serializers.IntegerField(
help_text=_("Question count")),
"asker": serializers.JSONField(
help_text=_(
"Asker user information")), }, ), ), }, ), }, )):
return serializer


class ApplicationAggregationAPI(APIMixin):

@staticmethod
def get_request():
return None

@staticmethod
def get_response():
return inline_serializer(
name="ApplicationAggregationResponse",
fields={
"code": serializers.IntegerField(help_text=_("Response code")),
"message": serializers.CharField(help_text=_("Response message")),
"data": inline_serializer(
name="ApplicationAggregationData",
fields={
"total": serializers.IntegerField(help_text=_("Total application count")),
"published": serializers.IntegerField(help_text=_("Published application count")),
"unpublished": serializers.IntegerField(help_text=_("Unpublished application count")),
},
),
},
)

@staticmethod
def get_parameters():
return [
OpenApiParameter(
name="workspace_id",
type=OpenApiTypes.STR,
location=OpenApiParameter.PATH,
required=True,
description=_("Workspace ID"),
),
]


class KnowledgeAggregationAPI(APIMixin):

@staticmethod
def get_request():
return None

@staticmethod
def get_response():
return inline_serializer(
name="KnowledgeAggregationResponse",
fields={
"code": serializers.IntegerField(help_text=_("Response code")),
"message": serializers.CharField(help_text=_("Response message")),
"data": inline_serializer(
name="KnowledgeAggregationData",
fields={
"total": serializers.IntegerField(help_text=_("Total knowledge count")),
"document_count": serializers.IntegerField(help_text=_("Total document count")),
"failed_document_count": serializers.IntegerField(help_text=_("Failed document count")),
},
),
},
)

@staticmethod
def get_parameters():
return [
OpenApiParameter(
name="workspace_id",
type=OpenApiTypes.STR,
location=OpenApiParameter.PATH,
required=True,
description=_("Workspace ID"),
),
]


class ToolAggregationAPI(APIMixin):

@staticmethod
def get_request():
return None

@staticmethod
def get_response():
return inline_serializer(
name="ToolAggregationResponse",
fields={
"code": serializers.IntegerField(help_text=_("Response code")),
"message": serializers.CharField(help_text=_("Response message")),
"data": inline_serializer(
name="ToolAggregationData",
fields={
"total": serializers.IntegerField(help_text=_("Total tool count")),
"active": serializers.IntegerField(help_text=_("Active tool count")),
"inactive": serializers.IntegerField(help_text=_("Inactive tool count")),
},
),
},
)

@staticmethod
def get_parameters():
return [
OpenApiParameter(
name="workspace_id",
type=OpenApiTypes.STR,
location=OpenApiParameter.PATH,
required=True,
description=_("Workspace ID"),
),
]

class ModelAggregationAPI(APIMixin):

@staticmethod
def get_request():
return None

@staticmethod
def get_response():
return inline_serializer(
name="ModelAggregationResponse",
fields={
"code": serializers.IntegerField(help_text=_("Response code")),
"message": serializers.CharField(help_text=_("Response message")),
"data": inline_serializer(
name="ModelAggregationData",
fields={
"total": serializers.IntegerField(help_text=_("Total model count")),
"active": serializers.IntegerField(help_text=_("Active model count")),
"inactive": serializers.IntegerField(help_text=_("Inactive model count")),
},
),
},
)

@staticmethod
def get_parameters():
return [
OpenApiParameter(
name="workspace_id",
type=OpenApiTypes.STR,
location=OpenApiParameter.PATH,
required=True,
description=_("Workspace ID"),
),
]
6 changes: 6 additions & 0 deletions apps/homepage/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class HomepageConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'homepage'
Empty file.
8 changes: 8 additions & 0 deletions apps/homepage/serializers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# coding=utf-8
"""
@project: MaxKB
@Author:虎虎
@file: __init__.py.py
@date:2026/5/13 14:31
@desc:
"""
Loading
Loading