feat: slow down message updates to avoid rate limit
This commit is contained in:
parent
206c1326f6
commit
5e65a2ce32
16
assistant.go
16
assistant.go
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue