- 新增 ActivePull 实体、DAO、DTO 及 Service,支持主动拉取任务管理 - 新增 ComposeCallback、VideoCallback、HttpNodeCallback 多类型回调接口 - FlowExecution 增加 NodeGroupId 和 TotalTokens 字段,支持节点组追踪与 Token 统计 - ExecutedNodes 结构由字符串列表改为包含执行状态的节点对象列表 - 重构回调通知机制,统一 Notify 函数调用 - 优化输出项类型判断逻辑,新增文件类型标识
124 lines
3.2 KiB
Go
124 lines
3.2 KiB
Go
package node
|
||
|
||
import (
|
||
"ai-agent/workflow/consts/node"
|
||
nodeDao "ai-agent/workflow/dao/node"
|
||
nodeDto "ai-agent/workflow/model/dto/node"
|
||
"ai-agent/workflow/service"
|
||
"context"
|
||
|
||
"gitea.com/red-future/common/utils"
|
||
"github.com/gogf/gf/v2/frame/g"
|
||
)
|
||
|
||
var NodePromptService = &nodePromptService{}
|
||
|
||
type nodePromptService struct{}
|
||
|
||
// Create 创建节点提示词
|
||
func (s *nodePromptService) Create(ctx context.Context, req *nodeDto.CreateNodePromptReq) (res *nodeDto.CreateNodePromptRes, err error) {
|
||
user, err := utils.GetUserInfo(ctx)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
get, err := nodeDao.NodePromptDao.Get(ctx, &nodeDto.GetNodePromptReq{Prompt: req.Prompt, Creator: user.UserName})
|
||
if err != nil {
|
||
return
|
||
}
|
||
if g.IsEmpty(get) {
|
||
var isAdmin bool
|
||
isAdmin, err = service.UtilService.IsAdmin(ctx)
|
||
if err != nil {
|
||
return
|
||
}
|
||
if isAdmin {
|
||
req.SourceType = node.SourceTypeSystem.Code()
|
||
} else {
|
||
req.SourceType = node.SourceTypeUser.Code()
|
||
}
|
||
var id int64
|
||
id, err = nodeDao.NodePromptDao.Insert(ctx, req)
|
||
if err != nil {
|
||
return
|
||
}
|
||
return &nodeDto.CreateNodePromptRes{Id: id}, err
|
||
}
|
||
return
|
||
}
|
||
|
||
// Update 更新节点提示词
|
||
func (s *nodePromptService) Update(ctx context.Context, req *nodeDto.UpdateNodePromptReq) (err error) {
|
||
get, err := nodeDao.NodePromptDao.Get(ctx, &nodeDto.GetNodePromptReq{Id: req.Id})
|
||
if err != nil {
|
||
return
|
||
}
|
||
isAdmin, err := service.UtilService.IsAdmin(ctx)
|
||
if err != nil {
|
||
return
|
||
}
|
||
if !isAdmin && get.SourceType == node.SourceTypeSystem.Code() {
|
||
_, err = s.Create(ctx, &nodeDto.CreateNodePromptReq{
|
||
NodeType: req.NodeType,
|
||
Prompt: req.Prompt,
|
||
})
|
||
} else {
|
||
_, err = nodeDao.NodePromptDao.Update(ctx, req)
|
||
}
|
||
return
|
||
}
|
||
|
||
// Delete 删除节点提示词
|
||
func (s *nodePromptService) Delete(ctx context.Context, req *nodeDto.DeleteNodePromptReq) (err error) {
|
||
_, err = nodeDao.NodePromptDao.Delete(ctx, req)
|
||
return
|
||
}
|
||
|
||
// GetById 根据ID查询节点提示词
|
||
func (s *nodePromptService) GetById(ctx context.Context, req *nodeDto.GetNodePromptReq) (res *nodeDto.NodePromptResp, err error) {
|
||
r, err := nodeDao.NodePromptDao.Get(ctx, req)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
res = &nodeDto.NodePromptResp{
|
||
NodePrompt: r,
|
||
}
|
||
return
|
||
}
|
||
|
||
// ListMy 查询当前创建人自己创建的提示词列表
|
||
func (s *nodePromptService) ListMy(ctx context.Context, req *nodeDto.ListMyNodePromptReq) (*nodeDto.ListNodePromptResp, error) {
|
||
user, err := utils.GetUserInfo(ctx)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
req.Creator = user.UserName
|
||
list, total, err := nodeDao.NodePromptDao.ListByOnlyCreator(ctx, req)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return &nodeDto.ListNodePromptResp{
|
||
List: list,
|
||
Total: total,
|
||
}, nil
|
||
}
|
||
|
||
// ListWithSystem 查询当前创建人+系统的提示词列表
|
||
func (s *nodePromptService) ListWithSystem(ctx context.Context, req *nodeDto.ListNodePromptReq) (*nodeDto.ListNodePromptResp, error) {
|
||
user, err := utils.GetUserInfo(ctx)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
// 如果请求中没有传creator,使用当前用户
|
||
if g.IsEmpty(req.Creator) {
|
||
req.Creator = user.UserName
|
||
}
|
||
list, total, err := nodeDao.NodePromptDao.ListByCreator(ctx, req)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return &nodeDto.ListNodePromptResp{
|
||
List: list,
|
||
Total: total,
|
||
}, nil
|
||
}
|