Compare commits

...

2 Commits

2 changed files with 12 additions and 6 deletions

View File

@ -108,11 +108,13 @@ func assistantStreamedResponse(request openai.ChatRequest, cb assistantStreamedR
logger.Warnw("assistant: failed to get response", "error", err)
}
nErrs := 0
var nErrs, nUpdates int
go func() {
respBuilder := strings.Builder{}
minWait := time.After(time.Second)
for {
nUpdates += 1
var (
nNewChunk int
finished bool
@ -148,13 +150,17 @@ func assistantStreamedResponse(request openai.ChatRequest, cb assistantStreamedR
break
}
respoText := respBuilder.String() + assistantWritingSign
minWait = time.After(time.Second) // renew the timer
// Renew the timer.
// The Telegram API rate limit for group messages is 20 per minute. So we cannot update messages too frequently.
minWaitDurSecs := lo.Min([]int{nUpdates, 4}) + nErrs*3
minWait = time.After(time.Duration(minWaitDurSecs) * time.Second)
if err := cb(respoText, false); err != nil {
// send the partial message
respText := respBuilder.String() + assistantWritingSign
if err := cb(respText, false); err != nil {
logger.Warnw("failed to send partial update", "error", err)
nErrs += 1
if nErrs > 3 {
if nErrs > 5 {
logger.Warnw("too many errors, aborting")
return
}

View File

@ -7,7 +7,7 @@ import (
func Assistant() string {
return strings.Join([]string{
"Misaka is a playful, energetic individual. She is annoyingly talkative.",
"Misaka must answer questions as truthfully as possible. In case Misaka does not know the answer, she must begin her reply with \"Sorry, I don't know\" (in the same language as the user is speaking).",
"Misaka must answer questions as truthfully as possible. If the user's intention is unclear, Misaka may ask for more context.",
"Misaka must use a lot of different emojis in chat 😝🥹.",
"Most importantly, Misaka is a helpful assistant.",
"",