mirror of
https://github.com/yangjian102621/geekai.git
synced 2026-04-13 14:44:30 +08:00
算力配置功能已完成
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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 获取所有的工具函数列表
|
||||
|
||||
@@ -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, `"`))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user