优化配置更新方法

This commit is contained in:
Wenjie Zhang 2025-05-05 19:40:23 +08:00
parent 39bfc3d786
commit 36b8cc80a5
5 changed files with 73 additions and 28 deletions

View File

@ -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()

View File

@ -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):

View File

@ -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)
},
/**

View File

@ -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 }
})

View File

@ -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')