Skip to content

Commit 0a7bbd7

Browse files
committed
pkg/aflow: handle per-minute quota violations
1 parent 30c4bb8 commit 0a7bbd7

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

pkg/aflow/llm_agent.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
"maps"
1010
"net/http"
1111
"reflect"
12+
"regexp"
13+
"strconv"
1214
"strings"
1315
"time"
1416

@@ -355,14 +357,22 @@ func (a *LLMAgent) generateContent(ctx *Context, cfg *genai.GenerateContentConfi
355357
continue
356358
}
357359
if err != nil && errors.As(err, &apiErr) && apiErr.Code == http.StatusTooManyRequests &&
358-
strings.Contains(apiErr.Message, "Quota exceeded for metric") &&
359-
strings.Contains(apiErr.Message, "generate_requests_per_model_per_day") {
360-
return resp, &modelQuotaError{ctx.modelName(a.Model)}
360+
strings.Contains(apiErr.Message, "Quota exceeded for metric") {
361+
if match := rePleaseRetry.FindStringSubmatch(apiErr.Message); match != nil {
362+
sec, _ := strconv.Atoi(match[1])
363+
time.Sleep(time.Duration(sec+1) * time.Second)
364+
continue
365+
}
366+
if strings.Contains(apiErr.Message, "generate_requests_per_model_per_day") {
367+
return resp, &modelQuotaError{ctx.modelName(a.Model)}
368+
}
361369
}
362370
return resp, err
363371
}
364372
}
365373

374+
var rePleaseRetry = regexp.MustCompile("Please retry in ([0-9]+)[.s]")
375+
366376
func (a *LLMAgent) generateContentCached(ctx *Context, cfg *genai.GenerateContentConfig,
367377
req []*genai.Content, candidate int) (*genai.GenerateContentResponse, error) {
368378
type Cached struct {

0 commit comments

Comments
 (0)