many changes; using dev laniakea

This commit is contained in:
2026-03-06 14:36:06 +03:00
parent 3ceffa23ae
commit f3f15dad78
13 changed files with 134 additions and 86 deletions

View File

@@ -111,7 +111,7 @@ func rpInfo(ctx *laniakea.MsgContext, db *database.Context) {
out := []string{
fmt.Sprintf("Привет, _%s_!", ctx.From.FirstName),
fmt.Sprintf("*Выбранная вайфу*: %s", waifu.Name),
fmt.Sprintf("*Выбранный пресет*: %s", laniakea.EscapeMarkdown(rpUser.Preset.Name)),
fmt.Sprintf("*Выбранный пресет*: %s", laniakea.EscapeMarkdownV2(rpUser.Preset.Name)),
fmt.Sprintf("*Выбранная модель*: %s", rpUser.Model.Name),
fmt.Sprintf("*Использовано токенов*: %d", rpUser.UsedTokens),
fmt.Sprintf("*Настройки сжатия*: %d %s", rpUser.CompressLimit, compressText),
@@ -133,10 +133,10 @@ func rpInfo(ctx *laniakea.MsgContext, db *database.Context) {
kb.AddCallbackButtonStyle("Закрыть", laniakea.ButtonStyleDanger, "general.close")
if ctx.CallbackMsgId > 0 {
ctx.EditCallback(strings.Join(out, "\n"), kb)
ctx.EditCallbackMarkdown(laniakea.EscapePunctuation(strings.Join(out, "\n")), kb)
ctx.AnswerCbQuery()
} else {
ctx.Keyboard(strings.Join(out, "\n"), kb)
ctx.KeyboardMarkdown(laniakea.EscapePunctuation(strings.Join(out, "\n")), kb)
}
}
@@ -218,13 +218,13 @@ func rpPresetsList(ctx *laniakea.MsgContext, db *database.Context) {
for i, preset := range presets {
out[i] = fmt.Sprintf(
"*%s* - %s",
laniakea.EscapeMarkdown(preset.Name), preset.Description,
laniakea.EscapeMarkdownV2(preset.Name), preset.Description,
)
kb.AddCallbackButton(preset.Name, "rp.preset_set", preset.ID)
}
kb.AddLine()
kb.AddCallbackButtonStyle("Назад", laniakea.ButtonStyleDanger, "rp.info")
ctx.EditCallback(strings.Join(out, "\n"), kb)
ctx.EditCallbackMarkdown(strings.Join(out, "\n"), kb)
ctx.AnswerCbQuery()
}
func rpPresetSet(ctx *laniakea.MsgContext, db *database.Context) {
@@ -270,7 +270,7 @@ func rpModelList(ctx *laniakea.MsgContext, db *database.Context) {
}
kb.AddLine()
kb.AddCallbackButtonStyle("Назад", laniakea.ButtonStyleDanger, "rp.info")
ctx.EditCallback(strings.Join(out, "\n"), kb)
ctx.EditCallbackMarkdown(laniakea.EscapePunctuation(strings.Join(out, "\n")), kb)
ctx.AnswerCbQuery()
}
func rpModelSet(ctx *laniakea.MsgContext, db *database.Context) {
@@ -424,7 +424,6 @@ func newChatStage2(ctx *laniakea.MsgContext, db *database.Context) {
"Выбери сценарий:",
}
kb := laniakea.NewInlineKeyboard(2)
scenariosIds := make(extypes.Slice[int], 0)
for _, scenario := range scenarios {
isSelected := selectedScenariosIds.Index(scenario.ID) >= 0
prefix := ""
@@ -435,18 +434,18 @@ func newChatStage2(ctx *laniakea.MsgContext, db *database.Context) {
}
out = append(out, fmt.Sprintf("%s*%s* - %s", prefix, scenario.Name, scenario.Description))
if isSelected {
scenariosIds = selectedScenariosIds.Remove(scenario.ID)
selectedScenariosIds = selectedScenariosIds.Remove(scenario.ID)
} else {
scenariosIds = selectedScenariosIds.Push(scenario.ID)
selectedScenariosIds = selectedScenariosIds.Push(scenario.ID)
}
kb.AddCallbackButtonStyle(
fmt.Sprintf("%s%s", prefix, scenario.Name), style,
"rp.new_chat_s2", utils.AppendToInt(settingId, scenariosIds)...,
"rp.new_chat_s2", utils.AppendToInt(settingId, selectedScenariosIds)...,
)
}
if len(scenariosIds) == 0 {
scenariosIds = append(scenariosIds, 0)
if len(selectedScenariosIds) == 0 {
selectedScenariosIds = selectedScenariosIds.Push(0)
}
kb.AddCallbackButtonStyle("Создать", laniakea.ButtonStyleSuccess, "rp.new_chat", utils.AppendToInt(settingId, selectedScenariosIds)...)
kb.AddLine()
@@ -657,18 +656,14 @@ func generate(ctx *laniakea.MsgContext, db *database.Context) {
m := ctx.Keyboard("Генерация запущена...", kb)
ctx.SendAction(tgapi.ChatActionTyping)
api := openai.NewOpenAIAPI(ai.GPTBaseUrl, "", rpUser.Model.Key)
defer api.Close()
res, err := api.CreateCompletionStream(messages, userMessage, 0.5)
if err != nil {
_ = api.Close()
ctx.Error(err)
return
}
answerContent := ""
type DraftQueue struct {
message string
mu sync.Mutex
}
draft := ctx.NewDraft()
var mu sync.Mutex
buffer := strings.Builder{} // накапливаем фрагменты
@@ -729,13 +724,11 @@ func generate(ctx *laniakea.MsgContext, db *database.Context) {
mu.Lock()
buffer.WriteString(content)
mu.Unlock()
// Если нужна искусственная задержка, оставьте:
// time.Sleep(time.Millisecond * 50)
}
// Завершаем горутину и отправляем последнюю порцию
close(done)
_ = api.Close()
if answerContent == "" {
if m != nil {
m.Delete()
@@ -775,18 +768,18 @@ func generate(ctx *laniakea.MsgContext, db *database.Context) {
kb = laniakea.NewInlineKeyboard(1)
kb.AddCallbackButtonStyle("🔄 Перегенерировать 🔄", laniakea.ButtonStyleSuccess, "rp.regenerate", counter+2)
//kb.AddButton(laniakea.NewInlineKbButton("Тест").SetStyle(laniakea.ButtonStyleSuccess).SetIconCustomEmojiId("5375155835846534814").SetCallbackData("rp.test"))
ctx.Keyboard(laniakea.EscapeMarkdown(answerContent), kb)
ctx.Keyboard(answerContent, kb)
// Auto compress
compressMethod := rpUser.CompressMethod
if compressMethod == "messages" {
switch compressMethod {
case "messages":
if counter+2 >= rpUser.CompressLimit {
m = ctx.Answer("Запущено сжатие чата…")
_compress(ctx, db)
m.Delete()
}
} else if compressMethod == "tokens" {
case "tokens":
if tokens >= rpUser.CompressLimit*1000 {
m = ctx.Answer("Запущено сжатие чата…")
_compress(ctx, db)
@@ -844,7 +837,9 @@ func regenerateResponse(ctx *laniakea.MsgContext, db *database.Context) {
}
api := openai.NewOpenAIAPI(ai.GPTBaseUrl, "", rpUser.Model.Key)
defer api.Close()
defer func(api *openai.API) {
_ = api.Close()
}(api)
messages = messages.Pop(count - 2)
messages = messages.Pop(count - 2)
@@ -864,7 +859,7 @@ func regenerateResponse(ctx *laniakea.MsgContext, db *database.Context) {
kb := laniakea.NewInlineKeyboard(1)
kb.AddCallbackButtonStyle("🔄 Перегенерировать 🔄", laniakea.ButtonStyleSuccess, "rp.regenerate", count)
ctx.EditCallback(laniakea.EscapeMarkdown(res.Choices[0].Message.Content), kb)
ctx.EditCallback(res.Choices[0].Message.Content, kb)
}
func compress(ctx *laniakea.MsgContext, db *database.Context) {
@@ -911,7 +906,9 @@ func _compress(ctx *laniakea.MsgContext, db *database.Context) {
}
api := openai.NewOpenAIAPI(ai.GPTBaseUrl, "", user.Model.Key)
defer api.Close()
defer func(api *openai.API) {
_ = api.Close()
}(api)
res, err := ai.CompressChat(api, messages)
if err != nil {
ctx.Error(err)
@@ -949,7 +946,7 @@ func _compress(ctx *laniakea.MsgContext, db *database.Context) {
for _, m := range history {
if m.Role == "assistant" {
tokens += len(m.Message)
err = mdb.UpdateRPChatHistory(db, chatId, m.Role, m.Message, index)
_ = mdb.UpdateRPChatHistory(db, chatId, m.Role, m.Message, index)
index++
} else {
break
@@ -1007,12 +1004,13 @@ func compressSettingStage2(ctx *laniakea.MsgContext, _ *database.Context) {
"При выборе слишком больших значений, некоторые детали могут теряться.",
}
kb := laniakea.NewInlineKeyboard(3)
if method == "messages" {
switch method {
case "messages":
out = append(out, "Выбери количество сообщений, после которых будет происходить сжатие чата")
for _, i := range messagesMethodCount {
kb.AddCallbackButton(strconv.Itoa(i), "rp.compress_setting", method, i)
}
} else if method == "tokens" {
case "tokens":
out = append(out, "Выбери количество токенов, после которых будет происходить сжатие чата")
for _, i := range tokenMethodCount {
kb.AddCallbackButton(strconv.Itoa(i), "rp.compress_setting", method, i)