application_chat_record.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. # coding=utf-8
  2. """
  3. @project: MaxKB
  4. @Author:虎虎
  5. @file: application_chat_record.py
  6. @date:2025/6/10 15:08
  7. @desc:
  8. """
  9. from django.utils.translation import gettext_lazy as _
  10. from drf_spectacular.utils import extend_schema
  11. from rest_framework.request import Request
  12. from rest_framework.views import APIView
  13. from application.api.application_chat_record import ApplicationChatRecordQueryAPI, \
  14. ApplicationChatRecordImproveParagraphAPI, ApplicationChatRecordAddKnowledgeAPI
  15. from application.serializers.application_chat_record import ApplicationChatRecordQuerySerializers, \
  16. ApplicationChatRecordImproveSerializer, ChatRecordImproveSerializer, ApplicationChatRecordAddKnowledgeSerializer, \
  17. ChatRecordOperateSerializer
  18. from common import result
  19. from common.auth import TokenAuth
  20. from common.auth.authentication import has_permissions
  21. from common.constants.permission_constants import PermissionConstants, RoleConstants, ViewPermission, CompareConstants
  22. from common.utils.common import query_params_to_single_dict
  23. class ApplicationChatRecord(APIView):
  24. authentication_classes = [TokenAuth]
  25. @extend_schema(
  26. methods=['GET'],
  27. description=_("Get the conversation record list"),
  28. summary=_("Get the conversation record list"),
  29. operation_id=_("Get the conversation record list"), # type: ignore
  30. request=ApplicationChatRecordQueryAPI.get_request(),
  31. parameters=ApplicationChatRecordQueryAPI.get_parameters(),
  32. responses=ApplicationChatRecordQueryAPI.get_response(),
  33. tags=[_("Application/Conversation Log")] # type: ignore
  34. )
  35. @has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_application_permission(),
  36. PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_permission_workspace_manage_role(),
  37. ViewPermission([RoleConstants.USER.get_workspace_role()],
  38. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  39. CompareConstants.AND),
  40. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  41. def get(self, request: Request, workspace_id: str, application_id: str, chat_id: str):
  42. return result.success(ApplicationChatRecordQuerySerializers(
  43. data={**query_params_to_single_dict(request.query_params), 'workspace_id': workspace_id,
  44. 'application_id': application_id,
  45. 'chat_id': chat_id
  46. }).list())
  47. class Page(APIView):
  48. authentication_classes = [TokenAuth]
  49. @extend_schema(
  50. methods=['GET'],
  51. description=_("Get the conversation record list by page"),
  52. summary=_("Get the conversation record list by page"),
  53. operation_id=_("Get the conversation record list by page"), # type: ignore
  54. request=ApplicationChatRecordQueryAPI.get_request(),
  55. parameters=ApplicationChatRecordQueryAPI.get_parameters(),
  56. responses=ApplicationChatRecordQueryAPI.get_response(),
  57. tags=[_("Application/Conversation Log")] # type: ignore
  58. )
  59. @has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_application_permission(),
  60. PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_permission_workspace_manage_role(),
  61. ViewPermission([RoleConstants.USER.get_workspace_role()],
  62. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  63. CompareConstants.AND),
  64. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  65. def get(self, request: Request, workspace_id: str, application_id: str, chat_id: str, current_page: int,
  66. page_size: int):
  67. return result.success(ApplicationChatRecordQuerySerializers(
  68. data={**query_params_to_single_dict(request.query_params), 'workspace_id': workspace_id,
  69. 'application_id': application_id,
  70. 'chat_id': chat_id}).page(
  71. current_page=current_page,
  72. page_size=page_size))
  73. class ApplicationChatRecordOperateAPI(APIView):
  74. authentication_classes = [TokenAuth]
  75. @extend_schema(
  76. methods=['GET'],
  77. description=_("Get conversation record details"),
  78. summary=_("Get conversation record details"),
  79. operation_id=_("Get conversation record details"), # type: ignore
  80. request=ApplicationChatRecordQueryAPI.get_request(),
  81. parameters=ApplicationChatRecordQueryAPI.get_parameters(),
  82. responses=ApplicationChatRecordQueryAPI.get_response(),
  83. tags=[_("Application/Conversation Log")] # type: ignore
  84. )
  85. @has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_application_permission(),
  86. PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_permission_workspace_manage_role(),
  87. PermissionConstants.APPLICATION_READ.get_workspace_application_permission(),
  88. PermissionConstants.APPLICATION_READ.get_workspace_permission_workspace_manage_role(),
  89. ViewPermission([RoleConstants.USER.get_workspace_role()],
  90. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  91. CompareConstants.AND),
  92. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  93. def get(self, request: Request, workspace_id: str, application_id: str, chat_id: str, chat_record_id: str):
  94. return result.success(ChatRecordOperateSerializer(
  95. data={
  96. 'workspace_id': workspace_id,
  97. 'application_id': application_id,
  98. 'chat_id': chat_id,
  99. 'chat_record_id': chat_record_id}).one(True))
  100. class ApplicationChatRecordAddKnowledge(APIView):
  101. authentication_classes = [TokenAuth]
  102. @extend_schema(
  103. methods=['POST'],
  104. description=_("Add to Knowledge Base"),
  105. summary=_("Add to Knowledge Base"),
  106. operation_id=_("Add to Knowledge Base"), # type: ignore
  107. request=ApplicationChatRecordAddKnowledgeAPI.get_request(),
  108. parameters=ApplicationChatRecordAddKnowledgeAPI.get_parameters(),
  109. responses=ApplicationChatRecordAddKnowledgeAPI.get_response(),
  110. tags=[_("Application/Conversation Log")] # type: ignore
  111. )
  112. @has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_ADD_KNOWLEDGE.get_workspace_application_permission(),
  113. PermissionConstants.APPLICATION_CHAT_LOG_ADD_KNOWLEDGE.get_workspace_permission_workspace_manage_role(),
  114. ViewPermission([RoleConstants.USER.get_workspace_role()],
  115. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  116. CompareConstants.AND),
  117. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  118. def post(self, request: Request, workspace_id: str, application_id: str):
  119. return result.success(ApplicationChatRecordAddKnowledgeSerializer(data = {'workspace_id': workspace_id, 'application_id': application_id, **request.data}).post_improve(
  120. {'workspace_id': workspace_id, 'application_id': application_id, **request.data}, request=request))
  121. class ApplicationChatRecordImprove(APIView):
  122. authentication_classes = [TokenAuth]
  123. @extend_schema(
  124. methods=['GET'],
  125. description=_("Get the list of marked paragraphs"),
  126. summary=_("Get the list of marked paragraphs"),
  127. operation_id=_("Get the list of marked paragraphs"), # type: ignore
  128. request=ApplicationChatRecordQueryAPI.get_request(),
  129. parameters=ApplicationChatRecordQueryAPI.get_parameters(),
  130. responses=ApplicationChatRecordQueryAPI.get_response(),
  131. tags=[_("Application/Conversation Log")] # type: ignore
  132. )
  133. @has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_ANNOTATION.get_workspace_application_permission(),
  134. PermissionConstants.APPLICATION_CHAT_LOG_ANNOTATION.get_workspace_permission_workspace_manage_role(),
  135. ViewPermission([RoleConstants.USER.get_workspace_role()],
  136. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  137. CompareConstants.AND),
  138. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  139. def get(self, request: Request, workspace_id: str, application_id: str, chat_id: str, chat_record_id: str):
  140. return result.success(ChatRecordImproveSerializer(
  141. data={'workspace_id': workspace_id, 'application_id': application_id, 'chat_id': chat_id,
  142. 'chat_record_id': chat_record_id}).get())
  143. class ApplicationChatRecordImproveParagraph(APIView):
  144. authentication_classes = [TokenAuth]
  145. @extend_schema(
  146. methods=['PUT'],
  147. description=_("Annotation"),
  148. summary=_("Annotation"),
  149. operation_id=_("Annotation"), # type: ignore
  150. request=ApplicationChatRecordImproveParagraphAPI.get_request(),
  151. parameters=ApplicationChatRecordImproveParagraphAPI.get_parameters(),
  152. responses=ApplicationChatRecordImproveParagraphAPI.get_response(),
  153. tags=[_("Application/Conversation Log")] # type: ignore
  154. )
  155. @has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_ANNOTATION.get_workspace_application_permission(),
  156. PermissionConstants.APPLICATION_CHAT_LOG_ANNOTATION.get_workspace_permission_workspace_manage_role(),
  157. ViewPermission([RoleConstants.USER.get_workspace_role()],
  158. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  159. CompareConstants.AND),
  160. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  161. def put(self, request: Request,
  162. workspace_id: str,
  163. application_id: str,
  164. chat_id: str,
  165. chat_record_id: str,
  166. knowledge_id: str,
  167. document_id: str):
  168. return result.success(ApplicationChatRecordImproveSerializer(
  169. data={'workspace_id': workspace_id, 'application_id': application_id, 'chat_id': chat_id,
  170. 'chat_record_id': chat_record_id,
  171. 'knowledge_id': knowledge_id, 'document_id': document_id}).improve(request.data, request=request))
  172. class Operate(APIView):
  173. authentication_classes = [TokenAuth]
  174. @extend_schema(
  175. methods=['DELETE'],
  176. description=_("Delete a Annotation"),
  177. summary=_("Delete a Annotation"),
  178. operation_id=_("Delete a Annotation"), # type: ignore
  179. request=ApplicationChatRecordImproveParagraphAPI.Operate.get_request(),
  180. parameters=ApplicationChatRecordImproveParagraphAPI.Operate.get_parameters(),
  181. responses=ApplicationChatRecordImproveParagraphAPI.Operate.get_response(),
  182. tags=[_("Application/Conversation Log")] # type: ignore
  183. )
  184. @has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_ANNOTATION.get_workspace_application_permission(),
  185. PermissionConstants.APPLICATION_CHAT_LOG_ANNOTATION.get_workspace_permission_workspace_manage_role(),
  186. ViewPermission([RoleConstants.USER.get_workspace_role()],
  187. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  188. CompareConstants.AND),
  189. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  190. def delete(self, request: Request, workspace_id: str, application_id: str, chat_id: str, chat_record_id: str,
  191. knowledge_id: str,
  192. document_id: str, paragraph_id: str):
  193. return result.success(ApplicationChatRecordImproveSerializer.Operate(
  194. data={'chat_id': chat_id, 'chat_record_id': chat_record_id, 'workspace_id': workspace_id,
  195. 'application_id': application_id,
  196. 'knowledge_id': knowledge_id, 'document_id': document_id,
  197. 'paragraph_id': paragraph_id}).delete(request=request))