66 lines
1.7 KiB
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
|
|
}
|