rp setting; some fixes

This commit is contained in:
2026-01-26 00:55:25 +03:00
parent 65e6dfabd7
commit 39deb0ea19
4 changed files with 184 additions and 28 deletions

View File

@@ -26,7 +26,11 @@ func RegisterRP(bot *laniakea.Bot) {
rp.Payload(rpModelList, "rp.model_list")
rp.Payload(rpModelSet, "rp.model_set")
rp.Payload(rpScenarioList, "rp.scenario_list")
rp.Payload(rpSettingList, "rp.setting_list")
rp.Payload(chatStat, "rp.tokens")
rp.Payload(newChatStage1, "rp.new_chat_s1")
rp.Payload(newChatStage2, "rp.new_chat_s2")
rp.Payload(newChat, "rp.new_chat")
rp.Command(rpUserPromptGet, "rpuserpget")
@@ -65,10 +69,25 @@ func rpInfo(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
ctx.Error(err)
return
}
var waifu *psql.Waifu
waifuId := rpRepRed.GetSelectedWaifu(ctx.FromID)
waifu, err := waifuRep.GetById(waifuId)
if err != nil {
ctx.Error(err)
if waifuId == 0 {
waifus, err := waifuRep.GetByUserId(ctx.FromID)
if err != nil {
ctx.Error(err)
return
}
waifu = waifus[0]
err = rpRepRed.SetSelectedWaifu(ctx.FromID, waifu.ID)
if err != nil {
ctx.Error(err)
}
} else {
waifu, err = waifuRep.GetById(waifuId)
if err != nil {
ctx.Error(err)
}
}
out := []string{
fmt.Sprintf("Привет, %s!", ctx.From.FirstName),
@@ -78,13 +97,17 @@ func rpInfo(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
fmt.Sprintf("*Твое описание персонажа*: %s", rpUser.UserPrompt),
}
kb := laniakea.NewInlineKeyboard(1)
kb := laniakea.NewInlineKeyboard(2)
kb.AddCallbackButton("Статистика чата", "rp.tokens")
kb.AddCallbackButton("Сменить вайфу", "rp.waifu_list")
kb.AddCallbackButton("Сменить пресет", "rp.preset_list")
kb.AddCallbackButton("Сменить модель", "rp.model_list")
kb.AddCallbackButton("Новый чат", "rp.scenario_list")
kb.AddCallbackButton("Список сценариев", "rp.scenario_list")
kb.AddCallbackButton("Список сеттингов", "rp.setting_list")
kb.AddCallbackButton("Новый чат", "rp.new_chat_s1")
kb.AddLine()
kb.AddCallbackButton("Закрыть", "general.close")
if ctx.CallbackMsgId > 0 {
ctx.EditCallback(strings.Join(out, "\n"), kb)
} else {
@@ -226,15 +249,28 @@ func rpScenarioList(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
return
}
out := make([]string, len(scenarios))
kb := laniakea.NewInlineKeyboard(2)
kb := laniakea.NewInlineKeyboard(1)
for i, scenario := range scenarios {
out[i] = fmt.Sprintf("%d) *%s*\n%s\n", scenario.ID, scenario.Name, scenario.Description)
kb.AddCallbackButton(scenario.Name, "rp.new_chat", scenario.ID)
out[i] = fmt.Sprintf("*%s* - %s\n", scenario.Name, scenario.Description)
}
kb.AddCallbackButton("Без сценария", "rp.new_chat", 0)
kb.AddLine()
kb.AddCallbackButton("На главную", "rp.info")
ctx.EditCallback("Выбери сценарий\n"+strings.Join(out, "\n"), kb)
ctx.EditCallback("Список сценариев\n"+strings.Join(out, "\n"), kb)
}
func rpSettingList(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
rep := psql.NewRPRepository(db)
settings, err := rep.GetAllSettings()
if err != nil {
ctx.Error(err)
return
}
out := make([]string, len(settings))
for i, setting := range settings {
out[i] = fmt.Sprintf("*%s* - _%s_\n", setting.Name, setting.Description)
}
kb := laniakea.NewInlineKeyboard(1)
kb.AddCallbackButton("На главную", "rp.info")
ctx.EditCallback(strings.Join(out, "\n"), kb)
}
func chatStat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
@@ -269,8 +305,64 @@ func chatStat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
}
ctx.EditCallback(strings.Join(out, "\n"), kb)
}
func newChatStage1(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
// Выбор сеттинга
rep := psql.NewRPRepository(db)
settings, err := rep.GetAllSettings()
if err != nil {
ctx.Error(err)
return
}
out := []string{
"Выбери сеттинг для чата",
}
kb := laniakea.NewInlineKeyboard(2)
for _, setting := range settings {
out = append(out, fmt.Sprintf("*%s* - %s", setting.Name, setting.Description))
kb.AddCallbackButton(setting.Name, "rp.new_chat_s2", setting.ID)
}
kb.AddCallbackButton("Без сеттинга", "rp.new_chat_s2", 0)
kb.AddLine()
kb.AddCallbackButton("Назад", "rp.info")
ctx.EditCallback(strings.Join(out, "\n"), kb)
}
func newChatStage2(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
// Выбор сценария
if len(ctx.Args) == 0 {
ctx.Error(fmt.Errorf("zero args len"))
return
}
rep := psql.NewRPRepository(db)
scenarios, err := rep.GetAllScenarios()
if err != nil {
ctx.Error(err)
return
}
settingId, err := strconv.Atoi(ctx.Args[0])
if err != nil {
ctx.Error(err)
return
}
out := []string{
"Выбери сценарий:",
}
kb := laniakea.NewInlineKeyboard(2)
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)
}
kb.AddCallbackButton("Без сценария", "rp.new_chat", 0)
kb.AddLine()
kb.AddCallbackButton("Назад", "rp.new_chat_s1")
ctx.EditCallback(strings.Join(out, "\n"), kb)
}
func newChat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
redisRpRep := red.NewRPRepository(db)
psqlRpRep := psql.NewRPRepository(db)
waifuId := redisRpRep.GetSelectedWaifu(ctx.FromID)
if waifuId == 0 {
ctx.Answer("Не выбрана вайфу")
@@ -283,7 +375,26 @@ func newChat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
return
}
scenarioId, err := strconv.Atoi(ctx.Args[0])
chatPrompt := ""
settingId, err := strconv.Atoi(ctx.Args[0])
if err != nil {
ctx.Error(err)
return
}
if settingId > 0 {
scenario, err := psqlRpRep.GetSetting(settingId)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
ctx.Answerf("Сеттинг №%d не найден", settingId)
} else {
ctx.Error(err)
}
return
}
chatPrompt = "Вот краткое описание мира(сеттинг): " + scenario.Prompt + "."
}
scenarioId, err := strconv.Atoi(ctx.Args[1])
if err != nil {
ctx.Error(err)
return
@@ -299,7 +410,10 @@ func newChat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
}
return
}
err = redisRpRep.SetChatPrompt(ctx.FromID, waifuId, scenario.Prompt)
chatPrompt += "Вот дополнительная информация: " + scenario.Prompt + "."
}
if chatPrompt != "" {
err = redisRpRep.SetChatPrompt(ctx.FromID, waifuId, chatPrompt)
if err != nil {
ctx.Error(err)
return
@@ -318,7 +432,7 @@ func newChat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
}
kb := laniakea.NewInlineKeyboard(2)
kb.AddCallbackButton("На главную", "rp.info").AddCallbackButton("Закрыть", "general.close")
ctx.EditCallback("Был создан новый чат", kb)
ctx.EditCallback(`Был создан новый чат.\nДля общения используй "/г промпт"`, kb)
}
func rpUserPromptGet(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
@@ -416,11 +530,11 @@ func generate(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
for _, m := range history {
messages = append(messages, ai.Message{
Role: m.Role,
Content: m.Message,
Content: strings.TrimSpace(m.Message),
})
}
userMessage := strings.Join(ctx.Args, " ")
userMessage := strings.TrimSpace(strings.Join(ctx.Args, " "))
messages = append(messages, afterHistory, ai.Message{
Role: "user",
Content: userMessage,
@@ -432,7 +546,6 @@ func generate(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
res, err := api.CreateCompletion(ai.CreateCompletionReq{
Messages: messages,
Temperature: 1.0,
TopP: 1.0,
})
if err != nil {
ctx.Error(err)
@@ -449,7 +562,8 @@ func generate(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
return
}
agentAnswer := res.Choices[0].Message
err = mdb.UpdateChatHistory(db, chatId, agentAnswer.Role, agentAnswer.Content)
answerContent := strings.TrimSpace(agentAnswer.Content)
err = mdb.UpdateChatHistory(db, chatId, agentAnswer.Role, answerContent)
if err != nil {
ctx.Error(err)
}
@@ -467,8 +581,8 @@ func generate(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
}
m.Delete()
kb = laniakea.NewInlineKeyboard(1).AddCallbackButton("Сжать чать", "rp.compress_chat")
ctx.Keyboard(laniakea.EscapeMarkdown(agentAnswer.Content), kb)
kb = laniakea.NewInlineKeyboard(1).AddCallbackButton("Сжать чат", "rp.compress_chat")
ctx.Keyboard(laniakea.EscapeMarkdown(answerContent), kb)
}
func compress(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {