feat: save prompt in power log for dalle-3

This commit is contained in:
RockYang 2024-03-21 15:55:39 +08:00
parent 41ae411f9b
commit 7060edb3e5
3 changed files with 18 additions and 10 deletions

View File

@ -528,13 +528,15 @@ func (h *ChatHandler) subUserPower(userVo vo.User, session *types.ChatSession, p
res := h.DB.Model(&model.User{}).Where("id = ?", userVo.Id).UpdateColumn("power", gorm.Expr("power - ?", power))
if res.Error == nil {
// 记录算力消费日志
var u model.User
h.DB.Where("id", userVo.Id).First(&u)
h.DB.Create(&model.PowerLog{
UserId: userVo.Id,
Username: userVo.Username,
Type: types.PowerConsume,
Amount: power,
Mark: types.PowerSub,
Balance: userVo.Power - power,
Balance: u.Power,
Model: session.Model.Value,
Remark: fmt.Sprintf("模型名称:%s, 提问长度:%d回复长度%d", session.Model.Name, promptTokens, replyTokens),
CreatedAt: time.Now(),

View File

@ -252,18 +252,20 @@ func (h *FunctionHandler) Dall3(c *gin.Context) {
content := fmt.Sprintf("下面是根据您的描述创作的图片,它描绘了 【%s】 的场景。 \n\n![](%s)\n", prompt, imgURL)
// 更新用户算力
tx = h.DB.Model(&model.User{}).Where("id = ?", user.Id).UpdateColumn("power", gorm.Expr("power - ?", h.App.SysConfig.DallPower))
tx = h.DB.Model(&model.User{}).Where("id", user.Id).UpdateColumn("power", gorm.Expr("power - ?", h.App.SysConfig.DallPower))
// 记录算力变化日志
if tx.Error == nil && tx.RowsAffected > 0 {
var u model.User
h.DB.Where("id", user.Id).First(&u)
h.DB.Create(&model.PowerLog{
UserId: user.Id,
Username: user.Username,
Type: types.PowerConsume,
Amount: h.App.SysConfig.DallPower,
Balance: user.Power - h.App.SysConfig.DallPower,
Balance: u.Power,
Mark: types.PowerSub,
Model: "dall-e-3",
Remark: "",
Remark: fmt.Sprintf("绘画提示词:%s", utils.CutWords(prompt, 10)),
CreatedAt: time.Now(),
})
}

View File

@ -4,7 +4,7 @@ import (
"encoding/json"
"fmt"
"math/rand"
"strconv"
"strings"
"time"
"golang.org/x/crypto/sha3"
@ -94,10 +94,14 @@ func InterfaceToString(value interface{}) string {
return JsonEncode(value)
}
func Str2Float(str string) float64 {
num, err := strconv.ParseFloat(str, 64)
if err != nil {
return 0
func CutWords(str string, num int) string {
// 按空格分割字符串为单词切片
words := strings.Fields(str)
// 如果单词数量超过指定数量,则裁剪单词;否则保持原样
if len(words) > num {
return strings.Join(words[:num], " ") + " ..."
} else {
return str
}
return num
}