- Notifications
You must be signed in to change notification settings - Fork 1.6k
/
Copy pathratelimit.go
43 lines (37 loc) · 1.35 KB
/
ratelimit.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package openai
import (
"net/http"
"strconv"
"time"
)
// RateLimitHeaders struct represents Openai rate limits headers.
typeRateLimitHeadersstruct {
LimitRequestsint`json:"x-ratelimit-limit-requests"`
LimitTokensint`json:"x-ratelimit-limit-tokens"`
RemainingRequestsint`json:"x-ratelimit-remaining-requests"`
RemainingTokensint`json:"x-ratelimit-remaining-tokens"`
ResetRequestsResetTime`json:"x-ratelimit-reset-requests"`
ResetTokensResetTime`json:"x-ratelimit-reset-tokens"`
}
typeResetTimestring
func (rResetTime) String() string {
returnstring(r)
}
func (rResetTime) Time() time.Time {
d, _:=time.ParseDuration(string(r))
returntime.Now().Add(d)
}
funcnewRateLimitHeaders(h http.Header) RateLimitHeaders {
limitReq, _:=strconv.Atoi(h.Get("x-ratelimit-limit-requests"))
limitTokens, _:=strconv.Atoi(h.Get("x-ratelimit-limit-tokens"))
remainingReq, _:=strconv.Atoi(h.Get("x-ratelimit-remaining-requests"))
remainingTokens, _:=strconv.Atoi(h.Get("x-ratelimit-remaining-tokens"))
returnRateLimitHeaders{
LimitRequests: limitReq,
LimitTokens: limitTokens,
RemainingRequests: remainingReq,
RemainingTokens: remainingTokens,
ResetRequests: ResetTime(h.Get("x-ratelimit-reset-requests")),
ResetTokens: ResetTime(h.Get("x-ratelimit-reset-tokens")),
}
}