diff --git a/src/composables/useLlmProviderDirectory.ts b/src/composables/useLlmProviderDirectory.ts
index 2456301a..0b7d5f3f 100644
--- a/src/composables/useLlmProviderDirectory.ts
+++ b/src/composables/useLlmProviderDirectory.ts
@@ -16,11 +16,17 @@ export interface LlmProviderAuthStatus {
updated_at?: number | null
}
+export interface LlmProviderUrlPreset {
+ label: string
+ value: string
+}
+
export interface LlmProvider {
id: string
name: string
runtime: string
default_base_url: string
+ base_url_presets?: LlmProviderUrlPreset[]
base_url_editable: boolean
requires_base_url: boolean
supports_api_key: boolean
@@ -96,9 +102,15 @@ export function useLlmProviderDirectory(options: UseLlmProviderDirectoryOptions)
() => models.value.find(item => item.id === normalizeValue(options.model.value)) || null,
)
const providerItems = computed(() => providers.value.map(item => ({ title: item.name, value: item.id })))
+ const baseUrlPresetItems = computed(() =>
+ (selectedProvider.value?.base_url_presets || []).map(item => ({
+ title: item.label,
+ value: item.value,
+ })),
+ )
const providerConnected = computed(() => Boolean(selectedProvider.value?.auth_status?.connected))
const showBaseUrlField = computed(
- () => Boolean(selectedProvider.value?.requires_base_url || selectedProvider.value?.base_url_editable),
+ () => Boolean(selectedProvider.value && (selectedProvider.value.oauth_methods || []).length === 0),
)
const showApiKeyField = computed(() => selectedProvider.value?.supports_api_key !== false)
const hasUsableCredential = computed(() => {
@@ -333,6 +345,7 @@ export function useLlmProviderDirectory(options: UseLlmProviderDirectoryOptions)
return {
providers,
providerItems,
+ baseUrlPresetItems,
models,
selectedProvider,
selectedModel,
diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts
index b9abf5c9..2ced4da9 100644
--- a/src/locales/en-US.ts
+++ b/src/locales/en-US.ts
@@ -1355,6 +1355,8 @@ export default {
llmApiKey: 'LLM API Key',
llmApiKeyHint: 'API key from the LLM service provider for authentication',
llmApiKeyPlaceholder: 'Please enter API key',
+ llmBaseUrlPreset: 'LLM URL Preset',
+ llmBaseUrlPresetHint: 'Start with a provider preset URL, then edit the actual request URL below if needed',
llmBaseUrl: 'LLM Base URL',
llmBaseUrlHint: 'Base URL for LLM API, used for custom API endpoints',
llmProviderAuth: 'Provider Authorization',
diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts
index aa35c1c4..612b54c8 100644
--- a/src/locales/zh-CN.ts
+++ b/src/locales/zh-CN.ts
@@ -1348,6 +1348,8 @@ export default {
llmApiKey: 'LLM API密钥',
llmApiKeyHint: 'LLM服务提供商的API密钥,用于身份验证',
llmApiKeyPlaceholder: '请输入API密钥',
+ llmBaseUrlPreset: 'LLM地址预设',
+ llmBaseUrlPresetHint: '可先选择供应商预设地址,再按需修改下方实际调用地址',
llmBaseUrl: 'LLM基础URL',
llmBaseUrlHint: 'LLM API的基础URL地址,用于自定义API端点',
llmProviderAuth: '提供商授权',
diff --git a/src/locales/zh-TW.ts b/src/locales/zh-TW.ts
index c5a98532..58b0cd2d 100644
--- a/src/locales/zh-TW.ts
+++ b/src/locales/zh-TW.ts
@@ -1350,6 +1350,8 @@ export default {
llmApiKey: 'LLM API密鑰',
llmApiKeyHint: 'LLM服務提供商的API密鑰,用於身份驗證',
llmApiKeyPlaceholder: '請輸入API密鑰',
+ llmBaseUrlPreset: 'LLM位址預設',
+ llmBaseUrlPresetHint: '可先選擇提供商預設位址,再按需修改下方實際調用位址',
llmBaseUrl: 'LLM基礎URL',
llmBaseUrlHint: 'LLM API的基礎URL地址,用於自定義API端點',
llmProviderAuth: '提供商授權',
diff --git a/src/views/setting/AccountSettingSystem.vue b/src/views/setting/AccountSettingSystem.vue
index 85d4d9d8..7e92dab8 100644
--- a/src/views/setting/AccountSettingSystem.vue
+++ b/src/views/setting/AccountSettingSystem.vue
@@ -221,6 +221,7 @@ const llmMaxContextRef = computed({
const {
providerItems: llmProviderItems,
+ baseUrlPresetItems: llmBaseUrlPresetItems,
models: llmModels,
selectedProvider: selectedLlmProvider,
selectedModel: selectedLlmModel,
@@ -1015,11 +1016,24 @@ watch(currentLlmSnapshotKey, (snapshotKey, previousSnapshotKey) => {
/>
+ {
+ SystemSettings.Basic.LLM_BASE_URL = value || '';
+ }"
+ :label="t('setting.system.llmBaseUrlPreset')"
+ :hint="t('setting.system.llmBaseUrlPresetHint')"
+ :items="llmBaseUrlPresetItems"
+ persistent-hint
+ prepend-inner-icon="mdi-format-list-bulleted-square"
+ class="mb-3"
+ />
diff --git a/src/views/setup/AgentSettingsStep.vue b/src/views/setup/AgentSettingsStep.vue
index 002fd2fb..a107aa35 100644
--- a/src/views/setup/AgentSettingsStep.vue
+++ b/src/views/setup/AgentSettingsStep.vue
@@ -53,6 +53,7 @@ const authConnectedRef = computed({
const {
providerItems,
+ baseUrlPresetItems,
models: llmModels,
selectedProvider,
selectedModel,
@@ -228,11 +229,24 @@ onMounted(async () => {
+ {
+ wizardData.agent.baseUrl = value || '';
+ }"
+ :label="t('setting.system.llmBaseUrlPreset')"
+ :hint="t('setting.system.llmBaseUrlPresetHint')"
+ :items="baseUrlPresetItems"
+ persistent-hint
+ prepend-inner-icon="mdi-format-list-bulleted-square"
+ class="mb-3"
+ />