feat: added api connection validation and provider configuration
This commit is contained in:
parent
29d6c4be18
commit
12a2c8c86d
@ -378,7 +378,8 @@
|
|||||||
"delete.title": "Delete Provider",
|
"delete.title": "Delete Provider",
|
||||||
"delete.content": "Are you sure you want to delete this provider?",
|
"delete.content": "Are you sure you want to delete this provider?",
|
||||||
"edit.name": "Provider Name",
|
"edit.name": "Provider Name",
|
||||||
"edit.name.placeholder": "Example: OpenAI"
|
"edit.name.placeholder": "Example: OpenAI",
|
||||||
|
"no_models": "Please add models first before checking the API connection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"translate": {
|
"translate": {
|
||||||
|
|||||||
@ -366,7 +366,8 @@
|
|||||||
"delete.title": "删除提供商",
|
"delete.title": "删除提供商",
|
||||||
"delete.content": "确定要删除此模型提供商吗?",
|
"delete.content": "确定要删除此模型提供商吗?",
|
||||||
"edit.name": "模型提供商名称",
|
"edit.name": "模型提供商名称",
|
||||||
"edit.name.placeholder": "例如 OpenAI"
|
"edit.name.placeholder": "例如 OpenAI",
|
||||||
|
"no_models": "请先添加模型再检查 API 连接"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"translate": {
|
"translate": {
|
||||||
|
|||||||
@ -366,7 +366,8 @@
|
|||||||
"delete.title": "刪除提供者",
|
"delete.title": "刪除提供者",
|
||||||
".delete.content": "確定要刪除此提供者嗎?",
|
".delete.content": "確定要刪除此提供者嗎?",
|
||||||
"edit.name": "提供者名稱",
|
"edit.name": "提供者名稱",
|
||||||
"edit.name.placeholder": "例如:OpenAI"
|
"edit.name.placeholder": "例如:OpenAI",
|
||||||
|
"no_models": "請先添加模型再檢查 API 連接"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"translate": {
|
"translate": {
|
||||||
|
|||||||
@ -65,6 +65,16 @@ const ProviderSetting: FC<Props> = ({ provider: _provider }) => {
|
|||||||
const onAddModel = () => AddModelPopup.show({ title: t('settings.models.add.add_model'), provider })
|
const onAddModel = () => AddModelPopup.show({ title: t('settings.models.add.add_model'), provider })
|
||||||
|
|
||||||
const onCheckApi = async () => {
|
const onCheckApi = async () => {
|
||||||
|
if (isEmpty(models)) {
|
||||||
|
window.message.error({
|
||||||
|
key: 'no-models',
|
||||||
|
style: { marginTop: '3vh' },
|
||||||
|
duration: 5,
|
||||||
|
content: t('settings.provider.no_models')
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (apiKey.includes(',')) {
|
if (apiKey.includes(',')) {
|
||||||
const keys = apiKey
|
const keys = apiKey
|
||||||
.split(',')
|
.split(',')
|
||||||
@ -149,7 +159,7 @@ const ProviderSetting: FC<Props> = ({ provider: _provider }) => {
|
|||||||
type="password"
|
type="password"
|
||||||
autoFocus={provider.enabled && apiKey === ''}
|
autoFocus={provider.enabled && apiKey === ''}
|
||||||
/>
|
/>
|
||||||
<Button type={apiValid ? 'primary' : 'default'} ghost={apiValid} onClick={onCheckApi}>
|
<Button type={apiValid ? 'primary' : 'default'} ghost={apiValid} onClick={onCheckApi} disabled={!apiHost}>
|
||||||
{apiChecking ? <LoadingOutlined spin /> : apiValid ? <CheckOutlined /> : t('settings.provider.check')}
|
{apiChecking ? <LoadingOutlined spin /> : apiValid ? <CheckOutlined /> : t('settings.provider.check')}
|
||||||
</Button>
|
</Button>
|
||||||
</Space.Compact>
|
</Space.Compact>
|
||||||
|
|||||||
@ -46,6 +46,7 @@ const ProvidersList: FC = () => {
|
|||||||
enabled: true,
|
enabled: true,
|
||||||
isSystem: false
|
isSystem: false
|
||||||
} as Provider
|
} as Provider
|
||||||
|
|
||||||
addProvider(provider)
|
addProvider(provider)
|
||||||
setSelectedProvider(provider)
|
setSelectedProvider(provider)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -339,7 +339,7 @@ const settingsSlice = createSlice({
|
|||||||
state.providers = action.payload
|
state.providers = action.payload
|
||||||
},
|
},
|
||||||
addProvider: (state, action: PayloadAction<Provider>) => {
|
addProvider: (state, action: PayloadAction<Provider>) => {
|
||||||
state.providers.push(action.payload)
|
state.providers.unshift(action.payload)
|
||||||
},
|
},
|
||||||
removeProvider: (state, action: PayloadAction<Provider>) => {
|
removeProvider: (state, action: PayloadAction<Provider>) => {
|
||||||
state.providers = state.providers.filter((p) => p.id !== action.payload.id)
|
state.providers = state.providers.filter((p) => p.id !== action.payload.id)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user