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 `", &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 }