diff --git a/apps/stage-web/src/pages/settings/providers/ollama.vue b/apps/stage-web/src/pages/settings/providers/ollama.vue index b4b4143d2..4ae7f2656 100644 --- a/apps/stage-web/src/pages/settings/providers/ollama.vue +++ b/apps/stage-web/src/pages/settings/providers/ollama.vue @@ -20,6 +20,7 @@ const { t } = useI18n() const router = useRouter() const providersStore = useProvidersStore() const { providers } = storeToRefs(providersStore) as { providers: RemovableRef> } +const loading = ref(0) // Get provider metadata const providerId = 'ollama' @@ -74,6 +75,11 @@ watch(headers, (headers) => { }) async function refetch() { + loading.value++ + // service startup time + const startValidationTimestamp = performance.now() + let finalValidationMessage = '' + try { const validationResult = await providerMetadata.value.validators.validateProviderConfig({ baseUrl: baseUrl.value, @@ -84,16 +90,25 @@ async function refetch() { }) if (!validationResult.valid) { - validationMessage.value = t('settings.dialogs.onboarding.validationError', { + finalValidationMessage = t('settings.dialogs.onboarding.validationError', { error: validationResult.reason, }) } + else { + finalValidationMessage = '' + } } catch (error) { - validationMessage.value = t('settings.dialogs.onboarding.validationError', { + finalValidationMessage = t('settings.dialogs.onboarding.validationError', { error: error instanceof Error ? error.message : String(error), }) } + finally { + setTimeout(() => { + loading.value-- + validationMessage.value = finalValidationMessage + }, 500 - (performance.now() - startValidationTimestamp)) + } } watch([baseUrl, headers], refetch, { immediate: true }) @@ -122,47 +137,59 @@ function handleResetSettings() { diff --git a/packages/i18n/src/locales/en/settings.yaml b/packages/i18n/src/locales/en/settings.yaml index f8e78ffde..2a52c2fd2 100644 --- a/packages/i18n/src/locales/en/settings.yaml +++ b/packages/i18n/src/locales/en/settings.yaml @@ -334,6 +334,9 @@ pages: placeholder: Input Cloudflare API Key title: Cloudflare Workers AI common: + status: + validating: Validating + valid: Configuration seems to be valid. fields: field: pitch: diff --git a/packages/i18n/src/locales/zh-Hans/settings.yaml b/packages/i18n/src/locales/zh-Hans/settings.yaml index dce87df2b..1eebf539f 100644 --- a/packages/i18n/src/locales/zh-Hans/settings.yaml +++ b/packages/i18n/src/locales/zh-Hans/settings.yaml @@ -305,6 +305,9 @@ pages: placeholder: 请输入 Cloudflare Workers AI 的 API Key title: Workers AI common: + status: + validating: 正在验证配置 + valid: 配置似乎有效。 fields: field: pitch: diff --git a/packages/stage-ui/src/components/Misc/Alert.vue b/packages/stage-ui/src/components/Misc/Alert.vue index 748704757..cca6bc3fe 100644 --- a/packages/stage-ui/src/components/Misc/Alert.vue +++ b/packages/stage-ui/src/components/Misc/Alert.vue @@ -1,16 +1,24 @@