compress wip
This commit is contained in:
104
plugins/rp.go
104
plugins/rp.go
@@ -36,6 +36,10 @@ func RegisterRP(bot *laniakea.Bot) {
|
||||
rp.Command(generate, "g", "gen", "г")
|
||||
rp.Payload(compress, "rp.compress_chat")
|
||||
|
||||
rp.Payload(compressSettingStage1, "rp.compress_setting_s1")
|
||||
rp.Payload(compressSettingStage2, "rp.compress_setting_s2")
|
||||
rp.Payload(compressSetting, "rp.compress_setting")
|
||||
|
||||
bot.AddPlugins(rp.Build())
|
||||
}
|
||||
|
||||
@@ -85,11 +89,17 @@ func rpInfo(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
ctx.Error(err)
|
||||
}
|
||||
}
|
||||
compressText := "сообщений"
|
||||
if rpUser.CompressMethod == "tokens" {
|
||||
compressText = "токенов"
|
||||
}
|
||||
out := []string{
|
||||
fmt.Sprintf("Привет, %s!", ctx.From.FirstName),
|
||||
fmt.Sprintf("*Выбранная вайфу*: %s", waifu.Name),
|
||||
fmt.Sprintf("*Выбранный пресет*: %s", laniakea.EscapeMarkdown(rpUser.Preset.Name)),
|
||||
fmt.Sprintf("*Выбранная модель*: %s", rpUser.Model.Name),
|
||||
fmt.Sprintf("*Использовано токенов*: %d", rpUser.UsedTokens),
|
||||
fmt.Sprintf("*Настройки сжатия*: %d %s", rpUser.CompressLimit, compressText),
|
||||
fmt.Sprintf("*Твоё описание персонажа*: %s", rpUser.UserPrompt),
|
||||
}
|
||||
|
||||
@@ -100,6 +110,7 @@ func rpInfo(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
kb.AddCallbackButton("Сменить модель", "rp.model_list")
|
||||
kb.AddCallbackButton("Список сценариев", "rp.scenario_list")
|
||||
kb.AddCallbackButton("Список сеттингов", "rp.setting_list")
|
||||
kb.AddCallbackButton("Настройки сжатия", "rp.compress_setting_s1")
|
||||
kb.AddCallbackButton("Новый чат", "rp.new_chat_s1")
|
||||
kb.AddLine()
|
||||
kb.AddCallbackButton("Закрыть", "general.close")
|
||||
@@ -567,19 +578,37 @@ func generate(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
}
|
||||
|
||||
rpUser.UsedTokens = rpUser.UsedTokens + int64(len(userMessage)) + int64(len(answerContent))
|
||||
err = rpRep.UpdateUser(rpUser)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
}
|
||||
|
||||
tokens := redisRpRep.GetChatTokens(ctx.FromID, waifuId)
|
||||
tokens += len(userMessage) + len(answerContent)
|
||||
err = redisRpRep.SetChatTokens(ctx.FromID, waifuId, tokens)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
}
|
||||
err = rpRep.UpdateUser(rpUser)
|
||||
counter := redisRpRep.GetCounter(ctx.FromID, waifuId)
|
||||
err = redisRpRep.SetCounter(ctx.FromID, waifuId, counter+2)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
}
|
||||
|
||||
m.Delete()
|
||||
ctx.Answer(laniakea.EscapeMarkdown(answerContent))
|
||||
|
||||
// Auto compress
|
||||
compressMethod := rpUser.CompressMethod
|
||||
if compressMethod == "messages" {
|
||||
if counter+2 >= rpUser.CompressLimit {
|
||||
compress(ctx, db)
|
||||
}
|
||||
} else if compressMethod == "token" {
|
||||
if tokens >= rpUser.CompressLimit*1000 {
|
||||
compress(ctx, db)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func compress(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
@@ -650,3 +679,76 @@ func compress(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
kb = kb.AddCallbackButton("На главную", "rp.info")
|
||||
ctx.EditCallback("Сжатие завершено", kb)
|
||||
}
|
||||
|
||||
var messagesMethodCount = []int{
|
||||
20, 50, 100, 200, 500,
|
||||
}
|
||||
var tokenMethodCount = []int{
|
||||
16, 32, 64, 128, 256,
|
||||
}
|
||||
|
||||
func compressSettingStage1(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
|
||||
kb := laniakea.NewInlineKeyboard(2)
|
||||
kb.AddCallbackButton("По сообщениям", "rp.compress_setting_s2", "messages")
|
||||
kb.AddCallbackButton("По токенам", "rp.compress_setting_s2", "tokens")
|
||||
kb.AddLine().AddCallbackButton("На главную", "rp.info")
|
||||
|
||||
out := []string{
|
||||
"Выбери метод для определения сжатия",
|
||||
"*По сообщениям* — чат будет сжиматься после достижения определенного кол-ва сообщений в нём",
|
||||
"*По токенам* — чат будет сжиматься после достижения определенного кол-ва токенов в нём",
|
||||
}
|
||||
|
||||
ctx.EditCallback(strings.Join(out, "\n"), kb)
|
||||
}
|
||||
func compressSettingStage2(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
if len(ctx.Args) == 0 {
|
||||
return
|
||||
}
|
||||
method := ctx.Args[0]
|
||||
out := []string{
|
||||
"При выборе маленьких значений, чат будет сжиматься чаще, что замедляет вывод сообщений.",
|
||||
"При выборе слишком больших значений, некоторые детали могут теряться.",
|
||||
}
|
||||
kb := laniakea.NewInlineKeyboard(3)
|
||||
if method == "messages" {
|
||||
out = append(out, "Выбери количество сообщений, после которых будет происходить сжатие чата")
|
||||
for _, i := range messagesMethodCount {
|
||||
kb.AddCallbackButton(strconv.Itoa(i), "rp.compress_setting", method, i)
|
||||
}
|
||||
} else if method == "tokens" {
|
||||
out = append(out, "Выбери количество токенов, после которых будет происходить сжатие чата")
|
||||
for _, i := range tokenMethodCount {
|
||||
kb.AddCallbackButton(strconv.Itoa(i), "rp.compress_setting", method, i)
|
||||
}
|
||||
}
|
||||
kb.AddLine().AddCallbackButton("Назад", "rp.compress_setting_s1", method)
|
||||
kb.AddCallbackButton("На главную", "rp.info")
|
||||
ctx.EditCallback(strings.Join(out, "\n"), kb)
|
||||
}
|
||||
func compressSetting(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
rep := psql.NewRPRepository(db)
|
||||
user, err := rep.GetUser(int64(ctx.FromID))
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
if len(ctx.Args) != 2 {
|
||||
return
|
||||
}
|
||||
method := ctx.Args[0]
|
||||
count, err := strconv.Atoi(ctx.Args[1])
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
user.CompressMethod = method
|
||||
user.CompressLimit = count
|
||||
_, err = rep.UpdateUserCompressSettings(user)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
}
|
||||
kb := laniakea.NewInlineKeyboard(1).AddCallbackButton("На главную", "rp.info")
|
||||
ctx.EditCallback("Настройки сжатия были обновлены", kb)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user