优化配置更新方法
This commit is contained in:
parent
39bfc3d786
commit
36b8cc80a5
@ -28,6 +28,15 @@ async def update_config(
|
||||
config.save()
|
||||
return config.dump_config()
|
||||
|
||||
@base.post("/config/update")
|
||||
async def update_config_item(
|
||||
items: dict = Body(...),
|
||||
current_user: User = Depends(get_admin_user)
|
||||
) -> dict:
|
||||
config.update(items)
|
||||
config.save()
|
||||
return config.dump_config()
|
||||
|
||||
@base.post("/restart")
|
||||
async def restart(current_user: User = Depends(get_superadmin_user)):
|
||||
knowledge_base.restart()
|
||||
|
||||
@ -29,6 +29,10 @@ class SimpleConfig(dict):
|
||||
def __dict__(self):
|
||||
return {k: v for k, v in self.items()}
|
||||
|
||||
def update(self, other):
|
||||
for key, value in other.items():
|
||||
self[key] = value
|
||||
|
||||
|
||||
class Config(SimpleConfig):
|
||||
|
||||
|
||||
@ -257,14 +257,16 @@ export const systemConfigApi = {
|
||||
return apiGet('/api/config', {}, true)
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* 更新系统配置
|
||||
* @param {Object} config - 配置项
|
||||
* 更新某个配置
|
||||
* @param {Object} items - 配置项
|
||||
* @returns {Promise} - 更新结果
|
||||
*/
|
||||
updateSystemConfig: async (config) => {
|
||||
updateConfigItems: async (items) => {
|
||||
checkAdminPermission()
|
||||
return apiPut('/api/config', config, {}, true)
|
||||
console.log("updateConfigItems", items)
|
||||
return apiPost('/api/config/update', items, {}, true)
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@ -21,7 +21,21 @@ export const useConfigStore = defineStore('config', () => {
|
||||
|
||||
function setConfigValue(key, value) {
|
||||
config.value[key] = value
|
||||
systemConfigApi.updateSystemConfig({ key, value })
|
||||
systemConfigApi.updateConfigItems({ [key]: value })
|
||||
.then(data => {
|
||||
console.debug('Success:', data)
|
||||
setConfig(data)
|
||||
})
|
||||
}
|
||||
|
||||
function setConfigValues(items) {
|
||||
// 更新本地配置
|
||||
for (const key in items) {
|
||||
config.value[key] = items[key]
|
||||
}
|
||||
|
||||
// 发送到服务器
|
||||
systemConfigApi.updateConfigItems(items)
|
||||
.then(data => {
|
||||
console.debug('Success:', data)
|
||||
setConfig(data)
|
||||
@ -36,5 +50,5 @@ export const useConfigStore = defineStore('config', () => {
|
||||
})
|
||||
}
|
||||
|
||||
return { config, setConfig, setConfigValue, refreshConfig }
|
||||
return { config, setConfig, setConfigValue, refreshConfig, setConfigValues }
|
||||
})
|
||||
@ -92,7 +92,7 @@
|
||||
<div
|
||||
:class="{'model_selected': modelProvider == 'custom' && configStore.config.model_name == item.custom_id, 'card-models': true, 'custom-model': true}"
|
||||
v-for="(item, key) in configStore.config.custom_models" :key="item.custom_id"
|
||||
@click="handleChange('model_provider', 'custom'); handleChange('model_name', item.custom_id)"
|
||||
@click="handleChanges({ model_provider: 'custom', model_name: item.custom_id })"
|
||||
>
|
||||
<div class="card-models__header">
|
||||
<div class="name" :title="item.name">{{ item.name }}</div>
|
||||
@ -181,7 +181,7 @@
|
||||
<div
|
||||
:class="{'model_selected': modelProvider == item && configStore.config.model_name == model, 'card-models': true}"
|
||||
v-for="(model, idx) in modelNames[item].models" :key="idx"
|
||||
@click="handleChange('model_provider', item); handleChange('model_name', model)"
|
||||
@click="handleChanges({ model_provider: item, model_name: model })"
|
||||
>
|
||||
<div class="model_name">{{ model }}</div>
|
||||
</div>
|
||||
@ -470,7 +470,7 @@ const handleModelLocalPathsUpdate = (config) => {
|
||||
handleChange('model_local_paths', config)
|
||||
}
|
||||
|
||||
const handleChange = (key, e) => {
|
||||
const preHandleChange = (key, e) => {
|
||||
if (key == 'enable_knowledge_graph' && e && !configStore.config.enable_knowledge_base) {
|
||||
message.error('启动知识图谱必须请先启用知识库功能')
|
||||
return
|
||||
@ -481,29 +481,45 @@ const handleChange = (key, e) => {
|
||||
return
|
||||
}
|
||||
|
||||
// 这些都是需要重启的配置
|
||||
if (key == 'enable_reranker'
|
||||
|| key == 'enable_knowledge_graph'
|
||||
|| key == 'enable_knowledge_base'
|
||||
|| key == 'enable_web_search'
|
||||
|| key == 'embed_model'
|
||||
|| key == 'reranker'
|
||||
|| key == 'model_local_paths') {
|
||||
if (!isNeedRestart.value) {
|
||||
isNeedRestart.value = true
|
||||
notification.info({
|
||||
message: '需要重新加载模型',
|
||||
description: '请点击右下角按钮重新加载模型',
|
||||
placement: 'topLeft',
|
||||
duration: 0,
|
||||
btn: h(Button, { type: 'primary', onClick: sendRestart }, '立即重新加载')
|
||||
})
|
||||
}
|
||||
if (key == 'enable_reranker' && e && !configStore.config.enable_reranker) {
|
||||
message.error('启动重排序必须请先启用重排序功能')
|
||||
return
|
||||
}
|
||||
|
||||
if (key == 'enable_reranker'
|
||||
|| key == 'enable_knowledge_graph'
|
||||
|| key == 'enable_knowledge_base'
|
||||
|| key == 'embed_model'
|
||||
|| key == 'reranker'
|
||||
|| key == 'model_local_paths') {
|
||||
isNeedRestart.value = true
|
||||
notification.info({
|
||||
message: '需要重新加载模型',
|
||||
description: '请点击右下角按钮重新加载模型',
|
||||
placement: 'topLeft',
|
||||
duration: 0,
|
||||
btn: h(Button, { type: 'primary', onClick: sendRestart }, '立即重新加载')
|
||||
})
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
const handleChange = (key, e) => {
|
||||
if (!preHandleChange(key, e)) {
|
||||
return
|
||||
}
|
||||
configStore.setConfigValue(key, e)
|
||||
}
|
||||
|
||||
const handleChanges = (items) => {
|
||||
for (const key in items) {
|
||||
if (!preHandleChange(key, items[key])) {
|
||||
return
|
||||
}
|
||||
}
|
||||
configStore.setConfigValues(items)
|
||||
}
|
||||
|
||||
const handleAddOrEditCustomModel = async () => {
|
||||
if (!customModel.name || !customModel.api_base) {
|
||||
message.error('请填写完整的模型名称和API Base信息。')
|
||||
@ -585,7 +601,7 @@ onUnmounted(() => {
|
||||
const sendRestart = () => {
|
||||
console.log('Restarting...')
|
||||
message.loading({ content: '重新加载模型中', key: "restart", duration: 0 });
|
||||
|
||||
|
||||
systemConfigApi.restartServer()
|
||||
.then(() => {
|
||||
console.log('Restarted')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user