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)) res := h.DB.Model(&model.User{}).Where("id = ?", userVo.Id).UpdateColumn("power", gorm.Expr("power - ?", power))
if res.Error == nil { if res.Error == nil {
// 记录算力消费日志 // 记录算力消费日志
var u model.User
h.DB.Where("id", userVo.Id).First(&u)
h.DB.Create(&model.PowerLog{ h.DB.Create(&model.PowerLog{
UserId: userVo.Id, UserId: userVo.Id,
Username: userVo.Username, Username: userVo.Username,
Type: types.PowerConsume, Type: types.PowerConsume,
Amount: power, Amount: power,
Mark: types.PowerSub, Mark: types.PowerSub,
Balance: userVo.Power - power, Balance: u.Power,
Model: session.Model.Value, Model: session.Model.Value,
Remark: fmt.Sprintf("模型名称:%s, 提问长度:%d回复长度%d", session.Model.Name, promptTokens, replyTokens), Remark: fmt.Sprintf("模型名称:%s, 提问长度:%d回复长度%d", session.Model.Name, promptTokens, replyTokens),
CreatedAt: time.Now(), 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) 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 { if tx.Error == nil && tx.RowsAffected > 0 {
var u model.User
h.DB.Where("id", user.Id).First(&u)
h.DB.Create(&model.PowerLog{ h.DB.Create(&model.PowerLog{
UserId: user.Id, UserId: user.Id,
Username: user.Username, Username: user.Username,
Type: types.PowerConsume, Type: types.PowerConsume,
Amount: h.App.SysConfig.DallPower, Amount: h.App.SysConfig.DallPower,
Balance: user.Power - h.App.SysConfig.DallPower, Balance: u.Power,
Mark: types.PowerSub, Mark: types.PowerSub,
Model: "dall-e-3", Model: "dall-e-3",
Remark: "", Remark: fmt.Sprintf("绘画提示词:%s", utils.CutWords(prompt, 10)),
CreatedAt: time.Now(), CreatedAt: time.Now(),
}) })
} }

View File

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