fix: verify same model selected
This commit is contained in:
@@ -21,5 +21,6 @@ export default {
|
|||||||
'providers.form.addAll': 'Add All',
|
'providers.form.addAll': 'Add All',
|
||||||
'providers.form.rules.models': 'Please select at least one model',
|
'providers.form.rules.models': 'Please select at least one model',
|
||||||
'providers.form.rules.tokens': 'Please enter a valid API Key',
|
'providers.form.rules.tokens': 'Please enter a valid API Key',
|
||||||
'providers.form.rules.model': 'Please select a model'
|
'providers.form.rules.model': 'Please select a model',
|
||||||
|
'providers.form.model.duplicate': 'Duplicate model exists'
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -21,5 +21,6 @@ export default {
|
|||||||
'providers.form.addAll': 'Add All',
|
'providers.form.addAll': 'Add All',
|
||||||
'providers.form.rules.models': 'Please select at least one model',
|
'providers.form.rules.models': 'Please select at least one model',
|
||||||
'providers.form.rules.tokens': 'Please enter a valid API Key',
|
'providers.form.rules.tokens': 'Please enter a valid API Key',
|
||||||
'providers.form.rules.model': 'Please select a model'
|
'providers.form.rules.model': 'Please select a model',
|
||||||
|
'providers.form.model.duplicate': 'Duplicate model exists'
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -21,5 +21,6 @@ export default {
|
|||||||
'providers.form.addAll': 'Add All',
|
'providers.form.addAll': 'Add All',
|
||||||
'providers.form.rules.models': 'Please select at least one model',
|
'providers.form.rules.models': 'Please select at least one model',
|
||||||
'providers.form.rules.tokens': 'Please enter a valid API Key',
|
'providers.form.rules.tokens': 'Please enter a valid API Key',
|
||||||
'providers.form.rules.model': 'Please select a model'
|
'providers.form.rules.model': 'Please select a model',
|
||||||
|
'providers.form.model.duplicate': 'Duplicate model exists'
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -21,5 +21,6 @@ export default {
|
|||||||
'providers.form.addAll': '添加全部',
|
'providers.form.addAll': '添加全部',
|
||||||
'providers.form.rules.models': '请选择至少一个模型',
|
'providers.form.rules.models': '请选择至少一个模型',
|
||||||
'providers.form.rules.tokens': '请输入有效的 API Key',
|
'providers.form.rules.tokens': '请输入有效的 API Key',
|
||||||
'providers.form.rules.model': '请选择模型'
|
'providers.form.rules.model': '请选择模型',
|
||||||
|
'providers.form.model.duplicate': '存在相同的模型'
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ const ModelItem: React.FC<ModelItemProps> = ({
|
|||||||
const form = Form.useFormInstance<FormData>();
|
const form = Form.useFormInstance<FormData>();
|
||||||
const { runTestModel, loading: testLoading } = useTestProviderModel();
|
const { runTestModel, loading: testLoading } = useTestProviderModel();
|
||||||
const { id, action, currentData } = useFormContext();
|
const { id, action, currentData } = useFormContext();
|
||||||
|
const [openTip, setOpenTip] = React.useState(false);
|
||||||
|
|
||||||
const generateCurrentAPIKey = (currentAPIKey: string) => {
|
const generateCurrentAPIKey = (currentAPIKey: string) => {
|
||||||
if (
|
if (
|
||||||
@@ -87,6 +88,7 @@ const ModelItem: React.FC<ModelItemProps> = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleOnChange = (value: string, option: any) => {
|
const handleOnChange = (value: string, option: any) => {
|
||||||
|
console.log('selected model', value, option);
|
||||||
onChange({
|
onChange({
|
||||||
...option,
|
...option,
|
||||||
name: value
|
name: value
|
||||||
@@ -100,13 +102,26 @@ const ModelItem: React.FC<ModelItemProps> = ({
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const renderSuffixIcon = () => {
|
const handleOnBlur = (e: any) => {
|
||||||
console.log(
|
const value = e.target.value;
|
||||||
'testLoading',
|
|
||||||
testLoading,
|
const isDuplicate = selectedModelList.some(
|
||||||
item.accessible,
|
(model) => model.name === value && model !== item
|
||||||
item.accessible === false
|
|
||||||
);
|
);
|
||||||
|
setOpenTip(isDuplicate);
|
||||||
|
// if duplicate, clear the value, and close the tooltip after 2 seconds
|
||||||
|
if (isDuplicate) {
|
||||||
|
onChange({
|
||||||
|
...item,
|
||||||
|
name: ''
|
||||||
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
setOpenTip(false);
|
||||||
|
}, 2000);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const renderSuffixIcon = () => {
|
||||||
if (testLoading) {
|
if (testLoading) {
|
||||||
return <LoadingOutlined />;
|
return <LoadingOutlined />;
|
||||||
}
|
}
|
||||||
@@ -140,26 +155,36 @@ const ModelItem: React.FC<ModelItemProps> = ({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<SelectWrapper>
|
<SelectWrapper>
|
||||||
<AutoComplete
|
<Tooltip
|
||||||
loading={loading}
|
title={intl.formatMessage({ id: 'providers.form.model.duplicate' })}
|
||||||
showSearch={{
|
open={openTip}
|
||||||
filterOption: (inputValue, option: any) => {
|
>
|
||||||
return (
|
<span>
|
||||||
option!.value.toLowerCase().includes(inputValue.toLowerCase()) ||
|
<AutoComplete
|
||||||
option.label
|
loading={loading}
|
||||||
?.toString()
|
showSearch={{
|
||||||
.toLowerCase()
|
filterOption: (inputValue, option: any) => {
|
||||||
.includes(inputValue.toLowerCase())
|
return (
|
||||||
);
|
option!.value
|
||||||
}
|
.toLowerCase()
|
||||||
}}
|
.includes(inputValue.toLowerCase()) ||
|
||||||
onOpenChange={onOpenChange}
|
option.label
|
||||||
suffixIcon={renderSuffixIcon()}
|
?.toString()
|
||||||
value={item.name}
|
.toLowerCase()
|
||||||
onChange={handleOnChange}
|
.includes(inputValue.toLowerCase())
|
||||||
options={filteredOptions}
|
);
|
||||||
placeholder={intl.formatMessage({ id: 'providers.table.models' })}
|
}
|
||||||
/>
|
}}
|
||||||
|
onOpenChange={onOpenChange}
|
||||||
|
suffixIcon={renderSuffixIcon()}
|
||||||
|
value={item.name}
|
||||||
|
onChange={handleOnChange}
|
||||||
|
onBlur={handleOnBlur}
|
||||||
|
options={filteredOptions}
|
||||||
|
placeholder={intl.formatMessage({ id: 'providers.table.models' })}
|
||||||
|
/>
|
||||||
|
</span>
|
||||||
|
</Tooltip>
|
||||||
<SealSelect
|
<SealSelect
|
||||||
value={item.category || undefined}
|
value={item.category || undefined}
|
||||||
onChange={handleOnCategoryChange}
|
onChange={handleOnCategoryChange}
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ const SupportedModels = () => {
|
|||||||
await form.validateFields(['api_key', ['config', 'type']]);
|
await form.validateFields(['api_key', ['config', 'type']]);
|
||||||
|
|
||||||
const currentAPIKey = form.getFieldValue('api_key') || '';
|
const currentAPIKey = form.getFieldValue('api_key') || '';
|
||||||
console.log('handleOpenChange', { open, currentAPIKey });
|
|
||||||
|
|
||||||
// Avoid repeated requests with the same API key
|
// Avoid repeated requests with the same API key
|
||||||
if (
|
if (
|
||||||
|
|||||||
Reference in New Issue
Block a user