diff --git a/web/src/pages/Setting/Ratio/ModelRationNotSetEditor.jsx b/web/src/pages/Setting/Ratio/ModelRationNotSetEditor.jsx
index 5d6dd15..dd5d4d8 100644
--- a/web/src/pages/Setting/Ratio/ModelRationNotSetEditor.jsx
+++ b/web/src/pages/Setting/Ratio/ModelRationNotSetEditor.jsx
@@ -17,7 +17,7 @@ along with this program. If not, see .
For commercial licensing, please contact support@quantumnous.com
*/
-import React, { useEffect, useState } from 'react';
+import React, { useEffect, useState, useRef } from 'react';
import {
Table,
Button,
@@ -56,6 +56,7 @@ export default function ModelRatioNotSetEditor(props) {
const [batchRatioValue, setBatchRatioValue] = useState('');
const [batchCompletionRatioValue, setBatchCompletionRatioValue] =
useState('');
+ const addFormRef = useRef(null);
const { Text } = Typography;
// 定义可选的每页显示条数
const pageSizeOptions = [10, 20, 50, 100];
@@ -85,6 +86,11 @@ export default function ModelRatioNotSetEditor(props) {
const modelPrice = JSON.parse(props.options.ModelPrice || '{}');
const modelRatio = JSON.parse(props.options.ModelRatio || '{}');
const completionRatio = JSON.parse(props.options.CompletionRatio || '{}');
+ const cacheRatio = JSON.parse(props.options.CacheRatio || '{}');
+ const createCacheRatio = JSON.parse(props.options.CreateCacheRatio || '{}');
+ const imageRatio = JSON.parse(props.options.ImageRatio || '{}');
+ const audioRatio = JSON.parse(props.options.AudioRatio || '{}');
+ const audioCompletionRatio = JSON.parse(props.options.AudioCompletionRatio || '{}');
// 找出所有未设置价格和倍率的模型
const unsetModels = enabledModels.filter((modelName) => {
@@ -101,6 +107,11 @@ export default function ModelRatioNotSetEditor(props) {
price: modelPrice[name] || '',
ratio: modelRatio[name] || '',
completionRatio: completionRatio[name] || '',
+ cacheRatio: cacheRatio[name] ?? '',
+ cacheCreationRatio: createCacheRatio[name] ?? '',
+ imageRatio: imageRatio[name] ?? '',
+ audioRatio: audioRatio[name] ?? '',
+ audioCompletionRatio: audioCompletionRatio[name] ?? '',
}));
setModels(modelData);
@@ -142,6 +153,11 @@ export default function ModelRatioNotSetEditor(props) {
ModelPrice: JSON.parse(props.options.ModelPrice || '{}'),
ModelRatio: JSON.parse(props.options.ModelRatio || '{}'),
CompletionRatio: JSON.parse(props.options.CompletionRatio || '{}'),
+ CacheRatio: JSON.parse(props.options.CacheRatio || '{}'),
+ CreateCacheRatio: JSON.parse(props.options.CreateCacheRatio || '{}'),
+ ImageRatio: JSON.parse(props.options.ImageRatio || '{}'),
+ AudioRatio: JSON.parse(props.options.AudioRatio || '{}'),
+ AudioCompletionRatio: JSON.parse(props.options.AudioCompletionRatio || '{}'),
};
try {
@@ -159,6 +175,18 @@ export default function ModelRatioNotSetEditor(props) {
model.completionRatio,
);
}
+
+ // 高级倍率字段(0 是有效值)
+ if (model.cacheRatio !== '' && model.cacheRatio != null)
+ output.CacheRatio[model.name] = parseFloat(model.cacheRatio);
+ if (model.cacheCreationRatio !== '' && model.cacheCreationRatio != null)
+ output.CreateCacheRatio[model.name] = parseFloat(model.cacheCreationRatio);
+ if (model.imageRatio !== '' && model.imageRatio != null)
+ output.ImageRatio[model.name] = parseFloat(model.imageRatio);
+ if (model.audioRatio !== '' && model.audioRatio != null)
+ output.AudioRatio[model.name] = parseFloat(model.audioRatio);
+ if (model.audioCompletionRatio !== '' && model.audioCompletionRatio != null)
+ output.AudioCompletionRatio[model.name] = parseFloat(model.audioCompletionRatio);
});
// 准备API请求数组
@@ -252,6 +280,75 @@ export default function ModelRatioNotSetEditor(props) {
/>
),
},
+ {
+ title: t('缓存读取倍率'),
+ dataIndex: 'cacheRatio',
+ key: 'cacheRatio',
+ render: (text, record) => (
+ updateModel(record.name, 'cacheRatio', value)}
+ />
+ ),
+ },
+ {
+ title: t('缓存创建倍率(5分钟)'),
+ dataIndex: 'cacheCreationRatio',
+ key: 'cacheCreationRatio',
+ render: (text, record) => (
+
+ updateModel(record.name, 'cacheCreationRatio', value)
+ }
+ />
+ ),
+ },
+ {
+ title: t('图片倍率'),
+ dataIndex: 'imageRatio',
+ key: 'imageRatio',
+ render: (text, record) => (
+ updateModel(record.name, 'imageRatio', value)}
+ />
+ ),
+ },
+ {
+ title: t('音频输入倍率'),
+ dataIndex: 'audioRatio',
+ key: 'audioRatio',
+ render: (text, record) => (
+ updateModel(record.name, 'audioRatio', value)}
+ />
+ ),
+ },
+ {
+ title: t('音频输出倍率'),
+ dataIndex: 'audioCompletionRatio',
+ key: 'audioCompletionRatio',
+ render: (text, record) => (
+
+ updateModel(record.name, 'audioCompletionRatio', value)
+ }
+ />
+ ),
+ },
];
const updateModel = (name, field, value) => {
@@ -272,12 +369,29 @@ export default function ModelRatioNotSetEditor(props) {
showError(t('模型名称已存在'));
return;
}
+ // 从表单读取高级倍率字段
+ let advancedValues = {};
+ if (addFormRef.current) {
+ const formValues = addFormRef.current.getValues();
+ advancedValues = {
+ cacheRatio: formValues.cacheRatio != null ? formValues.cacheRatio : '',
+ cacheCreationRatio: formValues.cacheCreationRatio != null ? formValues.cacheCreationRatio : '',
+ imageRatio: formValues.imageRatio != null ? formValues.imageRatio : '',
+ audioRatio: formValues.audioRatio != null ? formValues.audioRatio : '',
+ audioCompletionRatio: formValues.audioCompletionRatio != null ? formValues.audioCompletionRatio : '',
+ };
+ }
setModels((prev) => [
{
name: values.name,
price: values.price || '',
ratio: values.ratio || '',
completionRatio: values.completionRatio || '',
+ cacheRatio: advancedValues.cacheRatio ?? '',
+ cacheCreationRatio: advancedValues.cacheCreationRatio ?? '',
+ imageRatio: advancedValues.imageRatio ?? '',
+ audioRatio: advancedValues.audioRatio ?? '',
+ audioCompletionRatio: advancedValues.audioCompletionRatio ?? '',
},
...prev,
]);
@@ -457,7 +571,7 @@ export default function ModelRatioNotSetEditor(props) {
currentModel && addModel(currentModel);
}}
>
-
+
+
+
+
+
>
)}