tgbot_misaka_5882f7/botcmd_reason.go

66 lines
1.7 KiB
Go

package main
import (
"regexp"
"strings"
tele "gopkg.in/telebot.v3"
"git.gensokyo.cafe/kkyy/tgbot_misaka_5882f7/openai"
)
var (
reasonCmdRe = regexp.MustCompile(`^\s*\/reason(@\S*)?\s*`)
reasoningIndicatorMessage = "🤔💭 Thinking..."
)
func handleReasonCmd(c tele.Context) error {
msg := c.Message()
if msg == nil {
return nil
}
payload := strings.TrimSpace(reasonCmdRe.ReplaceAllString(msg.Text, ""))
if payload == "" {
return c.Reply("Usage: `/reason <text>`",
&tele.SendOptions{ParseMode: tele.ModeMarkdown},
tele.Silent,
)
}
req := openai.ChatRequest{
Model: openai.ModelO1Mini,
Messages: []openai.ChatMessage{
{
Role: openai.ChatRoleUser,
Content: payload,
},
},
// reasoning_effort is only available to `o1` and `o3-mini`, which is not yet accessible.
// ReasoningEffort: openai.ReasoningEffortHigh,
}
replyMsg, err := c.Bot().Reply(msg, reasoningIndicatorMessage, tele.Silent)
if err != nil {
logger.Errorw("assistant: failed to complete reasoning request", "error", err)
return c.Reply("Sorry, there's a technical issue. 😵💫 Please try again later.", tele.Silent)
}
err = assistantStreamedResponse(req, func(text string, finished bool) error {
var err error
replyMsg, err = c.Bot().Edit(replyMsg, text)
if finished && err == nil {
replyMsg.ReplyTo = msg // nasty bug
if err := cacheMessage(replyMsg); err != nil {
logger.Warnw("failed to cache message", "error", err)
}
}
return err
})
if err != nil {
logger.Errorw("assistant: failed to complete reasoning request", "error", err)
return c.Reply("Sorry, there's a technical issue. 😵💫 Please try again later.", tele.Silent)
}
return nil
}