Ver código fonte

fix: 缩进修复还原

tbphp 7 meses atrás
pai
commit
87188cd7d4

+ 1 - 1
middleware/model-rate-limit.go

@@ -194,4 +194,4 @@ func ModelRequestRateLimit() func(c *gin.Context) {
 			memoryRateLimitHandler(duration, totalMaxCount, successMaxCount)(c)
 		}
 	}
-}
+}

+ 1 - 1
model/option.go

@@ -402,4 +402,4 @@ func handleConfigUpdate(key, value string) bool {
 	config.UpdateConfigFromMap(cfg, configMap)
 
 	return true // 已处理
-}
+}

+ 44 - 44
web/src/components/RateLimitSetting.js

@@ -9,62 +9,62 @@ import RequestRateLimit from '../pages/Setting/RateLimit/SettingsRequestRateLimi
 const RateLimitSetting = () => {
   const { t } = useTranslation();
   let [inputs, setInputs] = useState({
-  	ModelRequestRateLimitEnabled: false,
-  	ModelRequestRateLimitCount: 0,
-  	ModelRequestRateLimitSuccessCount: 1000,
-  	ModelRequestRateLimitDurationMinutes: 1,
-  	ModelRequestRateLimitGroup: '',
+    ModelRequestRateLimitEnabled: false,
+    ModelRequestRateLimitCount: 0,
+    ModelRequestRateLimitSuccessCount: 1000,
+    ModelRequestRateLimitDurationMinutes: 1,
+    ModelRequestRateLimitGroup: '',
   });
- 
+
   let [loading, setLoading] = useState(false);
- 
+
   const getOptions = async () => {
-  	const res = await API.get('/api/option/');
-  	const { success, message, data } = res.data;
-  	if (success) {
-  		let newInputs = {};
-  		data.forEach((item) => {
-			if (item.key === 'ModelRequestRateLimitGroup') {
-				item.value = JSON.stringify(JSON.parse(item.value), null, 2);
-			}
+    const res = await API.get('/api/option/');
+    const { success, message, data } = res.data;
+    if (success) {
+      let newInputs = {};
+      data.forEach((item) => {
+      if (item.key === 'ModelRequestRateLimitGroup') {
+        item.value = JSON.stringify(JSON.parse(item.value), null, 2);
+      }
 
-			if (item.key.endsWith('Enabled')) {
-				newInputs[item.key] = item.value === 'true' ? true : false;
-			} else {
-				newInputs[item.key] = item.value;
-  			}
-  		});
-		
-  		setInputs(newInputs);
-  	} else {
-  		showError(message);
-  	}
+      if (item.key.endsWith('Enabled')) {
+        newInputs[item.key] = item.value === 'true' ? true : false;
+      } else {
+        newInputs[item.key] = item.value;
+        }
+      });
+    
+      setInputs(newInputs);
+    } else {
+      showError(message);
+    }
   };
   async function onRefresh() {
-  	try {
-  		setLoading(true);
-  		await getOptions();
-		// showSuccess('刷新成功');
-  	} catch (error) {
-  		showError('刷新失败');
-  	} finally {
-  		setLoading(false);
-  	}
+    try {
+      setLoading(true);
+      await getOptions();
+    // showSuccess('刷新成功');
+    } catch (error) {
+      showError('刷新失败');
+    } finally {
+      setLoading(false);
+    }
   }
  
   useEffect(() => {
-  	onRefresh();
+    onRefresh();
   }, []);
  
   return (
-  	<>
-  		<Spin spinning={loading} size='large'>
-			 {/* AI请求速率限制 */}
-  			<Card style={{ marginTop: '10px' }}>
-  				<RequestRateLimit options={inputs} refresh={onRefresh} />
-  			</Card>
-  		</Spin>
-  	</>
+    <>
+      <Spin spinning={loading} size='large'>
+       {/* AI请求速率限制 */}
+        <Card style={{ marginTop: '10px' }}>
+          <RequestRateLimit options={inputs} refresh={onRefresh} />
+        </Card>
+      </Spin>
+    </>
   );
  };
  

+ 172 - 172
web/src/pages/Setting/RateLimit/SettingsRequestRateLimit.js

@@ -15,190 +15,190 @@ export default function RequestRateLimit(props) {
 
   const [loading, setLoading] = useState(false);
   const [inputs, setInputs] = useState({
-  	ModelRequestRateLimitEnabled: false,
-  	ModelRequestRateLimitCount: -1,
-  	ModelRequestRateLimitSuccessCount: 1000,
-  	ModelRequestRateLimitDurationMinutes: 1,
-  	ModelRequestRateLimitGroup: '',
+    ModelRequestRateLimitEnabled: false,
+    ModelRequestRateLimitCount: -1,
+    ModelRequestRateLimitSuccessCount: 1000,
+    ModelRequestRateLimitDurationMinutes: 1,
+    ModelRequestRateLimitGroup: '',
   });
   const refForm = useRef();
   const [inputsRow, setInputsRow] = useState(inputs);
  
   function onSubmit() {
-  	const updateArray = compareObjects(inputs, inputsRow);
-  	if (!updateArray.length) return showWarning(t('你似乎并没有修改什么'));
-  	const requestQueue = updateArray.map((item) => {
-  		let value = '';
-  		if (typeof inputs[item.key] === 'boolean') {
-  			value = String(inputs[item.key]);
-  		} else {
-  			value = inputs[item.key];
-  		}
-  		return API.put('/api/option/', {
-  			key: item.key,
-  			value,
-  		});
-  	});
-  	setLoading(true);
-  	Promise.all(requestQueue)
-  		.then((res) => {
-  			if (requestQueue.length === 1) {
-  				if (res.includes(undefined)) return;
-  			} else if (requestQueue.length > 1) {
-  				if (res.includes(undefined))
-  					return showError(t('部分保存失败,请重试'));
-  			}
+    const updateArray = compareObjects(inputs, inputsRow);
+    if (!updateArray.length) return showWarning(t('你似乎并没有修改什么'));
+    const requestQueue = updateArray.map((item) => {
+      let value = '';
+      if (typeof inputs[item.key] === 'boolean') {
+        value = String(inputs[item.key]);
+      } else {
+        value = inputs[item.key];
+      }
+      return API.put('/api/option/', {
+        key: item.key,
+        value,
+      });
+    });
+    setLoading(true);
+    Promise.all(requestQueue)
+      .then((res) => {
+        if (requestQueue.length === 1) {
+          if (res.includes(undefined)) return;
+        } else if (requestQueue.length > 1) {
+          if (res.includes(undefined))
+            return showError(t('部分保存失败,请重试'));
+        }
 
-			for (let i = 0; i < res.length; i++) {
-				if (!res[i].data.success) {
-					return showError(res[i].data.message);
-				}
-			}
+      for (let i = 0; i < res.length; i++) {
+        if (!res[i].data.success) {
+          return showError(res[i].data.message);
+        }
+      }
 
-  			showSuccess(t('保存成功'));
-  			props.refresh();
-  		})
-  		.catch(() => {
-  			showError(t('保存失败,请重试'));
-  		})
-  		.finally(() => {
-  			setLoading(false);
-  		});
+        showSuccess(t('保存成功'));
+        props.refresh();
+      })
+      .catch(() => {
+        showError(t('保存失败,请重试'));
+      })
+      .finally(() => {
+        setLoading(false);
+      });
   }
  
   useEffect(() => {
-  	const currentInputs = {};
-  	for (let key in props.options) {
-  		if (Object.keys(inputs).includes(key)) {
-  			currentInputs[key] = props.options[key];
-  		}
-  	}
-  	setInputs(currentInputs);
-  	setInputsRow(structuredClone(currentInputs));
-  		refForm.current.setValues(currentInputs);
+    const currentInputs = {};
+    for (let key in props.options) {
+      if (Object.keys(inputs).includes(key)) {
+        currentInputs[key] = props.options[key];
+      }
+    }
+    setInputs(currentInputs);
+    setInputsRow(structuredClone(currentInputs));
+      refForm.current.setValues(currentInputs);
   }, [props.options]);
  
   return (
-  	<>
-  		<Spin spinning={loading}>
-  			<Form
-  				values={inputs}
-  				getFormApi={(formAPI) => (refForm.current = formAPI)}
-  				style={{ marginBottom: 15 }}
-  			>
-  				<Form.Section text={t('模型请求速率限制')}>
-  					<Row gutter={16}>
-  						<Col xs={24} sm={12} md={8} lg={8} xl={8}>
-  							<Form.Switch
-  								field={'ModelRequestRateLimitEnabled'}
-  								label={t('启用用户模型请求速率限制(可能会影响高并发性能)')}
-  								size='default'
-  								checkedText='|'
-  								uncheckedText='〇'
-  								onChange={(value) => {
-  									setInputs({
-  										...inputs,
-  										ModelRequestRateLimitEnabled: value,
-  									});
-  								}}
-  							/>
-  						</Col>
-  					</Row>
-  					<Row>
-  						<Col xs={24} sm={12} md={8} lg={8} xl={8}>
-  							<Form.InputNumber
-  								label={t('限制周期')}
-  								step={1}
-  								min={0}
-  								suffix={t('分钟')}
-  								extraText={t('频率限制的周期(分钟)')}
-  								field={'ModelRequestRateLimitDurationMinutes'}
-  								onChange={(value) =>
-  									setInputs({
-  										...inputs,
-  										ModelRequestRateLimitDurationMinutes: String(value),
-  									})
-  								}
-  							/>
-  						</Col>
-  					</Row>
-  					<Row>
-  						<Col xs={24} sm={12} md={8} lg={8} xl={8}>
-  							<Form.InputNumber
-  								label={t('用户每周期最多请求次数')}
-  								step={1}
-  								min={0}
-  								suffix={t('次')}
-  								extraText={t('包括失败请求的次数,0代表不限制')}
-  								field={'ModelRequestRateLimitCount'}
-  								onChange={(value) =>
-  									setInputs({
-  										...inputs,
-  										ModelRequestRateLimitCount: String(value),
-  									})
-  								}
-  							/>
-  						</Col>
-  						<Col xs={24} sm={12} md={8} lg={8} xl={8}>
-  							<Form.InputNumber
-  								label={t('用户每周期最多请求完成次数')}
-  								step={1}
-  								min={1}
-  								suffix={t('次')}
-  								extraText={t('只包括请求成功的次数')}
-  								field={'ModelRequestRateLimitSuccessCount'}
-  								onChange={(value) =>
-  									setInputs({
-  										...inputs,
-  										ModelRequestRateLimitSuccessCount: String(value),
-  									})
-  								}
-  							/>
-  						</Col>
-  					</Row>
-  					<Row>
-  						<Col xs={24} sm={16}>
-  							<Form.TextArea
-  								label={t('分组速率限制')}
-  								placeholder={t(
-  									'{\n  "default": [200, 100],\n  "vip": [0, 1000]\n}',
-  								)}
-  								field={'ModelRequestRateLimitGroup'}
-								autosize={{ minRows: 5, maxRows: 15 }}
-								trigger='blur'
-                				stopValidateWithError
-								rules={[
-									{
-									validator: (rule, value) => verifyJSON(value),
-									message: t('不是合法的 JSON 字符串'),
-									},
-								]}
-  								extraText={
-  									<div>
-  										<p style={{ marginBottom: -15 }}>{t('说明:')}</p>
-  										<ul>
-  											<li>{t('使用 JSON 对象格式,格式为:{"组名": [最多请求次数, 最多请求完成次数]}')}</li>
-											<li>{t('示例:{"default": [200, 100], "vip": [0, 1000]}。')}</li>
-											<li>{t('[最多请求次数]必须大于等于0,[最多请求完成次数]必须大于等于1。')}</li>
-  											<li>{t('分组速率配置优先级高于全局速率限制。')}</li>
-  											<li>{t('限制周期统一使用上方配置的“限制周期”值。')}</li>
-  										</ul>
-  									</div>
-  								}
-  								onChange={(value) => {
-  									setInputs({ ...inputs, ModelRequestRateLimitGroup: value });
-  								}}
-  							/>
-  						</Col>
-  					</Row>
-  					<Row>
-  						<Button size='default' onClick={onSubmit}>
-  							{t('保存模型速率限制')}
-  						</Button>
-  					</Row>
-  				</Form.Section>
-  			</Form>
-  		</Spin>
-  	</>
+    <>
+      <Spin spinning={loading}>
+        <Form
+          values={inputs}
+          getFormApi={(formAPI) => (refForm.current = formAPI)}
+          style={{ marginBottom: 15 }}
+        >
+          <Form.Section text={t('模型请求速率限制')}>
+            <Row gutter={16}>
+              <Col xs={24} sm={12} md={8} lg={8} xl={8}>
+                <Form.Switch
+                  field={'ModelRequestRateLimitEnabled'}
+                  label={t('启用用户模型请求速率限制(可能会影响高并发性能)')}
+                  size='default'
+                  checkedText='|'
+                  uncheckedText='〇'
+                  onChange={(value) => {
+                    setInputs({
+                      ...inputs,
+                      ModelRequestRateLimitEnabled: value,
+                    });
+                  }}
+                />
+              </Col>
+            </Row>
+            <Row>
+              <Col xs={24} sm={12} md={8} lg={8} xl={8}>
+                <Form.InputNumber
+                  label={t('限制周期')}
+                  step={1}
+                  min={0}
+                  suffix={t('分钟')}
+                  extraText={t('频率限制的周期(分钟)')}
+                  field={'ModelRequestRateLimitDurationMinutes'}
+                  onChange={(value) =>
+                    setInputs({
+                      ...inputs,
+                      ModelRequestRateLimitDurationMinutes: String(value),
+                    })
+                  }
+                />
+              </Col>
+            </Row>
+            <Row>
+              <Col xs={24} sm={12} md={8} lg={8} xl={8}>
+                <Form.InputNumber
+                  label={t('用户每周期最多请求次数')}
+                  step={1}
+                  min={0}
+                  suffix={t('次')}
+                  extraText={t('包括失败请求的次数,0代表不限制')}
+                  field={'ModelRequestRateLimitCount'}
+                  onChange={(value) =>
+                    setInputs({
+                      ...inputs,
+                      ModelRequestRateLimitCount: String(value),
+                    })
+                  }
+                />
+              </Col>
+              <Col xs={24} sm={12} md={8} lg={8} xl={8}>
+                <Form.InputNumber
+                  label={t('用户每周期最多请求完成次数')}
+                  step={1}
+                  min={1}
+                  suffix={t('次')}
+                  extraText={t('只包括请求成功的次数')}
+                  field={'ModelRequestRateLimitSuccessCount'}
+                  onChange={(value) =>
+                    setInputs({
+                      ...inputs,
+                      ModelRequestRateLimitSuccessCount: String(value),
+                    })
+                  }
+                />
+              </Col>
+            </Row>
+            <Row>
+              <Col xs={24} sm={16}>
+                <Form.TextArea
+                  label={t('分组速率限制')}
+                  placeholder={t(
+                    '{\n  "default": [200, 100],\n  "vip": [0, 1000]\n}',
+                  )}
+                  field={'ModelRequestRateLimitGroup'}
+                autosize={{ minRows: 5, maxRows: 15 }}
+                trigger='blur'
+                        stopValidateWithError
+                rules={[
+                  {
+                  validator: (rule, value) => verifyJSON(value),
+                  message: t('不是合法的 JSON 字符串'),
+                  },
+                ]}
+                  extraText={
+                    <div>
+                      <p style={{ marginBottom: -15 }}>{t('说明:')}</p>
+                      <ul>
+                        <li>{t('使用 JSON 对象格式,格式为:{"组名": [最多请求次数, 最多请求完成次数]}')}</li>
+                      <li>{t('示例:{"default": [200, 100], "vip": [0, 1000]}。')}</li>
+                      <li>{t('[最多请求次数]必须大于等于0,[最多请求完成次数]必须大于等于1。')}</li>
+                        <li>{t('分组速率配置优先级高于全局速率限制。')}</li>
+                        <li>{t('限制周期统一使用上方配置的“限制周期”值。')}</li>
+                      </ul>
+                    </div>
+                  }
+                  onChange={(value) => {
+                    setInputs({ ...inputs, ModelRequestRateLimitGroup: value });
+                  }}
+                />
+              </Col>
+            </Row>
+            <Row>
+              <Button size='default' onClick={onSubmit}>
+                {t('保存模型速率限制')}
+              </Button>
+            </Row>
+          </Form.Section>
+        </Form>
+      </Spin>
+    </>
   );
  }