some fixes and changes; #4
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"kurumibot/database/red"
|
||||
"kurumibot/utils"
|
||||
"kurumibot/utils/ai"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
@@ -330,13 +331,17 @@ func chatStat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
fmt.Sprintf("*Кол-во токенов*: %d", tokens),
|
||||
}
|
||||
psqlRpRep := psql.NewRPRepository(db)
|
||||
scenarioId := redisRpRep.GetChatScenarioID(ctx.FromID, waifuId)
|
||||
if scenarioId > 0 {
|
||||
scenario, err := psqlRpRep.GetScenario(scenarioId)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
scenarioIds := redisRpRep.GetChatScenariosIDs(ctx.FromID, waifuId)
|
||||
if len(scenarioIds) > 0 && scenarioIds[0] > 0 {
|
||||
scenarioNames := make([]string, len(scenarioIds))
|
||||
for i, id := range scenarioIds {
|
||||
scenario, err := psqlRpRep.GetScenario(id)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
}
|
||||
scenarioNames[i] = fmt.Sprintf("%s (ID: %d)", scenario.Name, scenario.ID)
|
||||
}
|
||||
out = append(out, fmt.Sprintf("*Выбранный сценарий*: %s (ID: %d)", scenario.Name, scenario.ID))
|
||||
out = append(out, fmt.Sprintf("*Выбранные сценарии*: %s", strings.Join(scenarioNames, ", ")))
|
||||
}
|
||||
|
||||
settingId := redisRpRep.GetChatSettingID(ctx.FromID, waifuId)
|
||||
@@ -391,15 +396,40 @@ func newChatStage2(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
return
|
||||
}
|
||||
|
||||
selectedScenariosIds := make([]int, 0)
|
||||
if len(ctx.Args) > 1 {
|
||||
selectedScenariosIds = utils.Map(utils.StringToInt, ctx.Args[1:])
|
||||
}
|
||||
|
||||
out := []string{
|
||||
"Выбери сценарий:",
|
||||
}
|
||||
kb := laniakea.NewInlineKeyboard(2)
|
||||
scenariosIds := make([]int, 0)
|
||||
for _, scenario := range scenarios {
|
||||
out = append(out, fmt.Sprintf("*%s* - %s", scenario.Name, scenario.Description))
|
||||
kb.AddCallbackButton(scenario.Name, "rp.new_chat", settingId, scenario.ID)
|
||||
isSelected := slices.Index(selectedScenariosIds, scenario.ID) >= 0
|
||||
prefix := ""
|
||||
if isSelected {
|
||||
prefix = "✅"
|
||||
}
|
||||
out = append(out, fmt.Sprintf("%s*%s* - %s", prefix, scenario.Name, scenario.Description))
|
||||
if isSelected {
|
||||
scenariosIds = utils.PopSlice(
|
||||
selectedScenariosIds,
|
||||
slices.Index(selectedScenariosIds, scenario.ID),
|
||||
)
|
||||
} else {
|
||||
scenariosIds = append(selectedScenariosIds, scenario.ID)
|
||||
}
|
||||
kb.AddCallbackButton(
|
||||
fmt.Sprintf("%s%s", prefix, scenario.Name),
|
||||
"rp.new_chat_s2", utils.AppendToInt(settingId, scenariosIds)...,
|
||||
)
|
||||
}
|
||||
kb.AddCallbackButton("Без сценария", "rp.new_chat", 0)
|
||||
if len(scenariosIds) == 0 {
|
||||
scenariosIds = append(scenariosIds, 0)
|
||||
}
|
||||
kb.AddCallbackButton("Продолжить", "rp.new_chat", utils.AppendToInt(settingId, selectedScenariosIds)...)
|
||||
kb.AddLine()
|
||||
kb.AddCallbackButton("Назад", "rp.new_chat_s1")
|
||||
ctx.EditCallback(strings.Join(out, "\n"), kb)
|
||||
@@ -438,24 +468,27 @@ func newChat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
chatPrompt = "Вот краткое описание мира(сеттинг): " + scenario.Prompt + "."
|
||||
}
|
||||
|
||||
scenarioId, err := strconv.Atoi(ctx.Args[1])
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
if scenarioId > 0 {
|
||||
scenariosIds := utils.Map(utils.StringToInt, ctx.Args[1:])
|
||||
if len(scenariosIds) > 0 && scenariosIds[0] > 0 {
|
||||
rep := psql.NewRPRepository(db)
|
||||
scenario, err := rep.GetScenario(scenarioId)
|
||||
if err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
ctx.Answerf("Сценарий №%d не найден", scenarioId)
|
||||
} else {
|
||||
ctx.Error(err)
|
||||
var scenariosPrompt []string
|
||||
|
||||
for _, scenarioId := range scenariosIds {
|
||||
scenario, err := rep.GetScenario(scenarioId)
|
||||
if err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
ctx.Answerf("Сценарий №%d не найден", scenarioId)
|
||||
} else {
|
||||
ctx.Error(err)
|
||||
}
|
||||
return
|
||||
}
|
||||
return
|
||||
scenariosPrompt = append(scenariosPrompt, scenario.Prompt)
|
||||
}
|
||||
chatPrompt += "Вот дополнительная информация: " + scenario.Prompt + "."
|
||||
|
||||
chatPrompt += "Вот дополнительная информация - " + strings.Join(scenariosPrompt, ".")
|
||||
}
|
||||
|
||||
if chatPrompt != "" {
|
||||
err = redisRpRep.SetChatPrompt(ctx.FromID, waifuId, chatPrompt)
|
||||
if err != nil {
|
||||
@@ -468,7 +501,7 @@ func newChat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
}
|
||||
err = redisRpRep.SetChatScenarioID(ctx.FromID, waifuId, scenarioId)
|
||||
err = redisRpRep.SetChatScenariosIDs(ctx.FromID, waifuId, strings.Join(utils.Map(utils.AnyToString, scenariosIds), ","))
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
}
|
||||
@@ -637,20 +670,20 @@ func generate(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
|
||||
m.Delete()
|
||||
kb = laniakea.NewInlineKeyboard(1)
|
||||
kb.AddCallbackButton("Перегенерировать", "rp.regenerate", counter+2)
|
||||
kb.AddCallbackButton("🔄Перегенерировать", "rp.regenerate", counter+2)
|
||||
ctx.Keyboard(laniakea.EscapeMarkdown(answerContent), kb)
|
||||
|
||||
// Auto compress
|
||||
compressMethod := rpUser.CompressMethod
|
||||
if compressMethod == "messages" {
|
||||
if counter+2 >= rpUser.CompressLimit {
|
||||
m = ctx.EditCallback("Запущено сжатие чата…", nil)
|
||||
m = ctx.Answer("Запущено сжатие чата…")
|
||||
_compress(ctx, db)
|
||||
m.Delete()
|
||||
}
|
||||
} else if compressMethod == "tokens" {
|
||||
if tokens >= rpUser.CompressLimit*1000 {
|
||||
m = ctx.EditCallback("Запущено сжатие чата…", nil)
|
||||
m = ctx.Answer("Запущено сжатие чата…")
|
||||
_compress(ctx, db)
|
||||
m.Delete()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user