feat: sync deployed v1.0.0-rc.38-custom.42
Sync production source including routing, billing, Astra detection and public uptime. Update custom build instructions and license packaging.
This commit is contained in:
1 parent
aa6c3f50f4
commit
ceddfd3d6b
828 files changed
+122253
-13702
No files matched your search
+48
-18
@@ -6,6 +6,8 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/QuantumNous/new-api/relaykit/dto"
|
||||
|
||||
"github.com/expr-lang/expr"
|
||||
"github.com/expr-lang/expr/vm"
|
||||
"github.com/tidwall/gjson"
|
||||
@@ -30,7 +32,7 @@ func RunExprWithRequest(exprStr string, params TokenParams, request RequestInput
|
||||
if err != nil {
|
||||
return 0, TraceResult{}, err
|
||||
}
|
||||
return runProgram(entry.prog, entry.requestRules, params, request)
|
||||
return runProgram(entry.prog, entry.requestRules, entry.usedVars, params, request)
|
||||
}
|
||||
|
||||
// RunExprByHash is like RunExpr but accepts a pre-computed hash for the cache
|
||||
@@ -45,31 +47,59 @@ func RunExprByHashWithRequest(exprStr, hash string, params TokenParams, request
|
||||
if err != nil {
|
||||
return 0, TraceResult{}, err
|
||||
}
|
||||
return runProgram(entry.prog, entry.requestRules, params, request)
|
||||
return runProgram(entry.prog, entry.requestRules, entry.usedVars, params, request)
|
||||
}
|
||||
|
||||
func runProgram(prog *vm.Program, requestRules []RequestRuleTrace, params TokenParams, request RequestInput) (float64, TraceResult, error) {
|
||||
func runProgram(prog *vm.Program, requestRules []RequestRuleTrace, usedVars map[string]bool, params TokenParams, request RequestInput) (float64, TraceResult, error) {
|
||||
trace := TraceResult{
|
||||
BillingUnit: BillingUnitToken,
|
||||
RequestRules: append([]RequestRuleTrace(nil), requestRules...),
|
||||
}
|
||||
headers := normalizeHeaders(request.Headers)
|
||||
timeForRequest := func(tz string) time.Time {
|
||||
if request.At == nil {
|
||||
return timeInZone(tz)
|
||||
}
|
||||
loc, err := time.LoadLocation(strings.TrimSpace(tz))
|
||||
if err != nil {
|
||||
return request.At.UTC()
|
||||
}
|
||||
return request.At.In(loc)
|
||||
}
|
||||
imageCount := 1
|
||||
if usedVars["image_count"] {
|
||||
if request.ImageCount != nil {
|
||||
imageCount = *request.ImageCount
|
||||
}
|
||||
if imageCount < 1 || imageCount > dto.MaxImageN {
|
||||
return 0, trace, fmt.Errorf("image_count must be between 1 and %d", dto.MaxImageN)
|
||||
}
|
||||
trace.ImageCount = &imageCount
|
||||
}
|
||||
|
||||
env := map[string]any{
|
||||
"p": params.P,
|
||||
"c": params.C,
|
||||
"len": params.Len,
|
||||
"cr": params.CR,
|
||||
"cc": params.CC,
|
||||
"cc1h": params.CC1h,
|
||||
"img": params.Img,
|
||||
"img_o": params.ImgO,
|
||||
"ai": params.AI,
|
||||
"ao": params.AO,
|
||||
"image_count": float64(imageCount),
|
||||
"p": params.P,
|
||||
"c": params.C,
|
||||
"len": params.Len,
|
||||
"cr": params.CR,
|
||||
"cc": params.CC,
|
||||
"cc1h": params.CC1h,
|
||||
"img": params.Img,
|
||||
"img_cr": params.ImgCR,
|
||||
"img_o": params.ImgO,
|
||||
"ai": params.AI,
|
||||
"ao": params.AO,
|
||||
"tier": func(name string, value float64) float64 {
|
||||
trace.MatchedTier = name
|
||||
trace.Cost = value
|
||||
return value
|
||||
},
|
||||
"fixed": func(amount float64) float64 {
|
||||
trace.BillingUnit = BillingUnitRequest
|
||||
trace.FixedPrice = &amount
|
||||
return amount * 1_000_000
|
||||
},
|
||||
requestRuleTraceFunction: func(ruleIndex int, matched bool, multiplier float64) float64 {
|
||||
if matched && ruleIndex >= 0 && ruleIndex < len(trace.RequestRules) {
|
||||
trace.RequestRules[ruleIndex].Matched = true
|
||||
@@ -114,11 +144,11 @@ func runProgram(prog *vm.Program, requestRules []RequestRuleTrace, params TokenP
|
||||
}
|
||||
return strings.Contains(fmt.Sprint(source), substr)
|
||||
},
|
||||
"hour": func(tz string) int { return timeInZone(tz).Hour() },
|
||||
"minute": func(tz string) int { return timeInZone(tz).Minute() },
|
||||
"weekday": func(tz string) int { return int(timeInZone(tz).Weekday()) },
|
||||
"month": func(tz string) int { return int(timeInZone(tz).Month()) },
|
||||
"day": func(tz string) int { return timeInZone(tz).Day() },
|
||||
"hour": func(tz string) int { return timeForRequest(tz).Hour() },
|
||||
"minute": func(tz string) int { return timeForRequest(tz).Minute() },
|
||||
"weekday": func(tz string) int { return int(timeForRequest(tz).Weekday()) },
|
||||
"month": func(tz string) int { return int(timeForRequest(tz).Month()) },
|
||||
"day": func(tz string) int { return timeForRequest(tz).Day() },
|
||||
"max": math.Max,
|
||||
"min": math.Min,
|
||||
"abs": math.Abs,
|
||||
|
||||
Reference in new issue
Block a user