Bound max-tokens fields across all relay format validators, saturate tiered-expression rounding and audio/tool/task token conversions, and route legacy remix ratios through the guarded setter.
25 lines
665 B
Go
25 lines
665 B
Go
package billingexpr
|
|
|
|
import "math"
|
|
|
|
// QuotaRound converts a float64 quota value to int using half-away-from-zero
|
|
// rounding. Every tiered billing path (pre-consume, settlement, breakdown
|
|
// validation, log fields) MUST use this function to avoid +-1 discrepancies.
|
|
//
|
|
// The result saturates at int32 bounds: quota columns are 32-bit integers in
|
|
// the database, and an oversized expression result must never wrap around
|
|
// and turn a charge into a credit.
|
|
func QuotaRound(f float64) int {
|
|
r := math.Round(f)
|
|
if math.IsNaN(r) {
|
|
return 0
|
|
}
|
|
if r >= math.MaxInt32 {
|
|
return math.MaxInt32
|
|
}
|
|
if r <= math.MinInt32 {
|
|
return math.MinInt32
|
|
}
|
|
return int(r)
|
|
}
|