package flow import ( "ai-agent/workflow/consts/flow" "ai-agent/workflow/model/entity" "gitea.redpowerfuture.com/red-future/common/beans" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gtime" ) // NodeExecutionInput 节点执行入参(包含配置+表单架构) type NodeExecutionInput struct { Config *entity.FlowNode // 节点配置 Global *FlowExecutionInput `json:"-"` } // FlowExecutionInput 工作流执行入参(全程不变) type FlowExecutionInput struct { IsDialogue bool `json:"isDialogue"` ExecutionId int64 `json:"executionId"` ConfigMap map[string]*entity.FlowNode `json:"configMap"` SessionId string `json:"sessionId" dc:"会话ID"` Desc string `json:"desc"` SkillName string `json:"skillName"` FileUrl []string `json:"fileUrl"` ExecutedNodes []string `json:"executedNodes"` } type ComposeMessagesReq struct { BuildType int `json:"buildType"` ModelName string `json:"modelName"` SkillName string `json:"skillName"` Form map[string]any `json:"form"` UserForm map[string]any `json:"userForm"` UserFiles []string `json:"userFiles"` SessionId string `json:"sessionId" dc:"会话ID"` IsBuild bool `json:"isBuild"` Cause string `json:"cause"` } type ComposeMessagesRes struct { Messages map[string]any `json:"messages"` EpicycleId int64 `json:"epicycleId" dc:"轮次ID"` } type CreateTaskReq struct { ModelName string `json:"modelName"` ModelKey string `json:"modelKey"` BizName string `json:"bizName"` CallbackUrl string `json:"callbackUrl"` InputRef string `json:"inputRef"` RequestPayload map[string]any `json:"requestPayload"` EpicycleId int64 `json:"epicycleId" dc:"轮次ID"` } type CreateTaskRes struct { TaskId string `json:"taskId"` } type GetIsChatModelRes struct { ModelName string `json:"modelName"` ResponseBody map[string]any `json:"responseBody"` } type ModelCallbackReq struct { g.Meta `path:"/modelCallback" method:"post" tags:"提示词处理" summary:"model-gateway 回调" dc:"model-gateway 成功后 GET 回调:callbackUrl/{bizName}"` TaskId string `p:"task_id" json:"task_id" v:"required#task_id不能为空" dc:"网关任务ID"` State int `p:"state" json:"state" dc:"网关任务状态"` OssFile string `p:"oss_file" json:"oss_file" dc:"结果文件地址"` FileType string `p:"file_type" json:"file_type" dc:"结果文件类型"` Text string `p:"text" json:"text" dc:"文本结果(可选,最多约 2000 字符)"` } type TaskCallback struct { TaskID string `json:"taskId"` State int `json:"state"` // 0排队中/1执行中/2成功/3失败/4已下载 OssFile string `json:"ossFile"` FileType string `json:"fileType"` Text string `json:"text"` //ImgContent *Image `json:"imgContent"` } type Text struct { Choices []struct { FinishReason string `json:"finish_reason"` Index int `json:"index"` Message struct { Content string `json:"content"` Role string `json:"role"` } `json:"message"` } `json:"choices"` Created int `json:"created"` Id string `json:"id"` Model string `json:"model"` Object string `json:"object"` Usage struct { CompletionTokens int `json:"completion_tokens"` PromptTokens int `json:"prompt_tokens"` PromptTokensDetails struct { CachedTokens int `json:"cached_tokens"` } TotalTokens int `json:"total_tokens"` } `json:"usage"` } type Image struct { Output struct { Choices []struct { FinishReason string `json:"finish_reason"` Message struct { Content []struct { Image string `json:"image"` } `json:"content"` Role string `json:"role"` } `json:"message"` } `json:"choices"` } `json:"output"` Usage struct { Height int `json:"height"` ImageCount int `json:"image_count"` Width int `json:"width"` } `json:"usage"` RequestId string `json:"request_id"` } //============================================================================= type ExecuteReq struct { g.Meta `path:"/execute" method:"post" tags:"任务管理" summary:"执行任务" dc:"执行任务"` FlowId int64 `json:"flowId" dc:"用户流程ID"` FlowName string `json:"flowName"` FlowContent *entity.FlowInfo `json:"flowContent" description:"流程内容"` NodeInputParams []*entity.FlowNode `json:"nodeInputParams" description:"节点输入参数"` SessionId string `json:"sessionId" dc:"会话ID"` Desc string `json:"desc"` SkillName string `json:"skillName"` FileUrl []string `json:"fileUrl"` ResultUrl string `json:"resultUrl"` } type ExecuteRes struct { Id int64 `json:"id,string" dc:"执行记录ID,用于查询执行状态和结果"` } type CancelReq struct { g.Meta `path:"/cancel" method:"post" tags:"任务管理" summary:"取消任务" dc:"取消任务"` SessionId string `json:"sessionId" dc:"会话ID"` } type CreateFlowExecutionReq struct { FlowUserId int64 `json:"flowUserId" description:"流程ID"` FlowName string `json:"flowName"` TriggerType flow.FlowExecutionTriggerType `json:"triggerType" description:"触发类型"` DurationMs int64 `json:"durationMs" description:"执行时长(毫秒)"` Status flow.FlowExecutionStatus `json:"status" description:"状态:1-运行中,2-成功,3-失败"` FlowContent *entity.FlowInfo `json:"flowContent" description:"流程内容"` NodeInputParams []*entity.FlowNode `json:"nodeInputParams" description:"节点输入参数"` OutputParams []map[string]interface{} `json:"outputParams" description:"输出参数"` ErrorMessage string `json:"errorMessage" description:"错误信息"` TraceId string `json:"traceId" description:"跟踪ID"` SessionId string `json:"sessionId" dc:"会话ID"` } type CreateFlowExecutionRes struct { Id int64 `json:"id,string"` } type UpdateFlowExecutionReq struct { Id int64 `json:"id" v:"required#ID不能为空"` DurationMs int64 `json:"durationMs" description:"执行时长(毫秒)"` Status flow.FlowExecutionStatus `json:"status" description:"状态:1-运行中,2-成功,3-失败"` OutputParams []map[string]interface{} `json:"outputParams" description:"输出参数"` ErrorMessage string `json:"errorMessage" description:"错误信息"` TraceId string `json:"traceId" description:"跟踪ID"` } type GetFlowExecutionReq struct { g.Meta `path:"/get" method:"get" tags:"任务管理" summary:"获取任务详情" dc:"获取任务详情"` Id int64 `json:"id" v:"required#ID不能为空"` SessionId string `json:"sessionId" dc:"会话ID"` } type ListFlowExecutionReq struct { g.Meta `path:"/list" method:"get" tags:"任务管理" summary:"任务列表" dc:"任务列表"` Page *beans.Page `json:"page"` Creator string `json:"creator"` } type ListFlowExecutionRes struct { List []*VOFlowExecution `json:"list"` Total int `json:"total"` } type VOFlowExecution struct { Id int64 `json:"id,string" dc:"id"` FlowUserId int64 `json:"flowUserId,string" description:"流程ID"` FlowName string `json:"flowName"` TriggerType flow.FlowExecutionTriggerType `json:"triggerType" description:"触发类型"` DurationMs int64 `json:"durationMs" description:"执行时长(毫秒)"` Status flow.FlowExecutionStatus `json:"status" description:"状态:1-运行中,2-成功,3-失败"` FlowContent *entity.FlowInfo `json:"flowContent" description:"流程内容"` NodeInputParams []*entity.FlowNode `json:"nodeInputParams" description:"节点输入参数"` OutputParams []map[string]interface{} `json:"outputParams" description:"输出参数"` ErrorMessage string `json:"errorMessage" description:"错误信息"` TraceId string `json:"traceId" description:"跟踪ID"` SessionId string `json:"sessionId" dc:"会话ID"` CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"` UpdatedAt *gtime.Time `json:"updatedAt" dc:"更新时间"` ImgAddressPrefix string `json:"imgAddressPrefix"` } // ========== 核心:构建树状结构 ========== // 定义树结构 type OutputItem struct { Timestamp string `json:"timestamp" description:"时间戳key"` Content string `json:"content" description:"内容值"` Label string `json:"label" description:"后缀+数字标号"` } type FlowNode struct { FlowName string `json:"flowName" description:"流程名称"` Id int64 `json:"Id,string" description:"任务ID"` SessionId string `json:"sessionId" description:"会话ID"` Items []OutputItem `json:"items" description:"输出项列表"` } type DateNode struct { CreateDate string `json:"createDate" description:"创建日期"` Flows []FlowNode `json:"flows" description:"流程列表"` } // 最终树结构返回体 type ListFlowExecutionTreeRes struct { Tree []DateNode `json:"tree"` ImgAddressPrefix string `json:"imgAddressPrefix"` }