feat: support DeepSeek, OpenRouter & Ollama providers

This commit is contained in:
AnotiaWang
2025-02-15 15:31:25 +08:00
parent cffb4c3d73
commit 970ca029f4
12 changed files with 144 additions and 33 deletions

View File

@ -24,11 +24,20 @@
{
label: t('settings.ai.providers.openaiCompatible.title'),
help: t('settings.ai.providers.openaiCompatible.description'),
apiBasePlaceholder: t(
'settings.ai.providers.openaiCompatible.apiBasePlaceholder',
),
value: 'openai-compatible',
},
{
label: 'DeepSeek',
value: 'deepseek',
},
{
label: 'OpenRouter',
value: 'openrouter',
},
{
label: 'Ollama',
value: 'ollama',
},
])
const selectedAiProvider = computed(() =>
aiProviderOptions.value.find((o) => o.value === config.value.ai.provider),
@ -110,15 +119,22 @@
<h3 class="font-bold">{{ $t('settings.ai.provider') }}</h3>
<UFormField>
<template v-if="selectedAiProvider" #help>
{{ selectedAiProvider.help }}
<span class="whitespace-pre-wrap">
{{ selectedAiProvider.help }}
</span>
</template>
<USelect v-model="config.ai.provider" :items="aiProviderOptions" />
<USelect
v-model="config.ai.provider"
class="w-50"
:items="aiProviderOptions"
/>
</UFormField>
<div
v-if="config.ai.provider === 'openai-compatible'"
class="flex flex-col gap-y-2"
>
<UFormField :label="$t('settings.ai.apiKey')" required>
<div class="flex flex-col gap-y-2">
<UFormField
:label="$t('settings.ai.apiKey')"
:required="config.ai.provider !== 'ollama'"
>
<PasswordInput
v-model="config.ai.apiKey"
class="w-full"
@ -129,7 +145,7 @@
<UInput
v-model="config.ai.apiBase"
class="w-full"
:placeholder="selectedAiProvider?.apiBasePlaceholder"
:placeholder="aiApiBase"
/>
</UFormField>
<UFormField :label="$t('settings.ai.model')" required>

View File

@ -94,7 +94,7 @@
}
} catch (e: any) {
console.error('Error getting feedback:', e)
if (e.message.includes('Failed to fetch')) {
if (e.message?.includes('Failed to fetch')) {
e.message += `\n${t('error.requestBlockedByCORS')}`
}
error.value = t('modelFeedback.error', [e.message])