diff --git a/api/core/types/config.go b/api/core/types/config.go index a8a84c70..0d2b0073 100644 --- a/api/core/types/config.go +++ b/api/core/types/config.go @@ -80,7 +80,6 @@ type BaseConfig struct { LumaPower int `json:"luma_power,omitempty"` // Luma 生成视频消耗算力 KeLingPowers map[string]int `json:"keling_powers,omitempty"` // 可灵生成视频消耗算力 AdvanceVoicePower int `json:"advance_voice_power,omitempty"` // 高级语音对话消耗算力 - PromptPower int `json:"prompt_power,omitempty"` // 生成提示词消耗算力 WechatCardURL string `json:"wechat_card_url,omitempty"` // 微信客服地址 @@ -94,7 +93,6 @@ type BaseConfig struct { Copyright string `json:"copyright"` // 版权信息 DefaultNickname string `json:"default_nickname"` // 默认昵称 ICP string `json:"icp"` // ICP 备案号 - MarkMapText string `json:"mark_map_text"` // 思维导入的默认文本 EnabledVerify bool `json:"enabled_verify"` // 是否启用验证码 EmailWhiteList []string `json:"email_white_list"` // 邮箱白名单列表 diff --git a/api/handler/admin/config_handler.go b/api/handler/admin/config_handler.go index 751fc439..158cdd5f 100644 --- a/api/handler/admin/config_handler.go +++ b/api/handler/admin/config_handler.go @@ -140,17 +140,15 @@ func (h *ConfigHandler) UpdateBase(c *gin.Context) { // UpdatePower 更新系统配置 func (h *ConfigHandler) UpdatePower(c *gin.Context) { var data struct { - InitPower int `json:"init_power,omitempty"` // 新用户注册赠送算力值 - DailyPower int `json:"daily_power,omitempty"` // 每日签到赠送算力 - InvitePower int `json:"invite_power,omitempty"` // 邀请新用户赠送算力值 - MjPower int `json:"mj_power,omitempty"` // MJ 绘画消耗算力 - MjActionPower int `json:"mj_action_power,omitempty"` // MJ 操作(放大,变换)消耗算力 - SdPower int `json:"sd_power,omitempty"` // SD 绘画消耗算力 - SunoPower int `json:"suno_power,omitempty"` // Suno 生成歌曲消耗算力 - LumaPower int `json:"luma_power,omitempty"` // Luma 生成视频消耗算力 - KeLingPowers map[string]int `json:"keling_powers,omitempty"` // 可灵生成视频消耗算力 - AdvanceVoicePower int `json:"advance_voice_power,omitempty"` // 高级语音对话消耗算力 - PromptPower int `json:"prompt_power,omitempty"` // 生成提示词消耗算力 + InitPower int `json:"init_power,omitempty"` // 新用户注册赠送算力值 + DailyPower int `json:"daily_power,omitempty"` // 每日签到赠送算力 + InvitePower int `json:"invite_power,omitempty"` // 邀请新用户赠送算力值 + MjPower int `json:"mj_power,omitempty"` // MJ 绘画消耗算力 + MjActionPower int `json:"mj_action_power,omitempty"` // MJ 操作(放大,变换)消耗算力 + SdPower int `json:"sd_power,omitempty"` // SD 绘画消耗算力 + SunoPower int `json:"suno_power,omitempty"` // Suno 生成歌曲消耗算力 + LumaPower int `json:"luma_power,omitempty"` // Luma 生成视频消耗算力 + KeLingPowers map[string]int `json:"keling_powers,omitempty"` // 可灵生成视频消耗算力 } if err := c.ShouldBindJSON(&data); err != nil { resp.ERROR(c, types.InvalidArgs) @@ -166,8 +164,6 @@ func (h *ConfigHandler) UpdatePower(c *gin.Context) { h.sysConfig.Base.SunoPower = data.SunoPower h.sysConfig.Base.LumaPower = data.LumaPower h.sysConfig.Base.KeLingPowers = data.KeLingPowers - h.sysConfig.Base.AdvanceVoicePower = data.AdvanceVoicePower - h.sysConfig.Base.PromptPower = data.PromptPower err := h.Update(types.ConfigKeySystem, h.sysConfig.Base) if err != nil { diff --git a/api/handler/function_handler.go b/api/handler/function_handler.go index 95e19819..ed40ae21 100644 --- a/api/handler/function_handler.go +++ b/api/handler/function_handler.go @@ -14,7 +14,6 @@ import ( "geekai/core/middleware" "geekai/core/types" "geekai/service" - "geekai/service/crawler" "geekai/service/dalle" "geekai/service/oss" "geekai/store/model" @@ -66,7 +65,6 @@ func (h *FunctionHandler) RegisterRoutes() { group.POST("weibo", h.WeiBo) group.POST("zaobao", h.ZaoBao) group.POST("dalle3", h.Dall3) - group.POST("websearch", h.WebSearch) } } @@ -189,140 +187,140 @@ 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 - } + // 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 + // } - if user.Power < h.App.SysConfig.Base.DallPower { - resp.ERROR(c, "创建 DALL-E 绘图任务失败,算力不足") - return - } + // if user.Power < h.App.SysConfig.Base.DallPower { + // resp.ERROR(c, "创建 DALL-E 绘图任务失败,算力不足") + // 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 - } + // // 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 + // } - task.Id = job.Id - content, err := h.dallService.Image(task, true) - 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 + // } - // 扣减算力 - 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 - } + // // 扣减算力 + // 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 + // } - resp.SUCCESS(c, content) -} + // resp.SUCCESS(c, content) + // } -// 实现一个联网搜索的函数工具,采用爬虫实现 -func (h *FunctionHandler) WebSearch(c *gin.Context) { - if err := h.checkAuth(c); 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 - } + // 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 - } + // // 从参数中获取搜索关键词 + // 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) - } + // // 从参数中获取最大页数,默认为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 - } + // // 获取用户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 - } + // // 查询用户信息 + // 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 - } + // // 检查用户算力是否足够 + // 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 - } + // // 执行网络搜索 + // 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 - } + // // 扣减用户算力 + // 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, searchResults) } // List 获取所有的工具函数列表 diff --git a/api/handler/prompt_handler.go b/api/handler/prompt_handler.go index 8622542c..f97ffde5 100644 --- a/api/handler/prompt_handler.go +++ b/api/handler/prompt_handler.go @@ -17,6 +17,7 @@ import ( "geekai/utils" "geekai/utils/resp" "strings" + "time" "github.com/gin-gonic/gin" "gorm.io/gorm" @@ -45,7 +46,7 @@ func (h *PromptHandler) RegisterRoutes() { group := h.App.Engine.Group("/api/prompt/") // 需要用户授权的接口 - group.Use(middleware.UserAuthMiddleware(h.App.Config.Session.SecretKey, h.App.Redis)) + group.Use(middleware.UserAuthMiddleware(h.App.Config.Session.SecretKey, h.App.Redis)).Use(middleware.RateLimitEvery(h.App.Redis, 30*time.Second)) { group.POST("lyric", h.Lyric) group.POST("image", h.Image) @@ -69,19 +70,6 @@ func (h *PromptHandler) Lyric(c *gin.Context) { return } - if h.App.SysConfig.Base.PromptPower > 0 { - userId := h.GetLoginUserId(c) - err = h.userService.DecreasePower(userId, h.App.SysConfig.Base.PromptPower, model.PowerLog{ - Type: types.PowerConsume, - Model: h.getPromptModel(), - Remark: "生成歌词", - }) - if err != nil { - resp.ERROR(c, err.Error()) - return - } - } - resp.SUCCESS(c, content) } @@ -99,18 +87,7 @@ func (h *PromptHandler) Image(c *gin.Context) { resp.ERROR(c, err.Error()) return } - if h.App.SysConfig.Base.PromptPower > 0 { - userId := h.GetLoginUserId(c) - err = h.userService.DecreasePower(userId, h.App.SysConfig.Base.PromptPower, model.PowerLog{ - Type: types.PowerConsume, - Model: h.getPromptModel(), - Remark: "生成绘画提示词", - }) - if err != nil { - resp.ERROR(c, err.Error()) - return - } - } + resp.SUCCESS(c, strings.Trim(content, `"`)) } @@ -129,19 +106,6 @@ func (h *PromptHandler) Video(c *gin.Context) { return } - if h.App.SysConfig.Base.PromptPower > 0 { - userId := h.GetLoginUserId(c) - err = h.userService.DecreasePower(userId, h.App.SysConfig.Base.PromptPower, model.PowerLog{ - Type: types.PowerConsume, - Model: h.getPromptModel(), - Remark: "生成视频脚本", - }) - if err != nil { - resp.ERROR(c, err.Error()) - return - } - } - resp.SUCCESS(c, strings.Trim(content, `"`)) } diff --git a/web/src/views/admin/settings/LicenseConfig.vue b/web/src/views/admin/settings/LicenseConfig.vue index 5ca11ba8..7845cc51 100644 --- a/web/src/views/admin/settings/LicenseConfig.vue +++ b/web/src/views/admin/settings/LicenseConfig.vue @@ -13,6 +13,9 @@