✨ feat: Enhance user settings and notification options
This commit is contained in:
@@ -1,11 +1,12 @@
|
|||||||
package constant
|
package constant
|
||||||
|
|
||||||
var (
|
var (
|
||||||
UserSettingNotifyType = "notify_type" // QuotaWarningType 额度预警类型
|
UserSettingNotifyType = "notify_type" // QuotaWarningType 额度预警类型
|
||||||
UserSettingQuotaWarningThreshold = "quota_warning_threshold" // QuotaWarningThreshold 额度预警阈值
|
UserSettingQuotaWarningThreshold = "quota_warning_threshold" // QuotaWarningThreshold 额度预警阈值
|
||||||
UserSettingWebhookUrl = "webhook_url" // WebhookUrl webhook地址
|
UserSettingWebhookUrl = "webhook_url" // WebhookUrl webhook地址
|
||||||
UserSettingWebhookSecret = "webhook_secret" // WebhookSecret webhook密钥
|
UserSettingWebhookSecret = "webhook_secret" // WebhookSecret webhook密钥
|
||||||
UserSettingNotificationEmail = "notification_email" // NotificationEmail 通知邮箱地址
|
UserSettingNotificationEmail = "notification_email" // NotificationEmail 通知邮箱地址
|
||||||
|
UserAcceptUnsetRatioModel = "accept_unset_model_ratio_model" // AcceptUnsetRatioModel 是否接受未设置价格的模型
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -105,6 +105,11 @@ func testChannel(channel *model.Channel, testModel string) (err error, openAIErr
|
|||||||
request := buildTestRequest(testModel)
|
request := buildTestRequest(testModel)
|
||||||
common.SysLog(fmt.Sprintf("testing channel %d with model %s , info %v ", channel.Id, testModel, info))
|
common.SysLog(fmt.Sprintf("testing channel %d with model %s , info %v ", channel.Id, testModel, info))
|
||||||
|
|
||||||
|
priceData, err := helper.ModelPriceHelper(c, info, 0, int(request.MaxTokens))
|
||||||
|
if err != nil {
|
||||||
|
return err, nil
|
||||||
|
}
|
||||||
|
|
||||||
adaptor.Init(info)
|
adaptor.Init(info)
|
||||||
|
|
||||||
convertedRequest, err := adaptor.ConvertOpenAIRequest(c, info, request)
|
convertedRequest, err := adaptor.ConvertOpenAIRequest(c, info, request)
|
||||||
@@ -143,10 +148,7 @@ func testChannel(channel *model.Channel, testModel string) (err error, openAIErr
|
|||||||
return err, nil
|
return err, nil
|
||||||
}
|
}
|
||||||
info.PromptTokens = usage.PromptTokens
|
info.PromptTokens = usage.PromptTokens
|
||||||
priceData, err := helper.ModelPriceHelper(c, info, usage.PromptTokens, int(request.MaxTokens))
|
|
||||||
if err != nil {
|
|
||||||
return err, nil
|
|
||||||
}
|
|
||||||
quota := 0
|
quota := 0
|
||||||
if !priceData.UsePrice {
|
if !priceData.UsePrice {
|
||||||
quota = usage.PromptTokens + int(math.Round(float64(usage.CompletionTokens)*priceData.CompletionRatio))
|
quota = usage.PromptTokens + int(math.Round(float64(usage.CompletionTokens)*priceData.CompletionRatio))
|
||||||
|
|||||||
@@ -913,11 +913,12 @@ func TopUp(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type UpdateUserSettingRequest struct {
|
type UpdateUserSettingRequest struct {
|
||||||
QuotaWarningType string `json:"notify_type"`
|
QuotaWarningType string `json:"notify_type"`
|
||||||
QuotaWarningThreshold float64 `json:"quota_warning_threshold"`
|
QuotaWarningThreshold float64 `json:"quota_warning_threshold"`
|
||||||
WebhookUrl string `json:"webhook_url,omitempty"`
|
WebhookUrl string `json:"webhook_url,omitempty"`
|
||||||
WebhookSecret string `json:"webhook_secret,omitempty"`
|
WebhookSecret string `json:"webhook_secret,omitempty"`
|
||||||
NotificationEmail string `json:"notification_email,omitempty"`
|
NotificationEmail string `json:"notification_email,omitempty"`
|
||||||
|
AcceptUnsetModelRatioModel bool `json:"accept_unset_model_ratio_model"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func UpdateUserSetting(c *gin.Context) {
|
func UpdateUserSetting(c *gin.Context) {
|
||||||
@@ -993,6 +994,7 @@ func UpdateUserSetting(c *gin.Context) {
|
|||||||
settings := map[string]interface{}{
|
settings := map[string]interface{}{
|
||||||
constant.UserSettingNotifyType: req.QuotaWarningType,
|
constant.UserSettingNotifyType: req.QuotaWarningType,
|
||||||
constant.UserSettingQuotaWarningThreshold: req.QuotaWarningThreshold,
|
constant.UserSettingQuotaWarningThreshold: req.QuotaWarningThreshold,
|
||||||
|
"accept_unset_model_ratio_model": req.AcceptUnsetModelRatioModel,
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果是webhook类型,添加webhook相关设置
|
// 如果是webhook类型,添加webhook相关设置
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"one-api/common"
|
"one-api/common"
|
||||||
|
constant2 "one-api/constant"
|
||||||
relaycommon "one-api/relay/common"
|
relaycommon "one-api/relay/common"
|
||||||
"one-api/setting"
|
"one-api/setting"
|
||||||
"one-api/setting/operation_setting"
|
"one-api/setting/operation_setting"
|
||||||
@@ -40,10 +41,19 @@ func ModelPriceHelper(c *gin.Context, info *relaycommon.RelayInfo, promptTokens
|
|||||||
var success bool
|
var success bool
|
||||||
modelRatio, success = operation_setting.GetModelRatio(info.OriginModelName)
|
modelRatio, success = operation_setting.GetModelRatio(info.OriginModelName)
|
||||||
if !success {
|
if !success {
|
||||||
if info.UserId == 1 {
|
acceptUnsetRatio := false
|
||||||
return PriceData{}, fmt.Errorf("模型 %s 倍率或价格未配置,请设置或开始自用模式;Model %s ratio or price not set, please set or start self-use mode", info.OriginModelName, info.OriginModelName)
|
if accept, ok := info.UserSetting[constant2.UserAcceptUnsetRatioModel]; ok {
|
||||||
} else {
|
b, ok := accept.(bool)
|
||||||
return PriceData{}, fmt.Errorf("模型 %s 倍率或价格未配置, 请联系管理员设置;Model %s ratio or price not set, please contact administrator to set", info.OriginModelName, info.OriginModelName)
|
if ok {
|
||||||
|
acceptUnsetRatio = b
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !acceptUnsetRatio {
|
||||||
|
if info.UserId == 1 {
|
||||||
|
return PriceData{}, fmt.Errorf("模型 %s 倍率或价格未配置,请设置或开始自用模式;Model %s ratio or price not set, please set or start self-use mode", info.OriginModelName, info.OriginModelName)
|
||||||
|
} else {
|
||||||
|
return PriceData{}, fmt.Errorf("模型 %s 倍率或价格未配置, 请联系管理员设置;Model %s ratio or price not set, please contact administrator to set", info.OriginModelName, info.OriginModelName)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
completionRatio = operation_setting.GetCompletionRatio(info.OriginModelName)
|
completionRatio = operation_setting.GetCompletionRatio(info.OriginModelName)
|
||||||
|
|||||||
5319
web/pnpm-lock.yaml
generated
5319
web/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user