算力配置功能已完成

This commit is contained in:
GeekMaster
2025-08-28 14:59:42 +08:00
parent 77a8969f73
commit ebaaefaf7a
7 changed files with 220 additions and 252 deletions

View File

@@ -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(&params); err != nil {
resp.ERROR(c, types.InvalidArgs)
return
}
// var params map[string]interface{}
// if err := c.ShouldBindJSON(&params); 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(&params); err != nil {
resp.ERROR(c, types.InvalidArgs)
return
}
// var params map[string]interface{}
// if err := c.ShouldBindJSON(&params); 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 获取所有的工具函数列表