Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
5bed29e2
authored
Mar 08, 2025
by
1808837298@qq.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor: Improve quota calculation precision using floating-point arithmetic
parent
314878ff
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
16 additions
and
14 deletions
+16
-14
relay/relay-text.go
+9
-8
service/quota.go
+7
-6
No files found.
relay/relay-text.go
View file @
5bed29e2
...
...
@@ -320,19 +320,20 @@ func postConsumeQuota(ctx *gin.Context, relayInfo *relaycommon.RelayInfo,
groupRatio
:=
priceData
.
GroupRatio
modelPrice
:=
priceData
.
ModelPrice
quota
:=
0
quota
Calculate
:=
0.
0
if
!
priceData
.
UsePrice
{
quota
=
(
promptTokens
-
cacheTokens
)
+
int
(
math
.
Round
(
float64
(
cacheTokens
)
*
cacheRatio
))
quota
+=
int
(
math
.
Round
(
float64
(
completionTokens
)
*
completionRatio
))
quota
=
int
(
math
.
Round
(
float64
(
quota
)
*
ratio
))
if
ratio
!=
0
&&
quota
<=
0
{
quota
=
1
quota
Calculate
=
float64
(
promptTokens
-
cacheTokens
)
+
float64
(
cacheTokens
)
*
cacheRatio
quota
Calculate
+=
float64
(
completionTokens
)
*
completionRatio
quota
Calculate
=
quotaCalculate
*
ratio
if
ratio
!=
0
&&
quota
Calculate
<=
0
{
quota
Calculate
=
1
}
}
else
{
quota
=
int
(
modelPrice
*
common
.
QuotaPerUnit
*
groupRatio
)
quota
Calculate
=
modelPrice
*
common
.
QuotaPerUnit
*
groupRatio
}
quota
:=
int
(
quotaCalculate
)
totalTokens
:=
promptTokens
+
completionTokens
var
logContent
string
if
!
priceData
.
UsePrice
{
logContent
=
fmt
.
Sprintf
(
"模型倍率 %.2f,补全倍率 %.2f,分组倍率 %.2f"
,
modelRatio
,
completionRatio
,
groupRatio
)
...
...
service/quota.go
View file @
5bed29e2
...
...
@@ -4,7 +4,6 @@ import (
"errors"
"fmt"
"github.com/bytedance/gopkg/util/gopool"
"math"
"one-api/common"
constant2
"one-api/constant"
"one-api/dto"
...
...
@@ -44,16 +43,18 @@ func calculateAudioQuota(info QuotaInfo) int {
audioCompletionRatio
:=
operation_setting
.
GetAudioCompletionRatio
(
info
.
ModelName
)
ratio
:=
info
.
GroupRatio
*
info
.
ModelRatio
quota
:=
info
.
InputDetails
.
TextTokens
+
int
(
math
.
Round
(
float64
(
info
.
OutputDetails
.
TextTokens
)
*
completionRatio
))
quota
+=
int
(
math
.
Round
(
float64
(
info
.
InputDetails
.
AudioTokens
)
*
audioRatio
))
+
int
(
math
.
Round
(
float64
(
info
.
OutputDetails
.
AudioTokens
)
*
audioRatio
*
audioCompletionRatio
))
quota
:=
0.0
quota
+=
float64
(
info
.
InputDetails
.
TextTokens
)
quota
+=
float64
(
info
.
OutputDetails
.
TextTokens
)
*
completionRatio
quota
+=
float64
(
info
.
InputDetails
.
AudioTokens
)
*
audioRatio
quota
+=
float64
(
info
.
OutputDetails
.
AudioTokens
)
*
audioRatio
*
audioCompletionRatio
quota
=
int
(
math
.
Round
(
float64
(
quota
)
*
ratio
))
quota
=
quota
*
ratio
if
ratio
!=
0
&&
quota
<=
0
{
quota
=
1
}
return
quota
return
int
(
quota
)
}
func
PreWssConsumeQuota
(
ctx
*
gin
.
Context
,
relayInfo
*
relaycommon
.
RelayInfo
,
usage
*
dto
.
RealtimeUsage
)
error
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment