Skip to content
Closed
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
112 changes: 112 additions & 0 deletions apps/trigger/serializers/task_source_trigger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# coding=utf-8
"""
@project: MaxKB
@Author:niu
@file: task_source_trigger.py
@date:2026/1/22 16:18
@desc:
"""
import os.path
import re
from typing import Dict

import uuid_utils.compat as uuid
from django.core import validators
from django.db import models, transaction
from django.db.models import QuerySet
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers

from application.models import Application
from common.db.search import page_search, get_dynamics_model, native_page_search, native_search
from common.exception.app_exception import AppApiException
from common.field.common import ObjectField
from common.utils.common import get_file_content
from knowledge.serializers.common import BatchSerializer
from maxkb.conf import PROJECT_DIR
from tools.models import Tool
from trigger.models import TriggerTypeChoices, Trigger, TriggerTaskTypeChoices, TriggerTask
from trigger.serializers.trigger import TriggerModelSerializer, TriggerSerializer, ApplicationTriggerTaskSerializer, \
ToolTriggerTaskSerializer, TriggerTaskModelSerializer


class TaskSourceTriggerSerializer(serializers.Serializer):
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
user_id = serializers.UUIDField(required=True, label=_("User ID"))

def insert(self, instance, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)
return TriggerSerializer().insert(instance, with_valid=True)


class TaskSourceTriggerOperateSerializer(serializers.Serializer):
trigger_id = serializers.UUIDField(required=True, label=_('trigger id'))
user_id = serializers.UUIDField(required=True, label=_("User ID"))
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
source_type = serializers.CharField(required=True, label=_('source type'))
source_id = serializers.CharField(required=True, label=_('source id'))

def is_valid(self, *, raise_exception=False):
super().is_valid(raise_exception=True)
workspace_id = self.data.get('workspace_id')
query_set = QuerySet(Trigger).filter(id=self.data.get('trigger_id'))
if workspace_id:
query_set = query_set.filter(workspace_id=workspace_id)
if not query_set.exists():
raise AppApiException(500, _('Trigger id does not exist'))

def one(self, with_valid=True):
if with_valid:
self.is_valid()
trigger_id = self.data.get('trigger_id')
workspace_id = self.data.get('workspace_id')
source_id = self.data.get('source_id')
source_type = self.data.get('source_type')

trigger = QuerySet(Trigger).filter(workspace_id=workspace_id, id=trigger_id).first()
trigger_task = TriggerTaskModelSerializer(TriggerTask.objects.filter(
trigger_id=trigger_id, source_id=source_id, source_type=source_type).first()).data

if source_type == TriggerTaskTypeChoices.APPLICATION:
application_task = ApplicationTriggerTaskSerializer(
Application.objects.filter(workspace_id=workspace_id, id=source_id).first()).data
return {
**TriggerModelSerializer(trigger).data,
'trigger_task': trigger_task,
'application_task': application_task,
}
if source_type == TriggerTaskTypeChoices.TOOL:
tool_task = ToolTriggerTaskSerializer(
Tool.objects.filter(workspace_id=workspace_id, id=source_id).first()).data
return {
**TriggerModelSerializer(trigger).data,
'trigger_task': trigger_task,
'application_task': tool_task,
}

def edit(self, instance: Dict, with_valid = True):
if with_valid:
self.is_valid(raise_exception=True)






class TaskSourceTriggerListSerializer(serializers.Serializer):
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
source_type = serializers.CharField(required=True, label=_('source type'))
source_id = serializers.CharField(required=True, label=_('source id'))

def list(self, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)

triggers = Trigger.objects.filter(workspace_id=self.data.get("workspace_id"),
triggertask__source_id=self.data.get("source_id"),
triggertask__source_type=self.data.get("source_type"),
is_active=True
).distinct()

return [TriggerModelSerializer(trigger).data for trigger in triggers]
41 changes: 34 additions & 7 deletions ui/src/views/trigger/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -143,13 +143,25 @@
<el-popover>
<template #reference>
<div class="flex">
<el-check-tag type="info" class="mr-8">
<el-check-tag
type="info"
class="mr-8"
v-if="
row.trigger_task.filter((item: any) => item.type === 'APPLICATION')
.length !== 0
"
>
智能体
{{
row.trigger_task.filter((item: any) => item.type === 'APPLICATION').length
}}
</el-check-tag>
<el-check-tag type="info">
<el-check-tag
type="info"
v-if="
row.trigger_task.filter((item: any) => item.type === 'TOOL').length !== 0
"
>
工具
{{ row.trigger_task.filter((item: any) => item.type === 'TOOL').length }}
</el-check-tag>
Expand All @@ -158,7 +170,13 @@

<div>
<!-- 智能体部分 -->
<div class="color-secondary mb-8">
<div
class="color-secondary mb-8"
v-if="
row.trigger_task.filter((item: any) => item.type === 'APPLICATION')
.length !== 0
"
>
智能体
{{
row.trigger_task.filter((item: any) => item.type === 'APPLICATION').length
Expand All @@ -176,11 +194,20 @@
</el-avatar>
<span>{{ item.name }}</span>
</div>

<el-divider class="mt-8 mb-8" />

<el-divider
class="mt-8 mb-8"
v-if="
row.trigger_task.some((item: any) => item.type === 'APPLICATION') &&
row.trigger_task.some((item: any) => item.type === 'TOOL')
"
/>
<!-- 工具部分 -->
<div class="color-secondary mb-8">
<div
class="color-secondary mb-8"
v-if="
row.trigger_task.filter((item: any) => item.type === 'TOOL').length !== 0
"
>
工具 {{ row.trigger_task.filter((item: any) => item.type === 'TOOL').length }}
</div>
<div
Expand Down