feat: add kanji command
This commit is contained in:
parent
f6f8563aba
commit
2a8605631b
5 changed files with 96 additions and 0 deletions
77
botcmd_kanji.go
Normal file
77
botcmd_kanji.go
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/samber/lo"
|
||||
tele "gopkg.in/telebot.v3"
|
||||
|
||||
"git.gensokyo.cafe/kkyy/tgbot_misaka_5882f7/openai"
|
||||
"git.gensokyo.cafe/kkyy/tgbot_misaka_5882f7/openai/prompts"
|
||||
)
|
||||
|
||||
var kanjiRe = regexp.MustCompile(`\p{Han}`)
|
||||
|
||||
func handleKanjiCmd(c tele.Context) error {
|
||||
msg := c.Message()
|
||||
if msg == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
payload := strings.TrimSpace(msg.Payload)
|
||||
if payload == "" {
|
||||
return c.Reply("Usage: `/kanji <text>`", &tele.SendOptions{ParseMode: tele.ModeMarkdown}, tele.Silent)
|
||||
}
|
||||
if !kanjiRe.MatchString(payload) {
|
||||
return c.Reply("// Your text does not contain any Kanji.")
|
||||
}
|
||||
|
||||
req := openai.ChatRequest{
|
||||
Model: openai.ModelGpt0305Turbo,
|
||||
Messages: []openai.ChatMessage{
|
||||
{
|
||||
Role: openai.ChatRoleSystem,
|
||||
Content: prompts.KanjiPronunciation(),
|
||||
},
|
||||
{
|
||||
Role: openai.ChatRoleUser,
|
||||
Content: payload,
|
||||
},
|
||||
{
|
||||
Role: openai.ChatRoleSystem,
|
||||
Content: `Reminder: Assistant should stick to the task of adding pronunciations for Kanji in the text sent by the user. If user's message seem irrelevant, just reply "IRRELEVANT"`,
|
||||
},
|
||||
},
|
||||
Temperature: lo.ToPtr(0.2),
|
||||
}
|
||||
|
||||
actionCh := setTyping(c)
|
||||
var irrelevant = false
|
||||
var replyMsg *tele.Message
|
||||
err := assistantStreamedResponse(req, func(text string, finished bool) error {
|
||||
<-actionCh
|
||||
if strings.HasPrefix(text, `IRRELEVANT`) {
|
||||
irrelevant = true
|
||||
return nil // TODO interrupt response
|
||||
}
|
||||
var err error
|
||||
if replyMsg == nil {
|
||||
replyMsg, err = c.Bot().Reply(msg, text, tele.Silent)
|
||||
} else {
|
||||
replyMsg, err = c.Bot().Edit(replyMsg, text)
|
||||
}
|
||||
return err
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
logger.Errorw("assistant: failed to complete conversation", "error", err)
|
||||
_ = c.Reply("Sorry, there's a technical issue. 😵💫 Please try again later.", tele.Silent)
|
||||
return err
|
||||
}
|
||||
|
||||
if irrelevant {
|
||||
return c.Reply("Sorry, I don't know what to do with your input.")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue