feat: 添加流模式下的SSE保活机制 #945
This commit is contained in:
@@ -18,6 +18,8 @@ const ModelSetting = () => {
|
||||
'claude.default_max_tokens': '',
|
||||
'claude.thinking_adapter_budget_tokens_percentage': 0.8,
|
||||
'global.pass_through_request_enabled': false,
|
||||
'general_setting.ping_interval_enabled': false,
|
||||
'general_setting.ping_interval_seconds': 60,
|
||||
});
|
||||
|
||||
let [loading, setLoading] = useState(false);
|
||||
|
||||
@@ -793,23 +793,7 @@ const PersonalSetting = () => {
|
||||
</div>
|
||||
</Card>
|
||||
<Card style={{ marginTop: 10 }}>
|
||||
<Tabs type="line" defaultActiveKey="price">
|
||||
<TabPane tab={t('价格设置')} itemKey="price">
|
||||
<div style={{ marginTop: 20 }}>
|
||||
<Typography.Text strong>{t('接受未设置价格模型')}</Typography.Text>
|
||||
<div style={{ marginTop: 10 }}>
|
||||
<Checkbox
|
||||
checked={notificationSettings.acceptUnsetModelRatioModel}
|
||||
onChange={e => handleNotificationSettingChange('acceptUnsetModelRatioModel', e.target.checked)}
|
||||
>
|
||||
{t('接受未设置价格模型')}
|
||||
</Checkbox>
|
||||
<Typography.Text type="secondary" style={{ marginTop: 8, display: 'block' }}>
|
||||
{t('当模型没有设置价格时仍接受调用,仅当您信任该网站时使用,可能会产生高额费用')}
|
||||
</Typography.Text>
|
||||
</div>
|
||||
</div>
|
||||
</TabPane>
|
||||
<Tabs type="line" defaultActiveKey="notification">
|
||||
<TabPane tab={t('通知设置')} itemKey="notification">
|
||||
<div style={{ marginTop: 20 }}>
|
||||
<Typography.Text strong>{t('通知方式')}</Typography.Text>
|
||||
@@ -923,6 +907,23 @@ const PersonalSetting = () => {
|
||||
</Typography.Text>
|
||||
</div>
|
||||
</TabPane>
|
||||
<TabPane tab={t('价格设置')} itemKey="price">
|
||||
<div style={{ marginTop: 20 }}>
|
||||
<Typography.Text strong>{t('接受未设置价格模型')}</Typography.Text>
|
||||
<div style={{ marginTop: 10 }}>
|
||||
<Checkbox
|
||||
checked={notificationSettings.acceptUnsetModelRatioModel}
|
||||
onChange={e => handleNotificationSettingChange('acceptUnsetModelRatioModel', e.target.checked)}
|
||||
>
|
||||
{t('接受未设置价格模型')}
|
||||
</Checkbox>
|
||||
<Typography.Text type="secondary" style={{ marginTop: 8, display: 'block' }}>
|
||||
{t('当模型没有设置价格时仍接受调用,仅当您信任该网站时使用,可能会产生高额费用')}
|
||||
</Typography.Text>
|
||||
</div>
|
||||
</div>
|
||||
</TabPane>
|
||||
|
||||
</Tabs>
|
||||
<div style={{ marginTop: 20 }}>
|
||||
<Button type="primary" onClick={saveNotificationSettings}>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import React, { useEffect, useState, useRef } from 'react';
|
||||
import { Button, Col, Form, Row, Spin } from '@douyinfe/semi-ui';
|
||||
import { Button, Col, Form, Row, Spin, Banner } from '@douyinfe/semi-ui';
|
||||
import {
|
||||
compareObjects,
|
||||
API,
|
||||
@@ -15,6 +15,8 @@ export default function SettingGlobalModel(props) {
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [inputs, setInputs] = useState({
|
||||
'global.pass_through_request_enabled': false,
|
||||
'general_setting.ping_interval_enabled': false,
|
||||
'general_setting.ping_interval_seconds': 60,
|
||||
});
|
||||
const refForm = useRef();
|
||||
const [inputsRow, setInputsRow] = useState(inputs);
|
||||
@@ -23,12 +25,8 @@ export default function SettingGlobalModel(props) {
|
||||
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];
|
||||
}
|
||||
let value = String(inputs[item.key]);
|
||||
|
||||
return API.put('/api/option/', {
|
||||
key: item.key,
|
||||
value,
|
||||
@@ -84,6 +82,36 @@ export default function SettingGlobalModel(props) {
|
||||
/>
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
<Form.Section text={t('连接保活设置')}>
|
||||
<Row style={{ marginTop: 10 }}>
|
||||
<Col span={24}>
|
||||
<Banner
|
||||
type="warning"
|
||||
description="警告:启用保活后,如果已经写入保活数据后渠道出错,系统无法重试,如果必须开启,推荐设置尽可能大的Ping间隔"
|
||||
/>
|
||||
</Col>
|
||||
</Row>
|
||||
<Row>
|
||||
<Col xs={24} sm={12} md={8} lg={8} xl={8}>
|
||||
<Form.Switch
|
||||
label={t('启用Ping间隔')}
|
||||
field={'general_setting.ping_interval_enabled'}
|
||||
onChange={(value) => setInputs({ ...inputs, 'general_setting.ping_interval_enabled': value })}
|
||||
extraText={'开启后,将定期发送ping数据保持连接活跃'}
|
||||
/>
|
||||
</Col>
|
||||
<Col xs={24} sm={12} md={8} lg={8} xl={8}>
|
||||
<Form.InputNumber
|
||||
label={t('Ping间隔(秒)')}
|
||||
field={'general_setting.ping_interval_seconds'}
|
||||
onChange={(value) => setInputs({ ...inputs, 'general_setting.ping_interval_seconds': value })}
|
||||
min={1}
|
||||
disabled={!inputs['general_setting.ping_interval_enabled']}
|
||||
/>
|
||||
</Col>
|
||||
</Row>
|
||||
</Form.Section>
|
||||
|
||||
<Row>
|
||||
<Button size='default' onClick={onSubmit}>
|
||||
|
||||
Reference in New Issue
Block a user