|
|
|
|
@@ -272,7 +272,7 @@ func preConsumeQuota(c *gin.Context, preConsumedQuota int, relayInfo *relaycommo
|
|
|
|
|
return 0, 0, service.OpenAIErrorWrapperLocal(errors.New("user quota is not enough"), "insufficient_user_quota", http.StatusForbidden)
|
|
|
|
|
}
|
|
|
|
|
if userQuota-preConsumedQuota < 0 {
|
|
|
|
|
return 0, 0, service.OpenAIErrorWrapperLocal(fmt.Errorf("chat pre-consumed quota failed, user quota: %d, need quota: %d", userQuota, preConsumedQuota), "insufficient_user_quota", http.StatusBadRequest)
|
|
|
|
|
return 0, 0, service.OpenAIErrorWrapperLocal(fmt.Errorf("chat pre-consumed quota failed, user quota: %s, need quota: %d", common.FormatQuota(userQuota), preConsumedQuota), "insufficient_user_quota", http.StatusBadRequest)
|
|
|
|
|
}
|
|
|
|
|
if userQuota > 100*preConsumedQuota {
|
|
|
|
|
// 用户额度充足,判断令牌额度是否充足
|
|
|
|
|
@@ -282,18 +282,18 @@ func preConsumeQuota(c *gin.Context, preConsumedQuota int, relayInfo *relaycommo
|
|
|
|
|
if tokenQuota > 100*preConsumedQuota {
|
|
|
|
|
// 令牌额度充足,信任令牌
|
|
|
|
|
preConsumedQuota = 0
|
|
|
|
|
common.LogInfo(c, fmt.Sprintf("user %d quota %d and token %d quota %d are enough, trusted and no need to pre-consume", relayInfo.UserId, userQuota, relayInfo.TokenId, tokenQuota))
|
|
|
|
|
common.LogInfo(c, fmt.Sprintf("user %d quota %s and token %d quota %d are enough, trusted and no need to pre-consume", relayInfo.UserId, common.FormatQuota(userQuota), relayInfo.TokenId, tokenQuota))
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// in this case, we do not pre-consume quota
|
|
|
|
|
// because the user has enough quota
|
|
|
|
|
preConsumedQuota = 0
|
|
|
|
|
common.LogInfo(c, fmt.Sprintf("user %d with unlimited token has enough quota %d, trusted and no need to pre-consume", relayInfo.UserId, userQuota))
|
|
|
|
|
common.LogInfo(c, fmt.Sprintf("user %d with unlimited token has enough quota %s, trusted and no need to pre-consume", relayInfo.UserId, common.FormatQuota(userQuota)))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if preConsumedQuota > 0 {
|
|
|
|
|
err = model.PreConsumeTokenQuota(relayInfo, preConsumedQuota)
|
|
|
|
|
err = service.PreConsumeTokenQuota(relayInfo, preConsumedQuota)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, 0, service.OpenAIErrorWrapperLocal(err, "pre_consume_token_quota_failed", http.StatusForbidden)
|
|
|
|
|
}
|
|
|
|
|
@@ -310,7 +310,7 @@ func returnPreConsumedQuota(c *gin.Context, relayInfo *relaycommon.RelayInfo, us
|
|
|
|
|
go func() {
|
|
|
|
|
relayInfoCopy := *relayInfo
|
|
|
|
|
|
|
|
|
|
err := model.PostConsumeQuota(&relayInfoCopy, userQuota, -preConsumedQuota, 0, false)
|
|
|
|
|
err := service.PostConsumeQuota(&relayInfoCopy, -preConsumedQuota, 0, false)
|
|
|
|
|
if err != nil {
|
|
|
|
|
common.SysError("error return pre-consumed quota: " + err.Error())
|
|
|
|
|
}
|
|
|
|
|
@@ -368,7 +368,7 @@ func postConsumeQuota(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, modelN
|
|
|
|
|
//}
|
|
|
|
|
quotaDelta := quota - preConsumedQuota
|
|
|
|
|
if quotaDelta != 0 {
|
|
|
|
|
err := model.PostConsumeQuota(relayInfo, userQuota, quotaDelta, preConsumedQuota, true)
|
|
|
|
|
err := service.PostConsumeQuota(relayInfo, quotaDelta, preConsumedQuota, true)
|
|
|
|
|
if err != nil {
|
|
|
|
|
common.LogError(ctx, "error consuming token remain quota: "+err.Error())
|
|
|
|
|
}
|
|
|
|
|
|