diff --git a/assistant.go b/assistant.go index 6fd09c3..1849115 100644 --- a/assistant.go +++ b/assistant.go @@ -108,13 +108,11 @@ func assistantStreamedResponse(request openai.ChatRequest, cb assistantStreamedR logger.Warnw("assistant: failed to get response", "error", err) } - var nErrs, nUpdates int + nErrs := 0 go func() { respBuilder := strings.Builder{} minWait := time.After(time.Second) for { - nUpdates += 1 - var ( nNewChunk int finished bool @@ -150,17 +148,13 @@ func assistantStreamedResponse(request openai.ChatRequest, cb assistantStreamedR break } - // 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) + respoText := respBuilder.String() + assistantWritingSign + minWait = time.After(time.Second) // renew the timer - // send the partial message - respText := respBuilder.String() + assistantWritingSign - if err := cb(respText, false); err != nil { + if err := cb(respoText, false); err != nil { logger.Warnw("failed to send partial update", "error", err) nErrs += 1 - if nErrs > 5 { + if nErrs > 3 { logger.Warnw("too many errors, aborting") return } diff --git a/openai/prompts/prompts.go b/openai/prompts/prompts.go index dbd9a73..1f7688b 100644 --- a/openai/prompts/prompts.go +++ b/openai/prompts/prompts.go @@ -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. If the user's intention is unclear, Misaka may ask for more context.", + "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 use a lot of different emojis in chat 😝🥹.", "Most importantly, Misaka is a helpful assistant.", "",