From f52f375154764df5ad5bf65c23119c97870dbedd Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Wed, 17 Dec 2025 16:55:12 +0800 Subject: [PATCH] refactor: update provider handling to use new config structure and improve template retrieval --- astrbot/dashboard/routes/config.py | 4 +- .../components/provider/AddNewProvider.vue | 2 +- .../src/composables/useProviderSources.ts | 21 +++------- dashboard/src/views/ProviderPage.vue | 38 +++++-------------- 4 files changed, 18 insertions(+), 47 deletions(-) diff --git a/astrbot/dashboard/routes/config.py b/astrbot/dashboard/routes/config.py index ea5839c55..59a7f509f 100644 --- a/astrbot/dashboard/routes/config.py +++ b/astrbot/dashboard/routes/config.py @@ -303,13 +303,13 @@ class ConfigRoute(Route): return Response().ok(message="更新 provider source 成功").__dict__ async def get_provider_template(self): - provider_config = astrbot_config["provider"] config_schema = { "provider": CONFIG_METADATA_2["provider_group"]["metadata"]["provider"] } data = { "config_schema": config_schema, - "providers": provider_config, + "providers": astrbot_config["provider"], + "provider_sources": astrbot_config["provider_sources"], } return Response().ok(data=data).__dict__ diff --git a/dashboard/src/components/provider/AddNewProvider.vue b/dashboard/src/components/provider/AddNewProvider.vue index 776921bca..dfef836ab 100644 --- a/dashboard/src/components/provider/AddNewProvider.vue +++ b/dashboard/src/components/provider/AddNewProvider.vue @@ -112,7 +112,7 @@ export default { // 按提供商类型获取模板列表 getTemplatesByType(type) { - const templates = this.metadata['provider_group']?.metadata?.provider?.config_template || {}; + const templates = this.metadata.provider.config_template || {}; const filtered = {}; for (const [name, template] of Object.entries(templates)) { diff --git a/dashboard/src/composables/useProviderSources.ts b/dashboard/src/composables/useProviderSources.ts index 9e73bd8fc..368cc0afa 100644 --- a/dashboard/src/composables/useProviderSources.ts +++ b/dashboard/src/composables/useProviderSources.ts @@ -234,11 +234,11 @@ export function useProviderSources(options: UseProviderSourcesOptions) { }) const filteredProviders = computed(() => { - if (!config.value.provider || selectedProviderType.value === 'chat_completion') { + if (!providers.value || selectedProviderType.value === 'chat_completion') { return [] } - return config.value.provider.filter((provider: any) => getProviderType(provider) === selectedProviderType.value) + return providers.value.filter((provider: any) => getProviderType(provider) === selectedProviderType.value) }) // ===== Watches ===== @@ -528,7 +528,7 @@ export function useProviderSources(options: UseProviderSourcesOptions) { if (res.data.status === 'error') { throw new Error(res.data.message) } - config.value.provider.push(newProvider) + providers.value.push(newProvider) showMessage(res.data.message || tm('models.addSuccess', { model: modelName })) } catch (error: any) { showMessage(error.response?.data?.message || error.message || tm('providerSources.saveError'), 'error') @@ -572,17 +572,7 @@ export function useProviderSources(options: UseProviderSourcesOptions) { } async function loadConfig() { - try { - const response = await axios.get('/api/config/get') - if (response.data.status === 'ok') { - config.value = response.data.data.config - providerSources.value = config.value.provider_sources || [] - providers.value = config.value.provider || [] - metadata.value = response.data.data.metadata - } - } catch (error: any) { - showMessage(error.message || 'Failed to load config', 'error') - } + loadProviderTemplate() } async function loadProviderTemplate() { @@ -593,6 +583,8 @@ export function useProviderSources(options: UseProviderSourcesOptions) { if (configSchema.value.provider?.config_template) { providerTemplates.value = configSchema.value.provider.config_template } + providerSources.value = response.data.data.provider_sources || [] + providers.value = response.data.data.providers || [] } } catch (error) { console.error('Failed to load provider template:', error) @@ -604,7 +596,6 @@ export function useProviderSources(options: UseProviderSourcesOptions) { } onMounted(async () => { - await loadConfig() await loadProviderTemplate() }) diff --git a/dashboard/src/views/ProviderPage.vue b/dashboard/src/views/ProviderPage.vue index 8a3ad6e64..0f591b501 100644 --- a/dashboard/src/views/ProviderPage.vue +++ b/dashboard/src/views/ProviderPage.vue @@ -125,7 +125,7 @@ @@ -162,7 +162,7 @@ - @@ -186,7 +186,7 @@ - @@ -289,8 +289,7 @@ function showMessage(message, color = 'success') { } const { - config, - metadata, + providers, selectedProviderType, selectedProviderSource, availableModels, @@ -397,7 +396,7 @@ function selectProviderTemplate(name) { showProviderCfg.value = true updatingMode.value = false newSelectedProviderConfig.value = JSON.parse(JSON.stringify( - metadata.value['provider_group']?.metadata?.provider?.config_template[name] || {} + configSchema.value.provider.config_template[name] || {} )) } @@ -407,7 +406,7 @@ function configExistingProvider(provider) { newSelectedProviderConfig.value = {} // 比对默认配置模版,看看是否有更新 - let templates = metadata.value['provider_group']?.metadata?.provider?.config_template || {} + let templates = configSchema.value.provider.config_template || {} let defaultConfig = {} for (let key in templates) { if (templates[key]?.type === provider.type) { @@ -523,7 +522,7 @@ async function copyProvider(providerToCopy) { const generateUniqueId = (baseId) => { let newId = `${baseId}_copy` let counter = 1 - const existingIds = config.value.provider.map(p => p.id) + const existingIds = providers.value.map(p => p.id) while (existingIds.includes(newId)) { newId = `${baseId}_copy_${counter}` counter++ @@ -545,25 +544,6 @@ async function copyProvider(providerToCopy) { } } -function providerStatusChange(provider) { - provider.enable = !provider.enable - - axios.post('/api/config/provider/update', { - id: provider.id, - config: provider - }).then((res) => { - if (res.data.status === 'error') { - showMessage(res.data.message, 'error') - return - } - loadConfig() - showMessage(res.data.message || tm('messages.success.statusUpdate')) - }).catch((err) => { - provider.enable = !provider.enable - showMessage(err.response?.data?.message || err.message, 'error') - }) -} - async function toggleProviderEnable(provider, value) { provider.enable = value @@ -576,11 +556,11 @@ async function toggleProviderEnable(provider, value) { if (res.data.status === 'error') { throw new Error(res.data.message) } - showMessage(res.data.message || tm('messages.success.statusUpdate')) } catch (error) { - provider.enable = !value showMessage(error.response?.data?.message || error.message || tm('providerSources.saveError'), 'error') + } finally { + await loadConfig() } }