2025-06-10 12:35:20 +00:00
|
|
|
|
# coding=utf-8
|
|
|
|
|
|
"""
|
|
|
|
|
|
@project: MaxKB
|
|
|
|
|
|
@Author:虎虎
|
|
|
|
|
|
@file: application_chat_record.py
|
|
|
|
|
|
@date:2025/6/10 15:08
|
|
|
|
|
|
@desc:
|
|
|
|
|
|
"""
|
|
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
|
|
from drf_spectacular.utils import extend_schema
|
|
|
|
|
|
from rest_framework.request import Request
|
|
|
|
|
|
from rest_framework.views import APIView
|
|
|
|
|
|
|
|
|
|
|
|
from application.api.application_chat_record import ApplicationChatRecordQueryAPI, \
|
|
|
|
|
|
ApplicationChatRecordImproveParagraphAPI, ApplicationChatRecordAddKnowledgeAPI
|
|
|
|
|
|
from application.serializers.application_chat_record import ApplicationChatRecordQuerySerializers, \
|
2025-06-12 12:07:31 +00:00
|
|
|
|
ApplicationChatRecordImproveSerializer, ChatRecordImproveSerializer, ApplicationChatRecordAddKnowledgeSerializer, \
|
|
|
|
|
|
ChatRecordOperateSerializer
|
2025-06-10 12:35:20 +00:00
|
|
|
|
from common import result
|
|
|
|
|
|
from common.auth import TokenAuth
|
|
|
|
|
|
from common.auth.authentication import has_permissions
|
2025-07-02 11:05:05 +00:00
|
|
|
|
from common.constants.permission_constants import PermissionConstants, RoleConstants, ViewPermission, CompareConstants
|
2025-06-10 12:35:20 +00:00
|
|
|
|
from common.utils.common import query_params_to_single_dict
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ApplicationChatRecord(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@extend_schema(
|
|
|
|
|
|
methods=['GET'],
|
2025-06-10 13:03:50 +00:00
|
|
|
|
description=_("Get the conversation record list"),
|
|
|
|
|
|
summary=_("Get the conversation record list"),
|
|
|
|
|
|
operation_id=_("Get the conversation record list"), # type: ignore
|
2025-06-10 12:35:20 +00:00
|
|
|
|
request=ApplicationChatRecordQueryAPI.get_request(),
|
|
|
|
|
|
parameters=ApplicationChatRecordQueryAPI.get_parameters(),
|
|
|
|
|
|
responses=ApplicationChatRecordQueryAPI.get_response(),
|
|
|
|
|
|
tags=[_("Application/Conversation Log")] # type: ignore
|
|
|
|
|
|
)
|
2025-06-20 14:31:41 +00:00
|
|
|
|
@has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_application_permission(),
|
|
|
|
|
|
PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_permission_workspace_manage_role(),
|
2025-07-02 11:05:05 +00:00
|
|
|
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
|
|
|
|
|
[PermissionConstants.APPLICATION.get_workspace_application_permission()],
|
|
|
|
|
|
CompareConstants.AND),
|
2025-06-11 04:21:13 +00:00
|
|
|
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
|
2025-06-10 12:35:20 +00:00
|
|
|
|
def get(self, request: Request, workspace_id: str, application_id: str, chat_id: str):
|
|
|
|
|
|
return result.success(ApplicationChatRecordQuerySerializers(
|
2025-06-25 08:56:10 +00:00
|
|
|
|
data={**query_params_to_single_dict(request.query_params), 'workspace_id': workspace_id,
|
|
|
|
|
|
'application_id': application_id,
|
2025-06-10 12:35:20 +00:00
|
|
|
|
'chat_id': chat_id
|
|
|
|
|
|
}).list())
|
|
|
|
|
|
|
|
|
|
|
|
class Page(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@extend_schema(
|
|
|
|
|
|
methods=['GET'],
|
|
|
|
|
|
description=_("Get the conversation record list by page"),
|
|
|
|
|
|
summary=_("Get the conversation record list by page"),
|
|
|
|
|
|
operation_id=_("Get the conversation record list by page"), # type: ignore
|
|
|
|
|
|
request=ApplicationChatRecordQueryAPI.get_request(),
|
|
|
|
|
|
parameters=ApplicationChatRecordQueryAPI.get_parameters(),
|
|
|
|
|
|
responses=ApplicationChatRecordQueryAPI.get_response(),
|
|
|
|
|
|
tags=[_("Application/Conversation Log")] # type: ignore
|
|
|
|
|
|
)
|
2025-06-20 14:31:41 +00:00
|
|
|
|
@has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_application_permission(),
|
|
|
|
|
|
PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_permission_workspace_manage_role(),
|
2025-07-02 11:05:05 +00:00
|
|
|
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
|
|
|
|
|
[PermissionConstants.APPLICATION.get_workspace_application_permission()],
|
|
|
|
|
|
CompareConstants.AND),
|
2025-06-11 07:21:01 +00:00
|
|
|
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
|
2025-06-10 12:35:20 +00:00
|
|
|
|
def get(self, request: Request, workspace_id: str, application_id: str, chat_id: str, current_page: int,
|
|
|
|
|
|
page_size: int):
|
|
|
|
|
|
return result.success(ApplicationChatRecordQuerySerializers(
|
2025-06-25 08:56:10 +00:00
|
|
|
|
data={**query_params_to_single_dict(request.query_params), 'workspace_id': workspace_id,
|
|
|
|
|
|
'application_id': application_id,
|
2025-06-10 12:35:20 +00:00
|
|
|
|
'chat_id': chat_id}).page(
|
|
|
|
|
|
current_page=current_page,
|
|
|
|
|
|
page_size=page_size))
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-06-12 12:07:31 +00:00
|
|
|
|
class ApplicationChatRecordOperateAPI(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@extend_schema(
|
|
|
|
|
|
methods=['GET'],
|
|
|
|
|
|
description=_("Get conversation record details"),
|
|
|
|
|
|
summary=_("Get conversation record details"),
|
|
|
|
|
|
operation_id=_("Get conversation record details"), # type: ignore
|
|
|
|
|
|
request=ApplicationChatRecordQueryAPI.get_request(),
|
|
|
|
|
|
parameters=ApplicationChatRecordQueryAPI.get_parameters(),
|
|
|
|
|
|
responses=ApplicationChatRecordQueryAPI.get_response(),
|
|
|
|
|
|
tags=[_("Application/Conversation Log")] # type: ignore
|
|
|
|
|
|
)
|
2025-06-20 14:31:41 +00:00
|
|
|
|
@has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_application_permission(),
|
|
|
|
|
|
PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_permission_workspace_manage_role(),
|
2025-11-10 03:36:30 +00:00
|
|
|
|
PermissionConstants.APPLICATION_READ.get_workspace_application_permission(),
|
|
|
|
|
|
PermissionConstants.APPLICATION_READ.get_workspace_permission_workspace_manage_role(),
|
2025-07-02 11:05:05 +00:00
|
|
|
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
|
|
|
|
|
[PermissionConstants.APPLICATION.get_workspace_application_permission()],
|
|
|
|
|
|
CompareConstants.AND),
|
2025-06-12 12:07:31 +00:00
|
|
|
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
|
|
|
|
|
|
def get(self, request: Request, workspace_id: str, application_id: str, chat_id: str, chat_record_id: str):
|
|
|
|
|
|
return result.success(ChatRecordOperateSerializer(
|
|
|
|
|
|
data={
|
|
|
|
|
|
'workspace_id': workspace_id,
|
|
|
|
|
|
'application_id': application_id,
|
|
|
|
|
|
'chat_id': chat_id,
|
|
|
|
|
|
'chat_record_id': chat_record_id}).one(True))
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-06-10 12:35:20 +00:00
|
|
|
|
class ApplicationChatRecordAddKnowledge(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@extend_schema(
|
|
|
|
|
|
methods=['POST'],
|
|
|
|
|
|
description=_("Add to Knowledge Base"),
|
|
|
|
|
|
summary=_("Add to Knowledge Base"),
|
|
|
|
|
|
operation_id=_("Add to Knowledge Base"), # type: ignore
|
|
|
|
|
|
request=ApplicationChatRecordAddKnowledgeAPI.get_request(),
|
|
|
|
|
|
parameters=ApplicationChatRecordAddKnowledgeAPI.get_parameters(),
|
|
|
|
|
|
responses=ApplicationChatRecordAddKnowledgeAPI.get_response(),
|
|
|
|
|
|
tags=[_("Application/Conversation Log")] # type: ignore
|
|
|
|
|
|
)
|
2025-06-20 14:31:41 +00:00
|
|
|
|
@has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_ADD_KNOWLEDGE.get_workspace_application_permission(),
|
|
|
|
|
|
PermissionConstants.APPLICATION_CHAT_LOG_ADD_KNOWLEDGE.get_workspace_permission_workspace_manage_role(),
|
2025-07-02 11:05:05 +00:00
|
|
|
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
|
|
|
|
|
[PermissionConstants.APPLICATION.get_workspace_application_permission()],
|
|
|
|
|
|
CompareConstants.AND),
|
2025-06-11 07:21:01 +00:00
|
|
|
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
|
2025-06-10 12:35:20 +00:00
|
|
|
|
def post(self, request: Request, workspace_id: str, application_id: str):
|
2025-09-29 02:05:23 +00:00
|
|
|
|
return result.success(ApplicationChatRecordAddKnowledgeSerializer(data = {'workspace_id': workspace_id, 'application_id': application_id, **request.data}).post_improve(
|
2025-08-29 07:25:13 +00:00
|
|
|
|
{'workspace_id': workspace_id, 'application_id': application_id, **request.data}, request=request))
|
2025-06-10 12:35:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ApplicationChatRecordImprove(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@extend_schema(
|
|
|
|
|
|
methods=['GET'],
|
|
|
|
|
|
description=_("Get the list of marked paragraphs"),
|
|
|
|
|
|
summary=_("Get the list of marked paragraphs"),
|
|
|
|
|
|
operation_id=_("Get the list of marked paragraphs"), # type: ignore
|
|
|
|
|
|
request=ApplicationChatRecordQueryAPI.get_request(),
|
|
|
|
|
|
parameters=ApplicationChatRecordQueryAPI.get_parameters(),
|
|
|
|
|
|
responses=ApplicationChatRecordQueryAPI.get_response(),
|
|
|
|
|
|
tags=[_("Application/Conversation Log")] # type: ignore
|
|
|
|
|
|
)
|
2025-06-20 14:31:41 +00:00
|
|
|
|
@has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_ANNOTATION.get_workspace_application_permission(),
|
|
|
|
|
|
PermissionConstants.APPLICATION_CHAT_LOG_ANNOTATION.get_workspace_permission_workspace_manage_role(),
|
2025-07-02 11:05:05 +00:00
|
|
|
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
|
|
|
|
|
[PermissionConstants.APPLICATION.get_workspace_application_permission()],
|
|
|
|
|
|
CompareConstants.AND),
|
2025-06-11 07:21:01 +00:00
|
|
|
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
|
2025-06-10 12:35:20 +00:00
|
|
|
|
def get(self, request: Request, workspace_id: str, application_id: str, chat_id: str, chat_record_id: str):
|
|
|
|
|
|
return result.success(ChatRecordImproveSerializer(
|
2025-06-25 08:56:10 +00:00
|
|
|
|
data={'workspace_id': workspace_id, 'application_id': application_id, 'chat_id': chat_id,
|
|
|
|
|
|
'chat_record_id': chat_record_id}).get())
|
2025-06-10 12:35:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ApplicationChatRecordImproveParagraph(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@extend_schema(
|
|
|
|
|
|
methods=['PUT'],
|
|
|
|
|
|
description=_("Annotation"),
|
|
|
|
|
|
summary=_("Annotation"),
|
|
|
|
|
|
operation_id=_("Annotation"), # type: ignore
|
|
|
|
|
|
request=ApplicationChatRecordImproveParagraphAPI.get_request(),
|
|
|
|
|
|
parameters=ApplicationChatRecordImproveParagraphAPI.get_parameters(),
|
|
|
|
|
|
responses=ApplicationChatRecordImproveParagraphAPI.get_response(),
|
|
|
|
|
|
tags=[_("Application/Conversation Log")] # type: ignore
|
|
|
|
|
|
)
|
2025-06-11 07:21:01 +00:00
|
|
|
|
@has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_ANNOTATION.get_workspace_application_permission(),
|
2025-06-20 14:31:41 +00:00
|
|
|
|
PermissionConstants.APPLICATION_CHAT_LOG_ANNOTATION.get_workspace_permission_workspace_manage_role(),
|
2025-07-02 11:05:05 +00:00
|
|
|
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
|
|
|
|
|
[PermissionConstants.APPLICATION.get_workspace_application_permission()],
|
|
|
|
|
|
CompareConstants.AND),
|
2025-06-11 07:21:01 +00:00
|
|
|
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
|
2025-06-10 12:35:20 +00:00
|
|
|
|
def put(self, request: Request,
|
|
|
|
|
|
workspace_id: str,
|
|
|
|
|
|
application_id: str,
|
|
|
|
|
|
chat_id: str,
|
|
|
|
|
|
chat_record_id: str,
|
|
|
|
|
|
knowledge_id: str,
|
|
|
|
|
|
document_id: str):
|
|
|
|
|
|
return result.success(ApplicationChatRecordImproveSerializer(
|
2025-06-25 08:56:10 +00:00
|
|
|
|
data={'workspace_id': workspace_id, 'application_id': application_id, 'chat_id': chat_id,
|
|
|
|
|
|
'chat_record_id': chat_record_id,
|
2025-08-29 07:25:13 +00:00
|
|
|
|
'knowledge_id': knowledge_id, 'document_id': document_id}).improve(request.data, request=request))
|
2025-06-10 12:35:20 +00:00
|
|
|
|
|
|
|
|
|
|
class Operate(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@extend_schema(
|
|
|
|
|
|
methods=['DELETE'],
|
|
|
|
|
|
description=_("Delete a Annotation"),
|
|
|
|
|
|
summary=_("Delete a Annotation"),
|
|
|
|
|
|
operation_id=_("Delete a Annotation"), # type: ignore
|
|
|
|
|
|
request=ApplicationChatRecordImproveParagraphAPI.Operate.get_request(),
|
|
|
|
|
|
parameters=ApplicationChatRecordImproveParagraphAPI.Operate.get_parameters(),
|
|
|
|
|
|
responses=ApplicationChatRecordImproveParagraphAPI.Operate.get_response(),
|
|
|
|
|
|
tags=[_("Application/Conversation Log")] # type: ignore
|
|
|
|
|
|
)
|
2025-06-11 07:21:01 +00:00
|
|
|
|
@has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_ANNOTATION.get_workspace_application_permission(),
|
2025-06-20 14:31:41 +00:00
|
|
|
|
PermissionConstants.APPLICATION_CHAT_LOG_ANNOTATION.get_workspace_permission_workspace_manage_role(),
|
2025-07-02 11:05:05 +00:00
|
|
|
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
|
|
|
|
|
[PermissionConstants.APPLICATION.get_workspace_application_permission()],
|
|
|
|
|
|
CompareConstants.AND),
|
2025-06-11 07:21:01 +00:00
|
|
|
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
|
2025-06-10 12:35:20 +00:00
|
|
|
|
def delete(self, request: Request, workspace_id: str, application_id: str, chat_id: str, chat_record_id: str,
|
|
|
|
|
|
knowledge_id: str,
|
|
|
|
|
|
document_id: str, paragraph_id: str):
|
|
|
|
|
|
return result.success(ApplicationChatRecordImproveSerializer.Operate(
|
|
|
|
|
|
data={'chat_id': chat_id, 'chat_record_id': chat_record_id, 'workspace_id': workspace_id,
|
2025-06-25 08:56:10 +00:00
|
|
|
|
'application_id': application_id,
|
2025-06-10 12:35:20 +00:00
|
|
|
|
'knowledge_id': knowledge_id, 'document_id': document_id,
|
2025-08-29 07:25:13 +00:00
|
|
|
|
'paragraph_id': paragraph_id}).delete(request=request))
|