optimize message update

optimize message update parameters to avoid tripping the telegram api rate limits

Signed-off-by: Sid Sun <sid@sidsun.com>
This commit is contained in:
Sid Sun 2024-05-18 21:22:06 +05:30
parent fbeea444fc
commit fc22e4e341
2 changed files with 13 additions and 9 deletions

View File

@ -68,18 +68,19 @@ func Handler(b *tele.Bot, isResend bool) tele.HandlerFunc {
return err
}
var finalMessage *string
debounced := debounce.New(20 * time.Millisecond)
var lastMessage string
nextMessageRequiredLen := 0
debounced := debounce.New(200 * time.Millisecond)
for completion := range updatesChan {
if finalMessage != nil && *finalMessage == completion.Message {
if completion.IsLast {
break
}
// Only update message if the new message is at least 10% longer than last message
// To avoid Telegram rate limiting
if len(completion.Message) <= nextMessageRequiredLen && !completion.IsLast {
continue
}
finalMessage = &completion.Message
lastMessage = completion.Message
nextMessageRequiredLen = len(lastMessage) * 110 / 100
send := func() {
_, err := b.Edit(botMessage, completion.Message)
_, err := b.Edit(botMessage, lastMessage)
if err != nil {
logger.Error("failed to send message", slog.String("context", "edit completion message"), slog.Any("error", err))
return
@ -92,7 +93,7 @@ func Handler(b *tele.Bot, isResend bool) tele.HandlerFunc {
}
// the sleep may not actually be necessary
botMessage.Text = *finalMessage
botMessage.Text = lastMessage
addMessageToChain(botMessage)
// To print reply messages, comment above and uncomment below

View File

@ -128,6 +128,9 @@ func resolveDeltaAndSendUpdates(res *http.Response, uc chan contract.CompletionU
}
return
}
if resp.Choices[0].Delta.Content == "" {
continue
}
uc <- contract.CompletionUpdate{
Message: message,
IsLast: false,