diff --git a/api/handler/function_handler.go b/api/handler/function_handler.go index 174c8b93..dba2a7f3 100644 --- a/api/handler/function_handler.go +++ b/api/handler/function_handler.go @@ -183,140 +183,77 @@ func (h *FunctionHandler) Dall3(c *gin.Context) { return } - // var params map[string]interface{} - // if err := c.ShouldBindJSON(¶ms); err != nil { - // resp.ERROR(c, types.InvalidArgs) - // return - // } + var params map[string]interface{} + if err := c.ShouldBindJSON(¶ms); err != nil { + resp.ERROR(c, types.InvalidArgs) + return + } - // logger.Debugf("绘画参数:%+v", params) - // var user model.User - // res := h.DB.Where("id = ?", params["user_id"]).First(&user) - // if res.Error != nil { - // resp.ERROR(c, "当前用户不存在!") - // return - // } + var chatModel model.ChatModel + res := h.DB.Where("type = ?", "img").Where("enabled", true).First(&chatModel) + if res.Error != nil { + resp.ERROR(c, "没有找到可用的AI绘图模型!") + return + } - // if user.Power < h.App.SysConfig.Base.DallPower { - // resp.ERROR(c, "创建 DALL-E 绘图任务失败,算力不足") - // return - // } + logger.Debugf("绘画参数:%+v", params) + var user model.User + res = h.DB.Where("id = ?", params["user_id"]).First(&user) + if res.Error != nil { + resp.ERROR(c, "当前用户不存在!") + return + } - // // create dall task - // prompt := utils.InterfaceToString(params["prompt"]) - // task := types.DallTask{ - // UserId: user.Id, - // Prompt: prompt, - // ModelId: 0, - // ModelName: "dall-e-3", - // TranslateModelId: h.App.SysConfig.Base.AssistantModelId, - // N: 1, - // Quality: "standard", - // Size: "1024x1024", - // Style: "vivid", - // Power: h.App.SysConfig.Base.DallPower, - // } - // job := model.DallJob{ - // UserId: user.Id, - // Prompt: prompt, - // Power: h.App.SysConfig.Base.DallPower, - // TaskInfo: utils.JsonEncode(task), - // } - // err := h.DB.Create(&job).Error - // if err != nil { - // resp.ERROR(c, "创建 DALL-E 绘图任务失败:"+err.Error()) - // return - // } + if user.Power < chatModel.Power { + resp.ERROR(c, "创建绘图任务失败,算力不足") + return + } - // task.Id = job.Id - // content, err := h.dallService.Image(task, true) - // if err != nil { - // resp.ERROR(c, "任务执行失败:"+err.Error()) - // return - // } + // create dall task + prompt := utils.InterfaceToString(params["prompt"]) + task := types.DallTask{ + UserId: user.Id, + Prompt: prompt, + ModelId: chatModel.Id, + ModelName: chatModel.Value, + TranslateModelId: h.App.SysConfig.Base.AssistantModelId, + N: 1, + Quality: "standard", + Size: "1024x1024", + Style: "vivid", + Power: chatModel.Power, + } + job := model.DallJob{ + UserId: user.Id, + Prompt: prompt, + Power: chatModel.Power, + TaskInfo: utils.JsonEncode(task), + } + err := h.DB.Create(&job).Error + if err != nil { + resp.ERROR(c, "创建绘图任务失败:"+err.Error()) + return + } - // // 扣减算力 - // err = h.userService.DecreasePower(user.Id, job.Power, model.PowerLog{ - // Type: types.PowerConsume, - // Model: task.ModelName, - // Remark: fmt.Sprintf("绘画提示词:%s", utils.CutWords(job.Prompt, 10)), - // }) - // if err != nil { - // resp.ERROR(c, "扣减算力失败:"+err.Error()) - // return - // } + task.Id = job.Id + content, err := h.dallService.Image(task, true) + if err != nil { + resp.ERROR(c, "任务执行失败:"+err.Error()) + return + } - // resp.SUCCESS(c, content) - // } + // 扣减算力 + err = h.userService.DecreasePower(user.Id, job.Power, model.PowerLog{ + Type: types.PowerConsume, + Model: task.ModelName, + Remark: fmt.Sprintf("绘画提示词:%s", utils.CutWords(job.Prompt, 10)), + }) + if err != nil { + resp.ERROR(c, "扣减算力失败:"+err.Error()) + return + } - // // 实现一个联网搜索的函数工具,采用爬虫实现 - // func (h *FunctionHandler) WebSearch(c *gin.Context) { - // if err := h.checkAuth(c); err != nil { - // resp.ERROR(c, err.Error()) - // return - // } - - // var params map[string]interface{} - // if err := c.ShouldBindJSON(¶ms); err != nil { - // resp.ERROR(c, types.InvalidArgs) - // return - // } - - // // 从参数中获取搜索关键词 - // keyword, ok := params["keyword"].(string) - // if !ok || keyword == "" { - // resp.ERROR(c, "搜索关键词不能为空") - // return - // } - - // // 从参数中获取最大页数,默认为1页 - // maxPages := 1 - // if pages, ok := params["max_pages"].(float64); ok { - // maxPages = int(pages) - // } - - // // 获取用户ID - // userID, ok := params["user_id"].(float64) - // if !ok { - // resp.ERROR(c, "用户ID不能为空") - // return - // } - - // // 查询用户信息 - // var user model.User - // res := h.DB.Where("id = ?", int(userID)).First(&user) - // if res.Error != nil { - // resp.ERROR(c, "用户不存在") - // return - // } - - // // 检查用户算力是否足够 - // searchPower := 1 // 每次搜索消耗1点算力 - // if user.Power < searchPower { - // resp.ERROR(c, "算力不足,无法执行网络搜索") - // return - // } - - // // 执行网络搜索 - // searchResults, err := crawler.SearchWeb(keyword, maxPages) - // if err != nil { - // resp.ERROR(c, fmt.Sprintf("搜索失败: %v", err)) - // return - // } - - // // 扣减用户算力 - // err = h.userService.DecreasePower(user.Id, searchPower, model.PowerLog{ - // Type: types.PowerConsume, - // Model: "web_search", - // Remark: fmt.Sprintf("网络搜索:%s", utils.CutWords(keyword, 10)), - // }) - // if err != nil { - // resp.ERROR(c, "扣减算力失败:"+err.Error()) - // return - // } - - // 返回搜索结果 - // resp.SUCCESS(c, searchResults) + resp.SUCCESS(c, content) } // List 获取所有的工具函数列表 diff --git a/api/service/dalle/service.go b/api/service/dalle/service.go index dd9b66db..065e27e5 100644 --- a/api/service/dalle/service.go +++ b/api/service/dalle/service.go @@ -201,10 +201,6 @@ func (s *Service) Image(task types.DallTask, sync bool) (string, error) { var content string if sync { - imgURL, err := s.downloadImage(task.Id, res.Data[0].Url) - if err != nil { - return "", fmt.Errorf("error with download image: %v", err) - } content = fmt.Sprintf("```\n%s\n```\n下面是我为你创作的图片:\n\n![](%s)\n", task.Prompt, imgURL) }