diff --git a/apps/stage-tamagotchi/src/pages/settings/providers/ollama.vue b/apps/stage-tamagotchi/src/pages/settings/providers/ollama.vue index 5ac0d2a30..8fed6df81 100644 --- a/apps/stage-tamagotchi/src/pages/settings/providers/ollama.vue +++ b/apps/stage-tamagotchi/src/pages/settings/providers/ollama.vue @@ -2,6 +2,7 @@ import type { RemovableRef } from '@vueuse/core' import { + Alert, ProviderAdvancedSettings, ProviderBaseUrlInput, ProviderBasicSettings, @@ -24,6 +25,8 @@ const { providers } = storeToRefs(providersStore) as { providers: RemovableRef providersStore.getProviderMetadata(providerId)) +const validationMessage = ref('') + const baseUrl = computed({ get: () => providers.value[providerId]?.baseUrl || providerMetadata.value?.defaultOptions?.().baseUrl || '', set: (value) => { @@ -34,27 +37,7 @@ const baseUrl = computed({ }, }) -onMounted(() => { - providersStore.initializeProvider(providerId) - - // Initialize refs with current values - baseUrl.value = providers.value[providerId]?.baseUrl || providerMetadata.value?.defaultOptions?.().baseUrl || '' - - // Initialize headers if not already set - if (!providers.value[providerId]?.headers) { - providers.value[providerId].headers = {} - } -}) - -function handleResetSettings() { - providers.value[providerId] = { - ...(providerMetadata.value?.defaultOptions as any), - } -} - -const headers = ref<{ key: string, value: string }[]>([ - { key: '', value: '' }, -]) +const headers = ref<{ key: string, value: string }[]>(Object.entries(providers.value[providerId]?.headers).map(([key, value]) => ({ key, value } as { key: string, value: string })) || [{ key: '', value: '' }]) function addKeyValue(headers: { key: string, value: string }[], key: string, value: string) { if (!headers) @@ -80,13 +63,75 @@ watch(headers, (headers) => { if (headers.length > 0 && (headers[headers.length - 1].key !== '' || headers[headers.length - 1].value !== '')) { headers.push({ key: '', value: '' }) } + + providers.value[providerId].headers = headers.filter(header => header.key !== '').reduce((acc, header) => { + acc[header.key] = header.value + return acc + }, {} as Record) }, { deep: true, immediate: true, }) + +async function refetch() { + try { + const validationResult = await providerMetadata.value.validators.validateProviderConfig({ + baseUrl: baseUrl.value, + headers: headers.value.filter(header => header.key !== '').reduce((acc, header) => { + acc[header.key] = header.value + return acc + }, {} as Record), + }) + + if (!validationResult.valid) { + validationMessage.value = t('settings.dialogs.onboarding.validationError', { + error: validationResult.reason, + }) + } + } + catch (error) { + validationMessage.value = t('settings.dialogs.onboarding.validationError', { + error: error instanceof Error ? error.message : String(error), + }) + } +} + +watch([baseUrl, headers], refetch, { immediate: true }) +watch(headers, refetch, { deep: true }) + +onMounted(() => { + providersStore.initializeProvider(providerId) + + // Initialize refs with current values + baseUrl.value = providers.value[providerId]?.baseUrl || providerMetadata.value?.defaultOptions?.().baseUrl || '' + + // Initialize headers if not already set + if (!providers.value[providerId]?.headers) { + providers.value[providerId].headers = {} + } + if (headers.value.length === 0) { + headers.value = [{ key: '', value: '' }] + } +}) + +function handleResetSettings() { + providers.value[providerId] = { + ...(providerMetadata.value?.defaultOptions as any), + } +}