executeDifyWorkflowByMode 根据mode选择适当的DIFY执行方式
(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent, channel *model.Channel, modelName string)
| 949 | |
| 950 | // executeDifyWorkflowByMode 根据mode选择适当的DIFY执行方式 |
| 951 | func 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 |
| 1002 | func executeDifyCompletionMessages(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent, channel *model.Channel, modelName string) (*custom.WorkflowResponseData, error) { |
no test coverage detected