diff --git a/packages/i18n/src/locales/en/settings.yaml b/packages/i18n/src/locales/en/settings.yaml
index 75c3c4733..f9c97a1e2 100644
--- a/packages/i18n/src/locales/en/settings.yaml
+++ b/packages/i18n/src/locales/en/settings.yaml
@@ -1006,6 +1006,9 @@ pages:
chat:
title: Chat
description: Text generation model providers. e.g. OpenRouter, OpenAI, Ollama.
+ vision:
+ title: Vision
+ description: Vision model providers for image understanding.
speech:
title: Speech
description: Speech (text-to-speech) model providers. e.g. ElevenLabs, Azure Speech.
diff --git a/packages/i18n/src/locales/zh-Hans/settings.yaml b/packages/i18n/src/locales/zh-Hans/settings.yaml
index c7a94a54a..0f04934c9 100644
--- a/packages/i18n/src/locales/zh-Hans/settings.yaml
+++ b/packages/i18n/src/locales/zh-Hans/settings.yaml
@@ -960,6 +960,9 @@ pages:
chat:
title: 聊天
description: Text generation model providers. e.g. OpenRouter, OpenAI, Ollama.
+ vision:
+ title: 视觉
+ description: 用于图像理解的视觉模型服务来源。
speech:
title: Speech
description: Speech (text-to-speech) model providers. e.g. ElevenLabs, Azure Speech.
diff --git a/packages/stage-pages/src/pages/settings/modules/vision.vue b/packages/stage-pages/src/pages/settings/modules/vision.vue
index bbb8c34d5..4e1222970 100644
--- a/packages/stage-pages/src/pages/settings/modules/vision.vue
+++ b/packages/stage-pages/src/pages/settings/modules/vision.vue
@@ -12,7 +12,7 @@ import { RouterLink } from 'vue-router'
const providersStore = useProvidersStore()
const visionStore = useVisionStore()
const visionProcessingStore = useVisionProcessingStore()
-const { persistedChatProvidersMetadata, configuredProviders } = storeToRefs(providersStore)
+const { persistedVisionProvidersMetadata, configuredProviders } = storeToRefs(providersStore)
const {
activeProvider,
activeModel,
@@ -61,7 +61,11 @@ function handleDeleteProvider(providerId: string) {
const formattedLastCapture = computed(() => formatRelativeTime(lastCaptureAt.value))
const formattedLastContextUpdate = computed(() => formatRelativeTime(lastContextUpdateAt.value))
-const isOllamaVisionProvider = computed(() => activeProvider.value === 'ollama')
+const isOllamaVisionProvider = computed(() => activeProvider.value === 'vision-ollama')
+
+function canDeleteProvider(providerId: string) {
+ return !providerId.startsWith('official-provider') && !providerId.startsWith('vision-official-provider')
+}
function formatRelativeTime(timestamp: number | null) {
if (!timestamp)
@@ -93,12 +97,12 @@ function formatRelativeTime(timestamp: number | null) {