Просмотр исходного кода

feat: able to set pre consumed quota now

JustSong 2 лет назад
Родитель
Сommit
4d6172a242
4 измененных файлов с 22 добавлено и 3 удалено
  1. 1 0
      common/constants.go
  2. 2 2
      controller/relay.go
  3. 3 0
      model/option.go
  4. 16 1
      web/src/components/SystemSetting.js

+ 1 - 0
common/constants.go

@@ -54,6 +54,7 @@ var QuotaForNewUser = 0
 var ChannelDisableThreshold = 5.0
 var AutomaticDisableChannelEnabled = false
 var QuotaRemindThreshold = 1000
+var PreConsumedQuota = 500
 
 var RootUserEmail = ""
 

+ 2 - 2
controller/relay.go

@@ -128,7 +128,8 @@ func relayHelper(c *gin.Context) error {
 		model_ = strings.TrimSuffix(model_, "-0314")
 		fullRequestURL = fmt.Sprintf("%s/openai/deployments/%s/%s", baseURL, model_, task)
 	}
-	preConsumedQuota := 500 // TODO: make this configurable, take ratio into account
+	ratio := common.GetModelRatio(textRequest.Model)
+	preConsumedQuota := int(float64(common.PreConsumedQuota) * ratio)
 	if consumeQuota {
 		err := model.PreConsumeTokenQuota(tokenId, preConsumedQuota)
 		if err != nil {
@@ -184,7 +185,6 @@ func relayHelper(c *gin.Context) error {
 			} else {
 				quota = textResponse.Usage.PromptTokens + textResponse.Usage.CompletionTokens*completionRatio
 			}
-			ratio := common.GetModelRatio(textRequest.Model)
 			quota = int(float64(quota) * ratio)
 			quotaDelta := quota - preConsumedQuota
 			err := model.PostConsumeTokenQuota(tokenId, quotaDelta)

+ 3 - 0
model/option.go

@@ -55,6 +55,7 @@ func InitOptionMap() {
 	common.OptionMap["TurnstileSecretKey"] = ""
 	common.OptionMap["QuotaForNewUser"] = strconv.Itoa(common.QuotaForNewUser)
 	common.OptionMap["QuotaRemindThreshold"] = strconv.Itoa(common.QuotaRemindThreshold)
+	common.OptionMap["PreConsumedQuota"] = strconv.Itoa(common.PreConsumedQuota)
 	common.OptionMap["ModelRatio"] = common.ModelRatio2JSONString()
 	common.OptionMap["TopUpLink"] = common.TopUpLink
 	common.OptionMapRWMutex.Unlock()
@@ -159,6 +160,8 @@ func updateOptionMap(key string, value string) (err error) {
 		common.QuotaForNewUser, _ = strconv.Atoi(value)
 	case "QuotaRemindThreshold":
 		common.QuotaRemindThreshold, _ = strconv.Atoi(value)
+	case "PreConsumedQuota":
+		common.PreConsumedQuota, _ = strconv.Atoi(value)
 	case "ModelRatio":
 		err = common.UpdateModelRatioByJSONString(value)
 	case "TopUpLink":

+ 16 - 1
web/src/components/SystemSetting.js

@@ -28,6 +28,7 @@ const SystemSetting = () => {
     RegisterEnabled: '',
     QuotaForNewUser: 0,
     QuotaRemindThreshold: 0,
+    PreConsumedQuota: 0,
     ModelRatio: '',
     TopUpLink: '',
     AutomaticDisableChannelEnabled: '',
@@ -98,6 +99,7 @@ const SystemSetting = () => {
       name === 'TurnstileSecretKey' ||
       name === 'QuotaForNewUser' ||
       name === 'QuotaRemindThreshold' ||
+      name === 'PreConsumedQuota' ||
       name === 'ModelRatio' ||
       name === 'TopUpLink'
     ) {
@@ -119,6 +121,9 @@ const SystemSetting = () => {
     if (originInputs['QuotaRemindThreshold'] !== inputs.QuotaRemindThreshold) {
       await updateOption('QuotaRemindThreshold', inputs.QuotaRemindThreshold);
     }
+    if (originInputs['PreConsumedQuota'] !== inputs.PreConsumedQuota) {
+      await updateOption('PreConsumedQuota', inputs.PreConsumedQuota);
+    }
     if (originInputs['ModelRatio'] !== inputs.ModelRatio) {
       if (!verifyJSON(inputs.ModelRatio)) {
         showError('模型倍率不是合法的 JSON 字符串');
@@ -272,7 +277,7 @@ const SystemSetting = () => {
           <Header as='h3'>
             运营设置
           </Header>
-          <Form.Group widths={3}>
+          <Form.Group widths={4}>
             <Form.Input
               label='新用户初始配额'
               name='QuotaForNewUser'
@@ -302,6 +307,16 @@ const SystemSetting = () => {
               min='0'
               placeholder='低于此额度时将发送邮件提醒用户'
             />
+            <Form.Input
+              label='请求预扣费额度'
+              name='PreConsumedQuota'
+              onChange={handleInputChange}
+              autoComplete='new-password'
+              value={inputs.PreConsumedQuota}
+              type='number'
+              min='0'
+              placeholder='请求结束后多退少补'
+            />
           </Form.Group>
           <Form.Group widths='equal'>
             <Form.TextArea