diff --git a/apps/trigger/serializers/trigger_task.py b/apps/trigger/serializers/trigger_task.py index f8a1994a077..3730d399e77 100644 --- a/apps/trigger/serializers/trigger_task.py +++ b/apps/trigger/serializers/trigger_task.py @@ -13,12 +13,23 @@ from django.utils.translation import gettext_lazy as _ from rest_framework import serializers +from application.models import ChatRecord from common.db.search import native_page_search, get_dynamics_model +from common.exception.app_exception import AppApiException from common.utils.common import get_file_content from maxkb.conf import PROJECT_DIR from trigger.models import TriggerTask, TaskRecord +class ChatRecordSerializerModel(serializers.ModelSerializer): + class Meta: + model = ChatRecord + fields = ['id', 'chat_id', 'vote_status', 'vote_reason', 'vote_other_content', 'problem_text', 'answer_text', + 'message_tokens', 'answer_tokens', 'const', 'improve_paragraph_id_list', 'run_time', 'index', + 'answer_text_list', 'details', + 'create_time', 'update_time'] + + class TriggerTaskResponse(serializers.ModelSerializer): class Meta: model = TriggerTask @@ -40,6 +51,28 @@ def list(self, with_valid=True): return [TriggerTaskResponse(row).data for row in self.get_query_set()] +class TriggerTaskRecordOperateSerializer(serializers.Serializer): + trigger_id = serializers.CharField(required=True, label=_("Trigger ID")) + workspace_id = serializers.CharField(required=True, label=_('workspace id')) + trigger_task_id = serializers.CharField(required=True, label=_("Trigger task ID")) + trigger_task_record_id = serializers.CharField(required=True, label=_("Trigger task record ID")) + + def get_execution_details(self, is_valid=True): + if is_valid: + self.is_valid(raise_exception=True) + task_record = QuerySet(TaskRecord).filter(trigger_id=self.data.get("trigger_id"), + trigger_task_id=self.data.get("trigger_task_id"), + id=self.data.get('trigger_task_record_id')).first() + if not task_record: + raise AppApiException(500, _('Trigger task record id does not exist')) + if task_record.source_type == 'APPLICATION': + chat_record = QuerySet(ChatRecord).filter(id=task_record.task_record_id).first() + return ChatRecordSerializerModel(chat_record).data + if task_record.source_type == 'TOOL': + pass + return None + + class TriggerTaskRecordQuerySerializer(serializers.Serializer): trigger_id = serializers.CharField(required=True, label=_("Trigger ID")) workspace_id = serializers.CharField(required=True, label=_('workspace id')) diff --git a/apps/trigger/urls.py b/apps/trigger/urls.py index ca92a43bfb5..72571d1d9c9 100644 --- a/apps/trigger/urls.py +++ b/apps/trigger/urls.py @@ -31,5 +31,8 @@ 'workspace//trigger//task_record//', views.TriggerTaskRecordPageView.as_view(), name='trigger_task_record'), path('workspace//task', views.TriggerTaskView.as_view(), name='task'), - path('trigger/v1/webhook/', EventTriggerView.as_view(), name='trigger_webhook') + path('trigger/v1/webhook/', EventTriggerView.as_view(), name='trigger_webhook'), + path( + 'workspace//trigger//trigger_task//trigger_task_record/', + views.TriggerTaskRecordExecutionDetailsView.as_view(), name='task source trigger'), ] diff --git a/apps/trigger/views/trigger_task.py b/apps/trigger/views/trigger_task.py index 41d702bcd42..cd1222e9cb3 100644 --- a/apps/trigger/views/trigger_task.py +++ b/apps/trigger/views/trigger_task.py @@ -13,7 +13,8 @@ from application.api.application_api import ApplicationCreateAPI from common import result -from trigger.serializers.trigger_task import TriggerTaskQuerySerializer, TriggerTaskRecordQuerySerializer +from trigger.serializers.trigger_task import TriggerTaskQuerySerializer, TriggerTaskRecordQuerySerializer, \ + TriggerTaskRecordOperateSerializer class TriggerTaskView(APIView): @@ -36,6 +37,26 @@ class TriggerTaskRecordView(APIView): pass +class TriggerTaskRecordExecutionDetailsView(APIView): + @extend_schema( + methods=['GET'], + description=_('Retrieve detailed records of tasks executed by the trigger.'), + summary=_('Retrieve detailed records of tasks executed by the trigger.'), + operation_id=_('Retrieve detailed records of tasks executed by the trigger.'), # type: ignore + parameters=ApplicationCreateAPI.get_parameters(), + request=ApplicationCreateAPI.get_request(), + responses=ApplicationCreateAPI.get_response(), + tags=[_('Trigger')] # type: ignore + ) + def get(self, request: Request, workspace_id: str, trigger_id: str, trigger_task_id: str, + trigger_task_record_id: str): + return result.success( + TriggerTaskRecordOperateSerializer( + data={'workspace_id': workspace_id, 'trigger_id': trigger_id, 'trigger_task_id': trigger_task_id, + 'trigger_task_record_id': trigger_task_record_id}) + .get_execution_details()) + + class TriggerTaskRecordPageView(APIView): @extend_schema( methods=['GET'], diff --git a/ui/src/api/trigger/trigger.ts b/ui/src/api/trigger/trigger.ts index b6e3addfa65..c6043f05fc9 100644 --- a/ui/src/api/trigger/trigger.ts +++ b/ui/src/api/trigger/trigger.ts @@ -141,6 +141,19 @@ const pageTriggerTaskRecord = ( loading, ) } + +const getTriggerTaskRecordDetails = ( + trigger_id: string, + trigger_task_id: string, + trigger_task_record_id: string, + loading?: Ref, +) => { + return get( + `${prefix.value}/${trigger_id}/trigger_task/${trigger_task_id}/trigger_task_record/${trigger_task_record_id}`, + {}, + loading, + ) +} export default { pageTrigger, getTriggerList, @@ -151,4 +164,5 @@ export default { delMulTrigger, activateMulTrigger, pageTriggerTaskRecord, + getTriggerTaskRecordDetails, } diff --git a/ui/src/views/trigger/component/TriggerTaskRecordDrawer.vue b/ui/src/views/trigger/component/TriggerTaskRecordDrawer.vue index fae5b2af669..15d7346a2b8 100644 --- a/ui/src/views/trigger/component/TriggerTaskRecordDrawer.vue +++ b/ui/src/views/trigger/component/TriggerTaskRecordDrawer.vue @@ -146,7 +146,11 @@ import { ref, reactive } from 'vue' import { isAppIcon, resetUrl } from '@/utils/common' import triggerAPI from '@/api/trigger/trigger' import { datetimeFormat } from '@/utils/time' -const toDetails = (row: any) => {} +const toDetails = (row: any) => { + triggerAPI.getTriggerTaskRecordDetails(row.trigger_id, row.trigger_task_id, row.id).then((ok) => { + console.log(ok) + }) +} const searchType = ref('name') const drawer = ref(false) const paginationConfig = reactive({