MCPcopy Create free account
hub / github.com/53AI/53AIHub / executeDifyWorkflowByMode

Function executeDifyWorkflowByMode

api/controller/relay/relay_workflow.go:951–999  ·  view source on GitHub ↗

executeDifyWorkflowByMode 根据mode选择适当的DIFY执行方式

(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent, channel *model.Channel, modelName string)

Source from the content-addressed store, hash-verified

949
950// executeDifyWorkflowByMode 根据mode选择适当的DIFY执行方式
951func executeDifyWorkflowByMode(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent, channel *model.Channel, modelName string) (*custom.WorkflowResponseData, error) {
952 // 检查模型名称是否包含 "workflow-"
953 if !strings.Contains(modelName, "workflow-") {
954 return executeDifyWorkflow(c, workflowRequest, agent, channel, modelName)
955 }
956
957 // 解析配置获取 mode
958 var config map[string]interface{}
959 if channel.Config != "" {
960 if err := json.Unmarshal([]byte(channel.Config), &config); err != nil {
961 logger.SysLogf("解析渠道配置失败: %v", err)
962 // 如果解析失败,默认使用工作流模式
963 return executeDifyWorkflow(c, workflowRequest, agent, channel, modelName)
964 }
965 } else {
966 config = make(map[string]interface{})
967 }
968
969 // 检查 mode 值是否存在
970 mode, exists := config["mode"]
971 if !exists {
972 // 如果不存在mode字段,则动态获取
973 fetchedMode, err := fetchDifyAppMode(channel)
974 if err != nil {
975 logger.SysLogf("获取DIFY应用mode失败: %v,使用默认工作流模式", err)
976 return executeDifyWorkflow(c, workflowRequest, agent, channel, modelName)
977 }
978
979 // 将获取到的mode信息更新到数据库中,以便后续请求使用
980 config["mode"] = fetchedMode
981 if err := model.UpdateChannelConfigOnly(channel.ChannelID, config); err != nil {
982 logger.SysLogf("更新渠道配置失败: %v", err)
983 // 即使更新失败,仍然使用当前获取到的mode值
984 }
985
986 // 直接使用获取到的mode值
987 if fetchedMode == "completion" {
988 return executeDifyCompletionMessages(c, workflowRequest, agent, channel, modelName)
989 }
990 return executeDifyWorkflow(c, workflowRequest, agent, channel, modelName)
991 }
992
993 // 检查 mode 值
994 if mode == "completion" {
995 return executeDifyCompletionMessages(c, workflowRequest, agent, channel, modelName)
996 }
997
998 return executeDifyWorkflow(c, workflowRequest, agent, channel, modelName)
999}
1000
1001// executeDifyCompletionMessages 执行 DIFY Completion Messages
1002func executeDifyCompletionMessages(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent, channel *model.Channel, modelName string) (*custom.WorkflowResponseData, error) {

Callers 1

executeWorkflowDirectFunction · 0.85

Calls 3

executeDifyWorkflowFunction · 0.85
fetchDifyAppModeFunction · 0.85

Tested by

no test coverage detected